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));
+ }
}