From 98c17ee49ffe9a8941075eb52f4ca09e7147e322 Mon Sep 17 00:00:00 2001 From: Arc Wang Date: Thu, 9 Apr 2020 15:22:26 +0800 Subject: [PATCH] [A11Y][Wi-Fi] Fix multiple Spinner selected speak out at once. When users select edit a Wi-Fi and select enterprise security, there are multiple spinner shows with a default value. This change does not allow TalkBack to speak out for multiple Spinner text at one user selection. Bug: 153272108 Test: manual Wi-Fi Settings -> Add network -> Security spinner -> WPA/WPA2/WPA3-Enterprise TalkBack should only speak out for the Security spinner. Change-Id: Id9ab44e4da6d7abb5168e0ab7441ee1e226f5f68 --- .../settings/wifi/WifiConfigController.java | 23 +++++++++++++++++++ .../settings/wifi/WifiConfigController2.java | 23 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index 54026a5671c..66b9a230ba2 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -48,6 +48,7 @@ import android.view.KeyEvent; import android.view.View; import android.view.View.AccessibilityDelegate; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import android.view.inputmethod.EditorInfo; @@ -1020,6 +1021,8 @@ public class WifiConfigController implements TextWatcher, mEapUserCertSpinner.setOnItemSelectedListener(this); mEapIdentityView = (TextView) mView.findViewById(R.id.identity); mEapAnonymousView = (TextView) mView.findViewById(R.id.anonymous); + + setAccessibilityDelegateForSecuritySpinners(); } if (refreshEapMethods) { @@ -1148,6 +1151,26 @@ public class WifiConfigController implements TextWatcher, } } + private void setAccessibilityDelegateForSecuritySpinners() { + final AccessibilityDelegate selectedEventBlocker = new AccessibilityDelegate() { + @Override + public void sendAccessibilityEvent(View host, int eventType) { + if (eventType == AccessibilityEvent.TYPE_VIEW_SELECTED) { + // Ignore TYPE_VIEW_SELECTED or there will be multiple Spinner selected + // information for WifiController#showSecurityFields. + return; + } + super.sendAccessibilityEvent(host, eventType); + } + }; + + mEapMethodSpinner.setAccessibilityDelegate(selectedEventBlocker); + mPhase2Spinner.setAccessibilityDelegate(selectedEventBlocker); + mEapCaCertSpinner.setAccessibilityDelegate(selectedEventBlocker); + mEapOcspSpinner.setAccessibilityDelegate(selectedEventBlocker); + mEapUserCertSpinner.setAccessibilityDelegate(selectedEventBlocker); + } + /** * EAP-PWD valid fields include * identity diff --git a/src/com/android/settings/wifi/WifiConfigController2.java b/src/com/android/settings/wifi/WifiConfigController2.java index 4df0dfdc84e..ce0516d6f4d 100644 --- a/src/com/android/settings/wifi/WifiConfigController2.java +++ b/src/com/android/settings/wifi/WifiConfigController2.java @@ -46,6 +46,7 @@ import android.view.KeyEvent; import android.view.View; import android.view.View.AccessibilityDelegate; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import android.view.inputmethod.EditorInfo; @@ -1014,6 +1015,8 @@ public class WifiConfigController2 implements TextWatcher, mEapUserCertSpinner.setOnItemSelectedListener(this); mEapIdentityView = (TextView) mView.findViewById(R.id.identity); mEapAnonymousView = (TextView) mView.findViewById(R.id.anonymous); + + setAccessibilityDelegateForSecuritySpinners(); } if (refreshEapMethods) { @@ -1144,6 +1147,26 @@ public class WifiConfigController2 implements TextWatcher, } } + private void setAccessibilityDelegateForSecuritySpinners() { + final AccessibilityDelegate selectedEventBlocker = new AccessibilityDelegate() { + @Override + public void sendAccessibilityEvent(View host, int eventType) { + if (eventType == AccessibilityEvent.TYPE_VIEW_SELECTED) { + // Ignore TYPE_VIEW_SELECTED or there will be multiple Spinner selected + // information for WifiController2#showSecurityFields. + return; + } + super.sendAccessibilityEvent(host, eventType); + } + }; + + mEapMethodSpinner.setAccessibilityDelegate(selectedEventBlocker); + mPhase2Spinner.setAccessibilityDelegate(selectedEventBlocker); + mEapCaCertSpinner.setAccessibilityDelegate(selectedEventBlocker); + mEapOcspSpinner.setAccessibilityDelegate(selectedEventBlocker); + mEapUserCertSpinner.setAccessibilityDelegate(selectedEventBlocker); + } + /** * EAP-PWD valid fields include * identity