Only request focus if change was self-triggered
For a11y we want to accomplish two things: 1. Keep focus on the button if the button was just pressed. This requires buttons in settings to be focusableInTouchMode and then request focus when the buttons are updated. 2. When the setting is changed outside of the settings page (ie: from Quick Settings), we don't want to re-announce on talkback the button that is updated on the Settings page. Therefore, to maintain #1, we add a boolean to check whether or not the updateButton change was triggered by a click to the button preference or not. Only request focus if the button was triggered by the settings button (and not when triggered by other things like QS). Test: manual Fixes: 147992252 Change-Id: I505de0585bac38a2f59062743d9d6b75861c3d32
This commit is contained in:
@@ -39,12 +39,17 @@ public class NightDisplayActivationPreferenceController extends TogglePreference
|
||||
private ColorDisplayManager mColorDisplayManager;
|
||||
private NightDisplayTimeFormatter mTimeFormatter;
|
||||
private LayoutPreference mPreference;
|
||||
|
||||
// Night light can also be toggled from QS. If night light wasn't toggled by this preference,
|
||||
// don't requestFocus
|
||||
private boolean mButtonTriggered = false;
|
||||
private Button mTurnOffButton;
|
||||
private Button mTurnOnButton;
|
||||
|
||||
private final OnClickListener mListener = new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mButtonTriggered = true;
|
||||
mMetricsFeatureProvider.logClickedPreference(mPreference,
|
||||
SettingsEnums.NIGHT_DISPLAY_SETTINGS);
|
||||
mColorDisplayManager.setNightDisplayActivated(
|
||||
@@ -140,12 +145,18 @@ public class NightDisplayActivationPreferenceController extends TogglePreference
|
||||
mTurnOnButton.setVisibility(View.GONE);
|
||||
mTurnOffButton.setVisibility(View.VISIBLE);
|
||||
mTurnOffButton.setText(buttonText);
|
||||
mTurnOffButton.requestFocus();
|
||||
if (mButtonTriggered) {
|
||||
mButtonTriggered = false;
|
||||
mTurnOffButton.requestFocus();
|
||||
}
|
||||
} else {
|
||||
mTurnOnButton.setVisibility(View.VISIBLE);
|
||||
mTurnOffButton.setVisibility(View.GONE);
|
||||
mTurnOnButton.setText(buttonText);
|
||||
mTurnOnButton.requestFocus();
|
||||
if (mButtonTriggered) {
|
||||
mButtonTriggered = false;
|
||||
mTurnOnButton.requestFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -39,6 +39,9 @@ public class ZenModeButtonPreferenceController extends AbstractZenModePreference
|
||||
|
||||
private static final String TAG = "EnableZenModeButton";
|
||||
private final FragmentManager mFragment;
|
||||
|
||||
// DND can also be toggled from QS. If DND wasn't toggled by this preference, don't requestFocus
|
||||
private boolean mButtonTriggered = false;
|
||||
private Button mZenButtonOn;
|
||||
private Button mZenButtonOff;
|
||||
|
||||
@@ -65,7 +68,6 @@ public class ZenModeButtonPreferenceController extends AbstractZenModePreference
|
||||
if (null == mZenButtonOn) {
|
||||
mZenButtonOn = ((LayoutPreference) preference)
|
||||
.findViewById(R.id.zen_mode_settings_turn_on_button);
|
||||
mZenButtonOn.setFocusableInTouchMode(true);
|
||||
updateZenButtonOnClickListener(preference);
|
||||
}
|
||||
|
||||
@@ -73,6 +75,7 @@ public class ZenModeButtonPreferenceController extends AbstractZenModePreference
|
||||
mZenButtonOff = ((LayoutPreference) preference)
|
||||
.findViewById(R.id.zen_mode_settings_turn_off_button);
|
||||
mZenButtonOff.setOnClickListener(v -> {
|
||||
mButtonTriggered = true;
|
||||
writeMetrics(preference, false);
|
||||
mBackend.setZenMode(Settings.Global.ZEN_MODE_OFF);
|
||||
});
|
||||
@@ -88,38 +91,39 @@ public class ZenModeButtonPreferenceController extends AbstractZenModePreference
|
||||
case Settings.Global.ZEN_MODE_NO_INTERRUPTIONS:
|
||||
mZenButtonOff.setVisibility(View.VISIBLE);
|
||||
mZenButtonOn.setVisibility(View.GONE);
|
||||
mZenButtonOff.requestFocus();
|
||||
if (mButtonTriggered) {
|
||||
mButtonTriggered = false;
|
||||
mZenButtonOff.requestFocus();
|
||||
}
|
||||
break;
|
||||
case Settings.Global.ZEN_MODE_OFF:
|
||||
default:
|
||||
mZenButtonOff.setVisibility(View.GONE);
|
||||
updateZenButtonOnClickListener(preference);
|
||||
mZenButtonOn.setVisibility(View.VISIBLE);
|
||||
mZenButtonOn.requestFocus();
|
||||
if (mButtonTriggered) {
|
||||
mButtonTriggered = false;
|
||||
mZenButtonOn.requestFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateZenButtonOnClickListener(Preference preference) {
|
||||
int zenDuration = getZenDuration();
|
||||
switch (zenDuration) {
|
||||
case Settings.Secure.ZEN_DURATION_PROMPT:
|
||||
mZenButtonOn.setOnClickListener(v -> {
|
||||
writeMetrics(preference, true);
|
||||
mZenButtonOn.setOnClickListener(v -> {
|
||||
mButtonTriggered = true;
|
||||
writeMetrics(preference, true);
|
||||
int zenDuration = getZenDuration();
|
||||
switch (zenDuration) {
|
||||
case Settings.Secure.ZEN_DURATION_PROMPT:
|
||||
new SettingsEnableZenModeDialog().show(mFragment, TAG);
|
||||
});
|
||||
break;
|
||||
case Settings.Secure.ZEN_DURATION_FOREVER:
|
||||
mZenButtonOn.setOnClickListener(v -> {
|
||||
writeMetrics(preference, true);
|
||||
break;
|
||||
case Settings.Secure.ZEN_DURATION_FOREVER:
|
||||
mBackend.setZenMode(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
|
||||
});
|
||||
break;
|
||||
default:
|
||||
mZenButtonOn.setOnClickListener(v -> {
|
||||
writeMetrics(preference, true);
|
||||
break;
|
||||
default:
|
||||
mBackend.setZenModeForDuration(zenDuration);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void writeMetrics(Preference preference, boolean buttonOn) {
|
||||
|
Reference in New Issue
Block a user