diff --git a/WordPressAuthenticator.podspec b/WordPressAuthenticator.podspec index 661e2650c..cd5adddaf 100644 --- a/WordPressAuthenticator.podspec +++ b/WordPressAuthenticator.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "WordPressAuthenticator" - s.version = "1.10.5-beta.2" + s.version = "1.10.5-beta.3" s.summary = "WordPressAuthenticator implements an easy and elegant way to authenticate your WordPress Apps." s.description = <<-DESC diff --git a/WordPressAuthenticator/Signin/Login.storyboard b/WordPressAuthenticator/Signin/Login.storyboard index 036146211..77ca59996 100644 --- a/WordPressAuthenticator/Signin/Login.storyboard +++ b/WordPressAuthenticator/Signin/Login.storyboard @@ -66,6 +66,7 @@ + @@ -1450,6 +1451,9 @@ + + + diff --git a/WordPressAuthenticator/Signin/LoginPrologueLoginMethodViewController.swift b/WordPressAuthenticator/Signin/LoginPrologueLoginMethodViewController.swift index cd9410360..acadc0df4 100644 --- a/WordPressAuthenticator/Signin/LoginPrologueLoginMethodViewController.swift +++ b/WordPressAuthenticator/Signin/LoginPrologueLoginMethodViewController.swift @@ -13,6 +13,9 @@ class LoginPrologueLoginMethodViewController: NUXViewController { open var selfHostedTapped: (() -> Void)? open var appleTapped: (() -> Void)? + /// The big transparent (dismiss) button behind the buttons + @IBOutlet private weak var dismissButton: UIButton! + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { super.prepare(for: segue, sender: sender) @@ -24,6 +27,7 @@ class LoginPrologueLoginMethodViewController: NUXViewController { override func viewDidLoad() { super.viewDidLoad() configureButtonVC() + configureForAccessibility() } override func viewWillAppear(_ animated: Bool) { @@ -85,4 +89,23 @@ class LoginPrologueLoginMethodViewController: NUXViewController { appleTapped?() } + // MARK: - Accessibility + + private func configureForAccessibility() { + dismissButton.accessibilityLabel = NSLocalizedString("Dismiss", comment: "Accessibility label for the transparent space above the login dialog which acts as a button to dismiss the dialog.") + + // Ensure that the first button (in buttonViewController) is automatically selected by + // VoiceOver instead of the dismiss button. + if buttonViewController?.isViewLoaded == true, let buttonsView = buttonViewController?.view { + view.accessibilityElements = [ + buttonsView, + dismissButton + ] + } + } + + override func accessibilityPerformEscape() -> Bool { + dismiss(animated: true) + return true + } } diff --git a/WordPressAuthenticator/Signin/LoginPrologueSignupMethodViewController.swift b/WordPressAuthenticator/Signin/LoginPrologueSignupMethodViewController.swift index 9df8f60e6..beac431ba 100644 --- a/WordPressAuthenticator/Signin/LoginPrologueSignupMethodViewController.swift +++ b/WordPressAuthenticator/Signin/LoginPrologueSignupMethodViewController.swift @@ -14,6 +14,9 @@ class LoginPrologueSignupMethodViewController: NUXViewController { open var googleTapped: (() -> Void)? open var appleTapped: (() -> Void)? + /// The big transparent (dismiss) button behind the buttons + @IBOutlet private weak var dismissButton: UIButton! + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { super.prepare(for: segue, sender: sender) @@ -25,6 +28,7 @@ class LoginPrologueSignupMethodViewController: NUXViewController { override func viewDidLoad() { super.viewDidLoad() configureButtonVC() + configureForAccessibility() } override func viewWillAppear(_ animated: Bool) { @@ -82,8 +86,7 @@ class LoginPrologueSignupMethodViewController: NUXViewController { } @IBAction func dismissTapped() { - WordPressAuthenticator.track(.signupCancelled) - dismiss(animated: true) + trackCancellationAndThenDismiss() } @objc func handleAppleButtonTapped() { @@ -92,4 +95,29 @@ class LoginPrologueSignupMethodViewController: NUXViewController { dismiss(animated: true) appleTapped?() } + + private func trackCancellationAndThenDismiss() { + WordPressAuthenticator.track(.signupCancelled) + dismiss(animated: true) + } + + // MARK: - Accessibility + + private func configureForAccessibility() { + dismissButton.accessibilityLabel = NSLocalizedString("Dismiss", comment: "Accessibility label for the transparent space above the signup dialog which acts as a button to dismiss the dialog.") + + // Ensure that the first button (in buttonViewController) is automatically selected by + // VoiceOver instead of the dismiss button. + if buttonViewController?.isViewLoaded == true, let buttonsView = buttonViewController?.view { + view.accessibilityElements = [ + buttonsView, + dismissButton + ] + } + } + + override func accessibilityPerformEscape() -> Bool { + trackCancellationAndThenDismiss() + return true + } }