diff --git a/iOS/Settings/AddAccountViewController.swift b/iOS/Settings/AddAccountViewController.swift index e3bdf31b3..04e7eda5e 100644 --- a/iOS/Settings/AddAccountViewController.swift +++ b/iOS/Settings/AddAccountViewController.swift @@ -24,14 +24,14 @@ class AddAccountViewController: UITableViewController, AddAccountDismissDelegate } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let storyboard = UIStoryboard.settings switch indexPath.row { case 0: - let addViewController = UIStoryboard.settings.instantiateViewController(withIdentifier: "AddLocalAccountViewController") as! AddLocalAccountViewController + let addViewController = storyboard.instantiateViewController(withIdentifier: "AddLocalAccountViewController") as! AddLocalAccountViewController addViewController.delegate = self 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 navigationController?.pushViewController(addViewController, animated: true) default: 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 011da8f45..63ee963f4 100644 --- a/iOS/Settings/Settings.storyboard +++ b/iOS/Settings/Settings.storyboard @@ -438,7 +438,7 @@ - + @@ -520,7 +520,7 @@ - + @@ -580,23 +580,7 @@ - - - - - - - - - - - - - - - - - + @@ -607,7 +591,7 @@ - + @@ -626,55 +610,65 @@ - + - + - + - + - - + - + + + + + + - + + + + - - - - - - - - - - - @@ -692,8 +686,7 @@ - - + @@ -701,7 +694,7 @@ - +