2023-03-13 13:50:32 -04:00
|
|
|
// Copyright 2023 Google LLC
|
|
|
|
|
//
|
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
|
//
|
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
//
|
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
|
|
import UIKit
|
|
|
|
|
|
|
|
|
|
class FeedbackViewController: UIViewController {
|
|
|
|
|
// TODO: Consider the situations where this instance is initiated once, and used
|
|
|
|
|
// multiple times.
|
|
|
|
|
var viewDidDisappearCallback: () -> Void = {}
|
2023-03-13 15:30:53 -04:00
|
|
|
// (TODO) Can we make feedbackName and additionalFormText non-null?
|
|
|
|
|
var releaseName: String?
|
|
|
|
|
var additionalFormText: String?
|
2023-03-13 13:50:32 -04:00
|
|
|
var image: UIImage?
|
|
|
|
|
|
|
|
|
|
@IBOutlet var screenshotUIImageView: UIImageView!
|
2023-03-13 15:30:53 -04:00
|
|
|
@IBOutlet var additionalFormTextLabel: UILabel!
|
2023-03-13 13:50:32 -04:00
|
|
|
@IBOutlet var feedbackTextView: UITextView!
|
|
|
|
|
@IBOutlet var navigationBar: UINavigationBar!
|
|
|
|
|
|
|
|
|
|
override func viewDidLoad() {
|
|
|
|
|
super.viewDidLoad()
|
|
|
|
|
// Do any additional setup after loading the view.
|
2023-03-13 15:30:53 -04:00
|
|
|
|
|
|
|
|
let additionalFormText = additionalFormText
|
|
|
|
|
if additionalFormText != nil {
|
|
|
|
|
additionalFormTextLabel.text = additionalFormText
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let image = image
|
|
|
|
|
if image != nil {
|
|
|
|
|
screenshotUIImageView.image = image
|
|
|
|
|
}
|
2023-03-13 13:50:32 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
|
|
|
screenshotUIImageView.image = image
|
|
|
|
|
image = nil
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-23 15:36:52 -04:00
|
|
|
@IBAction func tappedSend(_ sender: Any) {
|
|
|
|
|
guard let releaseName = releaseName else {
|
|
|
|
|
// TODO(tundeagboola) throw error or
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ApiService
|
|
|
|
|
.createFeedback(releaseName: releaseName,
|
|
|
|
|
feedbackText: feedbackTextView.text) { feedbackName, error in
|
|
|
|
|
if error != nil {
|
|
|
|
|
// TODO(tundeaboola) handle error if create feedback fails
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
guard let feedbackName = feedbackName else {
|
|
|
|
|
// TODO(tundeaboola) handle error if create feedback fails
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
guard let image = self.screenshotUIImageView.image else {
|
|
|
|
|
return self.commitFeedback(feedbackName: feedbackName)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ApiService.uploadImage(feedbackName: feedbackName, image: image) { error in
|
|
|
|
|
if error != nil {
|
|
|
|
|
// TODO(tundeaboola) handle error if upload image fails
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self.commitFeedback(feedbackName: feedbackName)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private func commitFeedback(feedbackName: String) {
|
|
|
|
|
ApiService.commitFeedback(feedbackName: feedbackName) { error in
|
|
|
|
|
if error != nil {
|
|
|
|
|
// TODO(tundeaboola) handle error if commit feedback fails
|
|
|
|
|
}
|
|
|
|
|
self.feedbackSubmitted()
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-03-13 13:50:32 -04:00
|
|
|
|
|
|
|
|
@IBAction func tappedCancel(_ sender: Any) {
|
|
|
|
|
dismiss(animated: true)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
override func viewDidDisappear(_ animated: Bool) {
|
|
|
|
|
viewDidDisappearCallback()
|
|
|
|
|
}
|
2023-03-23 15:36:52 -04:00
|
|
|
|
|
|
|
|
func feedbackSubmitted() {
|
|
|
|
|
// TODO(tundeagboola) show success toast
|
|
|
|
|
dismiss(animated: true)
|
|
|
|
|
}
|
2023-03-13 13:50:32 -04:00
|
|
|
}
|