Files
firebase-ios-sdk/FirebaseAppDistributionInternal/Sources/FeedbackViewController.swift

107 lines
3.1 KiB
Swift

// 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 = {}
// (TODO) Can we make feedbackName and additionalFormText non-null?
var releaseName: String?
var additionalFormText: String?
var image: UIImage?
@IBOutlet var screenshotUIImageView: UIImageView!
@IBOutlet var additionalFormTextLabel: UILabel!
@IBOutlet var feedbackTextView: UITextView!
@IBOutlet var navigationBar: UINavigationBar!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let additionalFormText = additionalFormText
if additionalFormText != nil {
additionalFormTextLabel.text = additionalFormText
}
let image = image
if image != nil {
screenshotUIImageView.image = image
}
}
override func viewWillAppear(_ animated: Bool) {
screenshotUIImageView.image = image
image = nil
}
@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()
}
}
@IBAction func tappedCancel(_ sender: Any) {
dismiss(animated: true)
}
override func viewDidDisappear(_ animated: Bool) {
viewDidDisappearCallback()
}
func feedbackSubmitted() {
// TODO(tundeagboola) show success toast
dismiss(animated: true)
}
}