diff --git a/iOS/Settings/AddAccountViewController.swift b/iOS/Settings/AddAccountViewController.swift index c4e7a6285..04e7eda5e 100644 --- a/iOS/Settings/AddAccountViewController.swift +++ b/iOS/Settings/AddAccountViewController.swift @@ -24,24 +24,23 @@ class AddAccountViewController: UITableViewController, AddAccountDismissDelegate } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let storyboard = UIStoryboard.settings switch indexPath.row { case 0: - let navController = UIStoryboard.settings.instantiateViewController(withIdentifier: "AddLocalAccountNavigationViewController") as! UINavigationController - let addViewController = navController.topViewController as! AddLocalAccountViewController + let addViewController = storyboard.instantiateViewController(withIdentifier: "AddLocalAccountViewController") as! AddLocalAccountViewController addViewController.delegate = self - present(navController, animated: true) + navigationController?.pushViewController(addViewController, animated: true) case 1: - let navController = UIStoryboard.settings.instantiateViewController(withIdentifier: "FeedbinAccountNavigationViewController") as! UINavigationController - let addViewController = navController.topViewController as! FeedbinAccountViewController + let addViewController = storyboard.instantiateViewController(withIdentifier: "FeedbinAccountViewController") as! FeedbinAccountViewController addViewController.delegate = self - present(navController, animated: true) + navigationController?.pushViewController(addViewController, animated: true) default: break } } func dismiss() { - navigationController?.popViewController(animated: false) + navigationController?.popToRootViewController(animated: true) } } diff --git a/iOS/Settings/AddLocalAccountViewController.swift b/iOS/Settings/AddLocalAccountViewController.swift index 6973a48d8..1ace24fb4 100644 --- a/iOS/Settings/AddLocalAccountViewController.swift +++ b/iOS/Settings/AddLocalAccountViewController.swift @@ -23,14 +23,9 @@ class AddLocalAccountViewController: UIViewController { nameTextField.delegate = self } - @IBAction func cancel(_ sender: Any) { - dismiss(animated: true) - } - - @IBAction func done(_ sender: Any) { + @IBAction func addAccountTapped(_ sender: Any) { let account = AccountManager.shared.createAccount(type: .onMyMac) account.name = nameTextField.text - dismiss(animated: true) delegate?.dismiss() } diff --git a/iOS/Settings/DetailAccountViewController.swift b/iOS/Settings/DetailAccountViewController.swift index 9ab945120..11deef01e 100644 --- a/iOS/Settings/DetailAccountViewController.swift +++ b/iOS/Settings/DetailAccountViewController.swift @@ -20,6 +20,8 @@ class DetailAccountViewController: UITableViewController { super.viewDidLoad() guard let account = account else { return } + + nameTextField.placeholder = account.defaultName nameTextField.text = account.name nameTextField.delegate = self activeSwitch.isOn = account.isActive diff --git a/iOS/Settings/FeedbinAccountViewController.swift b/iOS/Settings/FeedbinAccountViewController.swift index b88c5172a..cc5d2fdab 100644 --- a/iOS/Settings/FeedbinAccountViewController.swift +++ b/iOS/Settings/FeedbinAccountViewController.swift @@ -12,11 +12,12 @@ import RSWeb class FeedbinAccountViewController: UIViewController { - @IBOutlet weak var cancelBarButtonItem: UIBarButtonItem! @IBOutlet weak var activityIndicator: UIActivityIndicatorView! - @IBOutlet weak var doneBarButtonItem: UIBarButtonItem! + @IBOutlet weak var emailTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! + @IBOutlet weak var addAccountButton: UIButton! + @IBOutlet weak var errorMessageLabel: UILabel! weak var account: Account? @@ -26,6 +27,8 @@ class FeedbinAccountViewController: UIViewController { super.viewDidLoad() activityIndicator.isHidden = true + emailTextField.delegate = self + passwordTextField.delegate = self if let account = account, let credentials = try? account.retrieveBasicCredentials() { if case .basic(let username, let password) = credentials { @@ -35,39 +38,29 @@ class FeedbinAccountViewController: UIViewController { } } - @IBAction func cancel(_ sender: Any) { - dismiss(animated: true) - } - - @IBAction func done(_ sender: Any) { - + @IBAction func addAccountTapped(_ sender: Any) { self.errorMessageLabel.text = nil guard emailTextField.text != nil && passwordTextField.text != nil else { self.errorMessageLabel.text = NSLocalizedString("Username & password required.", comment: "Credentials Error") return } + + startAnimatingActivityIndicator() + disableNavigation() - cancelBarButtonItem.isEnabled = false - doneBarButtonItem.isEnabled = false - activityIndicator.isHidden = false - activityIndicator.startAnimating() - - let credentials = Credentials.basic(username: emailTextField.text ?? "", password: passwordTextField.text ?? "") + // 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 } - self.cancelBarButtonItem.isEnabled = true - self.doneBarButtonItem.isEnabled = true - self.activityIndicator.isHidden = true - self.activityIndicator.stopAnimating() + self.stopAnimtatingActivityIndicator() + self.enableNavigation() switch result { case .success(let authenticated): - if authenticated { - var newAccount = false if self.account == nil { self.account = AccountManager.shared.createAccount(type: .feedbin) @@ -80,24 +73,49 @@ class FeedbinAccountViewController: UIViewController { if newAccount { self.account?.refreshAll() } - self.dismiss(animated: true) + self.delegate?.dismiss() } catch { self.errorMessageLabel.text = NSLocalizedString("Keychain error while storing credentials.", comment: "Credentials Error") } - } else { self.errorMessageLabel.text = NSLocalizedString("Invalid email/password combination.", comment: "Credentials Error") } - case .failure: - - self.errorMessageLabel.text = NSLocalizedString("Network error. Try again later.", comment: "Credentials Error") - + self.errorMessageLabel.text = NSLocalizedString("Network error. Try again later.", comment: "Credentials Error") } } - } - + + private func enableNavigation() { + self.navigationItem.backBarButtonItem?.isEnabled = true + self.addAccountButton.isEnabled = true + self.activityIndicator.isHidden = true + } + + private func disableNavigation() { + navigationItem.backBarButtonItem?.isEnabled = false + addAccountButton.isEnabled = false + } + + private func startAnimatingActivityIndicator() { + activityIndicator.isHidden = false + activityIndicator.startAnimating() + } + + private func stopAnimtatingActivityIndicator() { + self.activityIndicator.isHidden = true + self.activityIndicator.stopAnimating() + } + +} + +extension FeedbinAccountViewController: UITextFieldDelegate { + + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + textField.resignFirstResponder() + return true + } + } diff --git a/iOS/Settings/Settings.storyboard b/iOS/Settings/Settings.storyboard index 7a67ec398..3a39daaac 100644 --- a/iOS/Settings/Settings.storyboard +++ b/iOS/Settings/Settings.storyboard @@ -337,7 +337,7 @@ - + @@ -347,9 +347,9 @@ - + - + @@ -360,9 +360,9 @@ - - + @@ -430,72 +430,64 @@ - + - + - - - - - - - - - - - - - - + + + + + + + + + - - - + + + + - + - + - - - - - - - - - - - - - - + + + + + + + + + - - - + + + + @@ -525,7 +517,7 @@ - + @@ -543,37 +535,44 @@ - - + + - + + - + - + + + + + + + - + - - - - - - - - - - - - + @@ -581,23 +580,7 @@ - - - - - - - - - - - - - - - - - + @@ -608,7 +591,7 @@ - + @@ -626,75 +609,82 @@ - - + + - + - - + + - + - - + - + + + + + + - + + + + - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - + @@ -702,23 +692,7 @@ - - - - - - - - - - - - - - - - - +