[Wi-Fi] [a11y] The "Advanced options" should be accessible by Voice Access and pronounced by talkback correctly.
The checkbox is unclickable via Accessibility. Solution: Refine the solution of b/30079196 to let checkbox be focusable and clickable by Accessibility, and remove unnecessary Accessibility pronunciation strings. Bug: 141588638 Bug: 141588161 Test: Add unit test to check the content description of the checkbox. Change-Id: I2e7932f64ae29a13b793276eab6705009af20104
This commit is contained in:
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user