diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml index 7d55e7b724e..c8fd6cea8ff 100644 --- a/res/layout/wifi_dialog.xml +++ b/res/layout/wifi_dialog.xml @@ -368,14 +368,14 @@ android:layout_height="wrap_content" style="@style/wifi_item" android:paddingBottom="4dp" - android:importantForAccessibility="yes" - android:contentDescription="@string/wifi_advanced_toggle_description_collapsed" + android:importantForAccessibility="no" android:visibility="gone"> diff --git a/res/values/strings.xml b/res/values/strings.xml index 1f2add0f2d4..c1be3be31b9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1953,10 +1953,12 @@ Advanced options - - Drop down list Advanced Options. Double-tap to collapse. - - Drop down list Advanced Options. Double-tap to expand. + + Drop down list Advanced Options + + collapse + + expand Network name diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index c31b857106e..ef4e6affaa3 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -47,7 +47,10 @@ import android.text.TextWatcher; import android.util.Log; import android.view.KeyEvent; import android.view.View; +import android.view.View.AccessibilityDelegate; import android.view.ViewGroup; +import android.view.accessibility.AccessibilityNodeInfo; +import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; @@ -62,6 +65,8 @@ import android.widget.ScrollView; import android.widget.Spinner; import android.widget.TextView; +import androidx.annotation.VisibleForTesting; + import com.android.settings.ProxySelector; import com.android.settings.R; import com.android.settings.wifi.details.WifiPrivacyPreferenceController; @@ -76,8 +81,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; -import androidx.annotation.VisibleForTesting; - /** * The class for allowing UIs like {@link WifiDialog} and {@link WifiConfigUiBase} to * share the logic for controlling buttons, text fields, etc. @@ -338,6 +341,7 @@ public class WifiConfigController implements TextWatcher, mAccessPoint.isCarrierAp() ? View.GONE : View.VISIBLE); advancedTogglebox.setOnCheckedChangeListener(this); advancedTogglebox.setChecked(showAdvancedFields); + setAdvancedOptionAccessibilityString(showAdvancedFields); mView.findViewById(R.id.wifi_advanced_fields) .setVisibility(showAdvancedFields ? View.VISIBLE : View.GONE); if (mAccessPoint.isCarrierAp()) { @@ -1554,21 +1558,17 @@ public class WifiConfigController implements TextWatcher, ((EditText) mPasswordView).setSelection(pos); } } else if (view.getId() == R.id.wifi_advanced_togglebox) { - final View advancedToggle = mView.findViewById(R.id.wifi_advanced_toggle); final int toggleVisibility; final int stringID; if (isChecked) { toggleVisibility = View.VISIBLE; - stringID = R.string.wifi_advanced_toggle_description_expanded; - // Hide the SoftKeyboard temporary to let user can see most of the expanded items. hideSoftKeyboard(mView.getWindowToken()); } else { toggleVisibility = View.GONE; - stringID = R.string.wifi_advanced_toggle_description_collapsed; } mView.findViewById(R.id.wifi_advanced_fields).setVisibility(toggleVisibility); - advancedToggle.setContentDescription(mContext.getString(stringID)); + setAdvancedOptionAccessibilityString(isChecked); } } @@ -1677,6 +1677,8 @@ public class WifiConfigController implements TextWatcher, mView.findViewById(R.id.hidden_settings_field).setVisibility(View.VISIBLE); ((CheckBox) mView.findViewById(R.id.wifi_advanced_togglebox)) .setOnCheckedChangeListener(this); + // Set correct accessibility strings. + setAdvancedOptionAccessibilityString(false /* showAdvancedFields */); } /** @@ -1767,4 +1769,26 @@ public class WifiConfigController implements TextWatcher, InputMethodManager.class); inputMethodManager.hideSoftInputFromWindow(windowToken, 0 /* flags */); } + + private void setAdvancedOptionAccessibilityString(boolean showAdvancedFields) { + final CheckBox advancedToggleBox = mView.findViewById(R.id.wifi_advanced_togglebox); + advancedToggleBox.setAccessibilityDelegate(new AccessibilityDelegate() { + @Override + public void onInitializeAccessibilityNodeInfo( + View v, AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(v, info); + // To let TalkBack don't pronounce checked/unchecked. + info.setCheckable(false /* checkable */); + // To let TalkBack don't pronounce CheckBox. + info.setClassName(null /* className */); + final CharSequence accessibilityDoubleTapExtend = mContext.getString( + showAdvancedFields ? R.string.wifi_advanced_toggle_description_expanded + : R.string.wifi_advanced_toggle_description_collapsed); + // Customize TalkBack's pronunciation which been appended to "Double-tap to". + final AccessibilityAction customClick = new AccessibilityAction( + AccessibilityNodeInfo.ACTION_CLICK, accessibilityDoubleTapExtend); + info.addAction(customClick); + } + }); + } } diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java index 226dfdb383f..ab4bea831f4 100644 --- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java @@ -557,4 +557,12 @@ public class WifiConfigControllerTest { assertThat(firstChild).isEqualTo(hiddenSettingLayout); } + + @Test + public void getAdvancedOptionContentDescription_whenViewInitialed_shouldBeCorrect() { + final CheckBox advButton = mView.findViewById(R.id.wifi_advanced_togglebox); + + assertThat(advButton.getContentDescription()).isEqualTo( + mContext.getString(R.string.wifi_advanced_toggle_description)); + } }