From 51f782e8c677c9c6a7db9a11b73680d2ea03e36d Mon Sep 17 00:00:00 2001 From: Oliver Wiese <oliver.wiese@fu-berlin.de> Date: Fri, 18 Oct 2019 12:06:50 +0200 Subject: [PATCH] add feedback button to views --- enzevalos_iphone/Base.lproj/Main.storyboard | 8 ++++---- enzevalos_iphone/ContactViewController.swift | 16 +++++++++++++++- .../CryptoManagementViewController.swift | 7 +++++++ enzevalos_iphone/ExportInfoViewController.swift | 14 ++++++++++++++ enzevalos_iphone/ExportViewController.swift | 14 ++++++++++++++ enzevalos_iphone/FeedbackButtonHelper.swift | 7 ++++++- enzevalos_iphone/FolderViewController.swift | 7 +++++++ .../ImportKeyOverviewController.swift | 14 +++++++++++++- enzevalos_iphone/InboxViewController.swift | 6 ++++++ enzevalos_iphone/KeyTableViewController.swift | 10 ++++++++++ enzevalos_iphone/KeyViewController.swift | 7 +++++++ .../MoreInformationViewController.swift | 7 +++++++ enzevalos_iphone/PasteKeyViewController.swift | 15 +++++++++++++++ enzevalos_iphone/ReadViewController.swift | 5 +++++ .../SecretKeyTableViewController.swift | 14 ++++++++++++++ enzevalos_iphone/SendViewController.swift | 3 +++ enzevalos_iphone/en.lproj/Localizable.strings | 2 +- 17 files changed, 148 insertions(+), 8 deletions(-) diff --git a/enzevalos_iphone/Base.lproj/Main.storyboard b/enzevalos_iphone/Base.lproj/Main.storyboard index 39c78cdb..8fbbe16d 100644 --- a/enzevalos_iphone/Base.lproj/Main.storyboard +++ b/enzevalos_iphone/Base.lproj/Main.storyboard @@ -2116,7 +2116,7 @@ Um deine sicheren E-Mails auch auf einem anderen Gerät lesen zu können, muss d <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Copy the key from a website, mail or message and paste it here." textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PtY-5W-KXC"> - <rect key="frame" x="0.0" y="52" width="414" height="40.666666666666657"/> + <rect key="frame" x="10" y="52" width="394" height="40.666666666666657"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <accessibility key="accessibilityConfiguration"> <accessibilityTraits key="traits" notEnabled="YES" updatesFrequently="YES"/> @@ -2126,7 +2126,7 @@ Um deine sicheren E-Mails auch auf einem anderen Gerät lesen zu können, muss d <nil key="highlightedColor"/> </label> <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" layoutMarginsFollowReadableWidth="YES" keyboardDismissMode="interactive" translatesAutoresizingMaskIntoConstraints="NO" id="OLH-mw-Ir8"> - <rect key="frame" x="0.0" y="100.66666666666669" width="414" height="692.33333333333326"/> + <rect key="frame" x="10" y="100.66666666666669" width="394" height="692.33333333333326"/> <color key="backgroundColor" cocoaTouchSystemColor="tableCellGroupedBackgroundColor"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <textInputTraits key="textInputTraits" autocorrectionType="no" spellCheckingType="no" keyboardType="alphabet" returnKeyType="done" smartDashesType="no" smartInsertDeleteType="no" smartQuotesType="no"/> @@ -2137,8 +2137,8 @@ Um deine sicheren E-Mails auch auf einem anderen Gerät lesen zu können, muss d <constraint firstItem="PtY-5W-KXC" firstAttribute="leading" secondItem="OLH-mw-Ir8" secondAttribute="leading" id="25m-FG-JOe"/> <constraint firstItem="PtY-5W-KXC" firstAttribute="trailing" secondItem="OLH-mw-Ir8" secondAttribute="trailing" id="CNg-2A-yqE"/> <constraint firstItem="PtY-5W-KXC" firstAttribute="top" secondItem="nKx-xx-iO1" secondAttribute="top" constant="8" id="F3b-xN-38F"/> - <constraint firstItem="PtY-5W-KXC" firstAttribute="trailing" secondItem="CHD-6c-e74" secondAttribute="trailingMargin" constant="20" id="FI8-5t-p8e"/> - <constraint firstItem="PtY-5W-KXC" firstAttribute="leading" secondItem="CHD-6c-e74" secondAttribute="leadingMargin" constant="-20" id="aif-Bp-GHa"/> + <constraint firstItem="PtY-5W-KXC" firstAttribute="trailing" secondItem="CHD-6c-e74" secondAttribute="trailingMargin" constant="10" id="FI8-5t-p8e"/> + <constraint firstItem="PtY-5W-KXC" firstAttribute="leading" secondItem="CHD-6c-e74" secondAttribute="leadingMargin" constant="-10" id="aif-Bp-GHa"/> <constraint firstItem="nKx-xx-iO1" firstAttribute="bottom" secondItem="OLH-mw-Ir8" secondAttribute="bottom" constant="20" identifier="bottom" id="rGt-PZ-y3n"/> <constraint firstItem="OLH-mw-Ir8" firstAttribute="top" secondItem="PtY-5W-KXC" secondAttribute="bottom" constant="8" id="y90-Rq-qze"/> </constraints> diff --git a/enzevalos_iphone/ContactViewController.swift b/enzevalos_iphone/ContactViewController.swift index 9baef069..b9776288 100644 --- a/enzevalos_iphone/ContactViewController.swift +++ b/enzevalos_iphone/ContactViewController.swift @@ -68,6 +68,17 @@ class ContactViewController: UIViewController { otherRecords = con.ezContact.records.filter({ $0 != keyRecord }).sorted() Logger.log(contactViewOpen: self.keyRecord, otherRecords: self.otherRecords, isUser: self.isUser) + + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) + if var items = self.toolbarItems { + items.append(space) + items.append(feedbackButton) + } else { + self.toolbarItems = [space, feedbackButton] + } + + navigationController?.toolbar.isHidden = false } } @@ -75,7 +86,10 @@ class ContactViewController: UIViewController { if let row = tableView.indexPathForSelectedRow { tableView.deselectRow(at: row, animated: false) } - navigationController?.toolbar.isHidden = false + } + + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .Contact, navigationController: self.navigationController) } @objc func dismissView() { diff --git a/enzevalos_iphone/CryptoManagementViewController.swift b/enzevalos_iphone/CryptoManagementViewController.swift index bb48e424..b36e92a5 100644 --- a/enzevalos_iphone/CryptoManagementViewController.swift +++ b/enzevalos_iphone/CryptoManagementViewController.swift @@ -64,8 +64,15 @@ class CryptoManagementViewController: UITableViewController { //let infoButton = UIButton(type: .infoLight) //let barButton = UIBarButtonItem(customView: infoButton) //self.navigationItem.rightBarButtonItem = barButton + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) + self.toolbarItems = [space, feedbackButton] + } + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .Management, navigationController: self.navigationController) + } // MARK: - Table view data source override func numberOfSections(in tableView: UITableView) -> Int { diff --git a/enzevalos_iphone/ExportInfoViewController.swift b/enzevalos_iphone/ExportInfoViewController.swift index e97d6a18..3d9cc4bd 100644 --- a/enzevalos_iphone/ExportInfoViewController.swift +++ b/enzevalos_iphone/ExportInfoViewController.swift @@ -51,6 +51,20 @@ class ExportInfoViewController: UITableViewController { tableView.estimatedRowHeight = 140 navigationItem.setRightBarButton(navigationItem.rightBarButtonItem, animated: false) navigationItem.rightBarButtonItem?.title = NSLocalizedString("Next", comment: "next step") + + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + let space = FeedbackButtonHelper.SpaceButton + if var items = self.toolbarItems { + items.append(space) + items.append(feedbackButton) + } else { + self.toolbarItems = [space, feedbackButton] + } + + navigationController?.toolbar.isHidden = false + } + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .Export1, navigationController: self.navigationController) } override func viewWillAppear(_ animated: Bool) { diff --git a/enzevalos_iphone/ExportViewController.swift b/enzevalos_iphone/ExportViewController.swift index 02cdfcea..62ef3c0c 100644 --- a/enzevalos_iphone/ExportViewController.swift +++ b/enzevalos_iphone/ExportViewController.swift @@ -158,8 +158,22 @@ class ExportViewController: UITableViewController { // Logger.queue.async(flags: .barrier) { Logger.log(exportKeyViewOpen: 2) // } + + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + let space = FeedbackButtonHelper.SpaceButton + if var items = self.toolbarItems { + items.append(space) + items.append(feedbackButton) + } else { + self.toolbarItems = [space, feedbackButton] + } + + navigationController?.toolbar.isHidden = false } + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .Export2, navigationController: self.navigationController) + } func mailSend(_ error: Error?) { if (error != nil) { NSLog("Error sending email: \(String(describing: error))") diff --git a/enzevalos_iphone/FeedbackButtonHelper.swift b/enzevalos_iphone/FeedbackButtonHelper.swift index 1030ce82..25bf01a6 100644 --- a/enzevalos_iphone/FeedbackButtonHelper.swift +++ b/enzevalos_iphone/FeedbackButtonHelper.swift @@ -9,13 +9,18 @@ import Foundation enum ViewName: String { - case Inbox, Read + case Inbox, Read, Compose, Key, Contact, Folder, Management, Information, SecretKeyTable, Paste, KeyTable, Import, Export1, Export2 } class FeedbackButtonHelper { static let Name = NSLocalizedString("Feedback.Name", comment: "Feedback") + static var SpaceButton: UIBarButtonItem { + get { + return UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) + } + } static func composeFeedback(view: ViewName, navigationController: UINavigationController?) { let receiver = SUPPORT_MAIL_ADR let subject = String(format: NSLocalizedString("Feedback.Mail.Subject", comment: "Feedback"), view.rawValue) diff --git a/enzevalos_iphone/FolderViewController.swift b/enzevalos_iphone/FolderViewController.swift index 2b9a56cc..bde8ef9e 100644 --- a/enzevalos_iphone/FolderViewController.swift +++ b/enzevalos_iphone/FolderViewController.swift @@ -75,6 +75,13 @@ class FolderViewController: UITableViewController { lastUpdateLabel.font = UIFont.systemFont(ofSize: 13) lastUpdateLabel.textColor = UIColor.black lastUpdateButton.customView = lastUpdateLabel + + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + self.toolbarItems?.append(feedbackButton) + } + + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .Folder, navigationController: self.navigationController) } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) diff --git a/enzevalos_iphone/ImportKeyOverviewController.swift b/enzevalos_iphone/ImportKeyOverviewController.swift index 66b32a1b..50deca67 100644 --- a/enzevalos_iphone/ImportKeyOverviewController.swift +++ b/enzevalos_iphone/ImportKeyOverviewController.swift @@ -22,8 +22,20 @@ class ImportKeyOverviewController: UITableViewController, ButtonCellHandler { override func viewDidLoad() { super.viewDidLoad() self.title = NSLocalizedString("Import.Overview.Title", comment: "Add a key") + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + let space = FeedbackButtonHelper.SpaceButton + if var items = self.toolbarItems { + items.append(space) + items.append(feedbackButton) + } else { + self.toolbarItems = [space, feedbackButton] + } + + navigationController?.toolbar.isHidden = false + } + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .Import, navigationController: self.navigationController) } - // MARK: - Table view data source override func numberOfSections(in tableView: UITableView) -> Int { diff --git a/enzevalos_iphone/InboxViewController.swift b/enzevalos_iphone/InboxViewController.swift index 6f28acfa..42b4d199 100644 --- a/enzevalos_iphone/InboxViewController.swift +++ b/enzevalos_iphone/InboxViewController.swift @@ -92,6 +92,12 @@ class InboxViewController: UITableViewController, InboxCellDelegator { [weak self] _ in self?.tableView.reloadData() }) + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + self.toolbarItems?.append(feedbackButton) + } + + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .Inbox, navigationController: self.navigationController) } @objc func refresh(_ refreshControl: UIRefreshControl?) { diff --git a/enzevalos_iphone/KeyTableViewController.swift b/enzevalos_iphone/KeyTableViewController.swift index 36228a77..f45b24c8 100644 --- a/enzevalos_iphone/KeyTableViewController.swift +++ b/enzevalos_iphone/KeyTableViewController.swift @@ -71,8 +71,18 @@ class KeyTableViewController: UITableViewController { self.tableView = UITableView.init(frame: CGRect.zero, style: .grouped) } + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + if var items = self.toolbarItems { + items.append(FeedbackButtonHelper.SpaceButton) + items.append(feedbackButton) + } else { + self.toolbarItems = [FeedbackButtonHelper.SpaceButton, feedbackButton] + } } + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .KeyTable, navigationController: self.navigationController) + } override func viewWillAppear(_ animated: Bool) { self.tableView.reloadData() } diff --git a/enzevalos_iphone/KeyViewController.swift b/enzevalos_iphone/KeyViewController.swift index b88f9675..b789c227 100644 --- a/enzevalos_iphone/KeyViewController.swift +++ b/enzevalos_iphone/KeyViewController.swift @@ -38,6 +38,13 @@ class KeyViewController: UIViewController { Logger.log(keyViewOpen: keyID) } self.title = NSLocalizedString("KeyDetails", comment: "Details of the key") + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + self.navigationItem.rightBarButtonItem = feedbackButton + + } + + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .Key, navigationController: self.navigationController) } override func viewDidDisappear(_ animated: Bool) { diff --git a/enzevalos_iphone/MoreInformationViewController.swift b/enzevalos_iphone/MoreInformationViewController.swift index ecbb0d08..79f08af1 100644 --- a/enzevalos_iphone/MoreInformationViewController.swift +++ b/enzevalos_iphone/MoreInformationViewController.swift @@ -89,8 +89,15 @@ class MoreInformationViewController: UITableViewController { super.viewDidLoad() self.navigationItem.titleView = UIImageView(image: icon) + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + self.navigationItem.rightBarButtonItem = feedbackButton + self.navigationController?.toolbar.isHidden = true } + + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .Information, navigationController: self.navigationController) + } // MARK: - Table view data source override func numberOfSections(in tableView: UITableView) -> Int { diff --git a/enzevalos_iphone/PasteKeyViewController.swift b/enzevalos_iphone/PasteKeyViewController.swift index a7059b0f..294466fe 100644 --- a/enzevalos_iphone/PasteKeyViewController.swift +++ b/enzevalos_iphone/PasteKeyViewController.swift @@ -73,12 +73,27 @@ class PasteKeyViewController: UIViewController, UITextViewDelegate { self.title = NSLocalizedString("Import.PasteKey.Title", comment: "Just paste a key") pasteArea.delegate = self Logger.log(openPasteKeyView: state) + + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + let space = FeedbackButtonHelper.SpaceButton + if var items = self.toolbarItems { + items.append(space) + items.append(feedbackButton) + } else { + self.toolbarItems = [space, feedbackButton] + } + + navigationController?.toolbar.isHidden = false } deinit { NotificationCenter.default.removeObserver(self) } + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .Paste, navigationController: self.navigationController) + } + func adjustInsetForKeyboardShow(_ show: Bool, notification: Notification) { if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue { let keyboardRectangle = keyboardFrame.cgRectValue diff --git a/enzevalos_iphone/ReadViewController.swift b/enzevalos_iphone/ReadViewController.swift index 940fb3ab..46052da9 100644 --- a/enzevalos_iphone/ReadViewController.swift +++ b/enzevalos_iphone/ReadViewController.swift @@ -179,6 +179,7 @@ class ReadViewController: UITableViewController { self.navigationController?.navigationBar.barTintColor = ThemeManager.unencryptedMessageColor() } } + navigationController?.toolbar.isHidden = false } override func willMove(toParent parent: UIViewController?) { @@ -385,6 +386,10 @@ class ReadViewController: UITableViewController { _ = MoreInformationViewController.pushInfoView(navigationController: self.navigationController, state: state) })) + alert.addAction(UIAlertAction(title: FeedbackButtonHelper.Name, style: .default, handler: { + (action: UIAlertAction!) -> Void in + FeedbackButtonHelper.composeFeedback(view: .Read, navigationController: self.navigationController) + })) alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: { (action: UIAlertAction!) -> Void in let duration = Date().timeIntervalSince(opening) Logger.log(close: icon, mail: m, action: .close, duration: duration) diff --git a/enzevalos_iphone/SecretKeyTableViewController.swift b/enzevalos_iphone/SecretKeyTableViewController.swift index 87f52388..89b89433 100644 --- a/enzevalos_iphone/SecretKeyTableViewController.swift +++ b/enzevalos_iphone/SecretKeyTableViewController.swift @@ -34,6 +34,20 @@ class SecretKeyTableViewController: UITableViewController { keys = DataHandler.handler.findSecretKeys() keys.append(contentsOf: ItunesKeyHandling.iTunesKeyHandler.extractSecretKeys(withKnownKeys: false)) self.title = NSLocalizedString("SecretKeyTable.title", comment: "Title of secret key table") + let feedbackButton = UIBarButtonItem(title: FeedbackButtonHelper.Name, style: .plain, target: self, action:#selector(feedback)) + let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) + if var items = self.toolbarItems { + items.append(space) + items.append(feedbackButton) + } else { + self.toolbarItems = [space, feedbackButton] + } + + navigationController?.toolbar.isHidden = false + } + + @objc func feedback() { + FeedbackButtonHelper.composeFeedback(view: .SecretKeyTable, navigationController: self.navigationController) } override func numberOfSections(in tableView: UITableView) -> Int { diff --git a/enzevalos_iphone/SendViewController.swift b/enzevalos_iphone/SendViewController.swift index 3dc731e9..ebab5f5d 100644 --- a/enzevalos_iphone/SendViewController.swift +++ b/enzevalos_iphone/SendViewController.swift @@ -786,6 +786,9 @@ class SendViewController: UIViewController { _ = MoreInformationViewController.pushInfoView(navigationController: self.navigationController, state: state) })) + alert.addAction(UIAlertAction(title: FeedbackButtonHelper.Name, style: .default, handler: { (action: UIAlertAction!) -> Void in + FeedbackButtonHelper.composeFeedback(view: .Compose, navigationController: self.navigationController) + })) alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: { (action: UIAlertAction!) -> Void in let duration = Date().timeIntervalSince(opening) Logger.log(close: icon, mail: nil, action: .close, duration: duration) diff --git a/enzevalos_iphone/en.lproj/Localizable.strings b/enzevalos_iphone/en.lproj/Localizable.strings index 43f90b08..32a44b6c 100644 --- a/enzevalos_iphone/en.lproj/Localizable.strings +++ b/enzevalos_iphone/en.lproj/Localizable.strings @@ -282,7 +282,7 @@ "Import.Button.Itunes" = "Transfer via iTunes"; "Import.PasteKey.Title" = "Paste a key"; "Import.PasteKey.Area.Default" = "Please, paste a key here..."; -"Import.PasteKey.Info.Start" = "You can copy a key from a mail, file or website and and paste it below. \nA key starts with -----BEGIN PGP PUBLIC KEY BLOCK-----."; +"Import.PasteKey.Info.Start" = "You can copy a key from a mail, file or website and paste it below. \nA key starts with -----BEGIN PGP PUBLIC KEY BLOCK-----."; "Import.PasteKey.Info.WrongFormat" = "Your pasted text looks like a key but is not correct. Please, check your input again. \nA key starts with -----BEGIN PGP PUBLIC KEY BLOCK----- and ends with -----END PGP PUBLIC KEY BLOCK-----."; "Import.PasteKey.Info.NoKeyFormat" = "Your pasted text does not contain a key. \nA key starts with -----BEGIN PGP PUBLIC KEY BLOCK----- and ends with -----END PGP PUBLIC KEY BLOCK-----. \nIf the problem still appears, we might not support the key format. Sorry!"; "Import.PasteKey.Info.Key" = "Your pasted text contains at least one key. Please click on \"next\" to get an overview about them."; -- GitLab