diff --git a/iOS/Settings/AddAccountViewController.swift b/iOS/Settings/AddAccountViewController.swift index 54cfef989..c4e7a6285 100644 --- a/iOS/Settings/AddAccountViewController.swift +++ b/iOS/Settings/AddAccountViewController.swift @@ -10,7 +10,7 @@ import Account import UIKit protocol AddAccountDismissDelegate: UIViewController { - func dismiss(_ viewController: UIViewController) + func dismiss() } class AddAccountViewController: UITableViewController, AddAccountDismissDelegate { @@ -40,8 +40,7 @@ class AddAccountViewController: UITableViewController, AddAccountDismissDelegate } } - func dismiss(_ viewController: UIViewController) { - viewController.dismiss(animated: true, completion: nil) + func dismiss() { navigationController?.popViewController(animated: false) } diff --git a/iOS/Settings/AddLocalAccountViewController.swift b/iOS/Settings/AddLocalAccountViewController.swift index efa58085d..c89569eaf 100644 --- a/iOS/Settings/AddLocalAccountViewController.swift +++ b/iOS/Settings/AddLocalAccountViewController.swift @@ -25,13 +25,15 @@ class AddLocalAccountViewController: UIViewController { } @IBAction func cancel(_ sender: Any) { - delegate?.dismiss(self) + dismiss(animated: true, completion: nil) + delegate?.dismiss() } @IBAction func addAccountTapped(_ sender: Any) { let account = AccountManager.shared.createAccount(type: .onMyMac) account.name = nameTextField.text - delegate?.dismiss(self) + dismiss(animated: true, completion: nil) + delegate?.dismiss() } } diff --git a/iOS/Settings/DetailAccountViewController.swift b/iOS/Settings/DetailAccountViewController.swift index 11deef01e..e44fc0099 100644 --- a/iOS/Settings/DetailAccountViewController.swift +++ b/iOS/Settings/DetailAccountViewController.swift @@ -37,15 +37,26 @@ class DetailAccountViewController: UITableViewController { extension DetailAccountViewController { override func numberOfSections(in tableView: UITableView) -> Int { + + guard let account = account else { return 0 } + if account == AccountManager.shared.defaultAccount { return 1 + } else if account.type == .onMyMac { + return 2 } else { return super.numberOfSections(in: tableView) } } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = super.tableView(tableView, cellForRowAt: indexPath) + + let cell: UITableViewCell + if indexPath.section == 1, let account = account, account.type == .onMyMac { + cell = super.tableView(tableView, cellForRowAt: IndexPath(row: 0, section: 2)) + } else { + cell = super.tableView(tableView, cellForRowAt: indexPath) + } let bgView = UIView() bgView.backgroundColor = AppAssets.selectionBackgroundColor @@ -54,7 +65,7 @@ extension DetailAccountViewController { } override func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool { - if indexPath.section == 1 { + if indexPath.section > 0 { return true } @@ -62,8 +73,19 @@ extension DetailAccountViewController { } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - if indexPath.section == 1 { - deleteAccount() + if let account = account, account.type == .onMyMac { + if indexPath.section == 1 { + deleteAccount() + } + } else { + switch indexPath.section { + case 1: + credentials() + case 2: + deleteAccount() + default: + break + } } tableView.selectRow(at: nil, animated: true, scrollPosition: .none) @@ -73,6 +95,19 @@ extension DetailAccountViewController { private extension DetailAccountViewController { + func credentials() { + guard let account = account else { return } + switch account.type { + case .feedbin: + let navController = UIStoryboard.settings.instantiateViewController(withIdentifier: "FeedbinAccountNavigationViewController") as! UINavigationController + let addViewController = navController.topViewController as! FeedbinAccountViewController + addViewController.account = account + present(navController, animated: true) + default: + break + } + } + func deleteAccount() { let title = NSLocalizedString("Delete Account", comment: "Delete Account") let message = NSLocalizedString("Are you sure you want to delete this account? This can not be undone.", comment: "Delete Account") diff --git a/iOS/Settings/FeedbinAccountViewController.swift b/iOS/Settings/FeedbinAccountViewController.swift index d826c5086..c12d3d941 100644 --- a/iOS/Settings/FeedbinAccountViewController.swift +++ b/iOS/Settings/FeedbinAccountViewController.swift @@ -16,7 +16,7 @@ class FeedbinAccountViewController: UIViewController { @IBOutlet weak var cancelBarButtonItem: UIBarButtonItem! @IBOutlet weak var emailTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! - @IBOutlet weak var addAccountButton: UIButton! + @IBOutlet weak var actionButton: UIButton! @IBOutlet weak var errorMessageLabel: UILabel! @@ -31,18 +31,22 @@ class FeedbinAccountViewController: UIViewController { passwordTextField.delegate = self if let account = account, let credentials = try? account.retrieveBasicCredentials() { + actionButton.setTitle(NSLocalizedString("Update Credentials", comment: "Update Credentials"), for: .normal) if case .basic(let username, let password) = credentials { emailTextField.text = username passwordTextField.text = password } + } else { + actionButton.setTitle(NSLocalizedString("Add Account", comment: "Update Credentials"), for: .normal) } } @IBAction func cancel(_ sender: Any) { - delegate?.dismiss(self) + dismiss(animated: true, completion: nil) + delegate?.dismiss() } - @IBAction func addAccountTapped(_ sender: Any) { + @IBAction func action(_ sender: Any) { self.errorMessageLabel.text = nil guard emailTextField.text != nil && passwordTextField.text != nil else { @@ -56,8 +60,7 @@ class FeedbinAccountViewController: UIViewController { // When you fill in the email address via auto-complete it adds extra whitespace let emailAddress = emailTextField.text?.trimmingCharacters(in: .whitespaces) let credentials = Credentials.basic(username: emailAddress ?? "", password: passwordTextField.text ?? "") - Account.validateCredentials(type: .feedbin, credentials: credentials) { [weak self] result in - guard let self = self else { return } + Account.validateCredentials(type: .feedbin, credentials: credentials) { result in self.stopAnimtatingActivityIndicator() self.enableNavigation() @@ -73,7 +76,9 @@ class FeedbinAccountViewController: UIViewController { do { - try self.account?.removeBasicCredentials() + do { + try self.account?.removeBasicCredentials() + } catch {} try self.account?.storeCredentials(credentials) if newAccount { @@ -87,7 +92,8 @@ class FeedbinAccountViewController: UIViewController { } } - self.delegate?.dismiss(self) + self.dismiss(animated: true, completion: nil) + self.delegate?.dismiss() } catch { self.errorMessageLabel.text = NSLocalizedString("Keychain error while storing credentials.", comment: "Credentials Error") } @@ -103,12 +109,12 @@ class FeedbinAccountViewController: UIViewController { private func enableNavigation() { self.cancelBarButtonItem.isEnabled = true - self.addAccountButton.isEnabled = true + self.actionButton.isEnabled = true } private func disableNavigation() { cancelBarButtonItem.isEnabled = false - addAccountButton.isEnabled = false + actionButton.isEnabled = false } private func startAnimatingActivityIndicator() { diff --git a/iOS/Settings/Settings.storyboard b/iOS/Settings/Settings.storyboard index 5afc57adf..60212b3b2 100644 --- a/iOS/Settings/Settings.storyboard +++ b/iOS/Settings/Settings.storyboard @@ -368,7 +368,31 @@ - + + + + + + + + + + + + + + + + + + - - + + @@ -420,7 +444,7 @@ - + @@ -537,7 +561,7 @@ - + @@ -658,10 +682,9 @@ - + - - +