Support accessibility shortcut secondary action (8/n)

Integrate with the multiple shortcut selections and change the behavior as below:
- Get the shortcut type from system provider or shared_prefs if this is first time to use.
- Update the shared_prefs for what user seen.

Bug: 142530063
Bug: 142531156
Test: make RunSettingsRoboTests2
Test: make RunSettingsRoboTests ROBOTEST_FILTER=AccessibilityUtilTest
Change-Id: I58aeb960e2c4aa0bc2432be34c1372c0de89117a
This commit is contained in:
menghanli
2020-01-15 10:41:51 +08:00
parent 5f4fadb949
commit 5d0f336fec
6 changed files with 181 additions and 83 deletions

View File

@@ -70,6 +70,8 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
private ShortcutPreference mShortcutPreference;
private SettingsContentObserver mSettingsContentObserver;
private int mUserShortcutType = UserShortcutType.DEFAULT;
// Used to restore the edit dialog status.
private int mUserShortcutTypeCache = UserShortcutType.DEFAULT;
private CheckBox mSoftwareTypeCheckBox;
private CheckBox mHardwareTypeCheckBox;
@@ -98,7 +100,13 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
initShortcutPreference(savedInstanceState);
// Restore the user shortcut type.
if (savedInstanceState != null && savedInstanceState.containsKey(EXTRA_SHORTCUT_TYPE)) {
mUserShortcutTypeCache = savedInstanceState.getInt(EXTRA_SHORTCUT_TYPE,
UserShortcutType.DEFAULT);
}
initShortcutPreference();
final List<String> enableServiceFeatureKeys = new ArrayList<>(/* initialCapacity= */ 1);
enableServiceFeatureKeys.add(ENABLED);
mSettingsContentObserver = new SettingsContentObserver(mHandler, enableServiceFeatureKeys) {
@@ -114,7 +122,7 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutType);
outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutTypeCache);
super.onSaveInstanceState(outState);
}
@@ -127,6 +135,7 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
((DaltonizerRadioButtonPreferenceController) controller).displayPreference(
getPreferenceScreen());
}
updateShortcutPreferenceData();
updateShortcutPreference();
}
@@ -179,7 +188,7 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
}
private void updateCheckStatus(CheckBox checkBox, @UserShortcutType int type) {
checkBox.setChecked((mUserShortcutType & type) == type);
checkBox.setChecked((mUserShortcutTypeCache & type) == type);
checkBox.setOnClickListener(v -> {
updateUserShortcutType(/* saveChanges= */ false);
updateAlertDialogEnableState();
@@ -187,14 +196,15 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
}
private void updateUserShortcutType(boolean saveChanges) {
mUserShortcutType = UserShortcutType.DEFAULT;
mUserShortcutTypeCache = UserShortcutType.DEFAULT;
if (mSoftwareTypeCheckBox.isChecked()) {
mUserShortcutType |= UserShortcutType.SOFTWARE;
mUserShortcutTypeCache |= UserShortcutType.SOFTWARE;
}
if (mHardwareTypeCheckBox.isChecked()) {
mUserShortcutType |= UserShortcutType.HARDWARE;
mUserShortcutTypeCache |= UserShortcutType.HARDWARE;
}
if (saveChanges) {
mUserShortcutType = mUserShortcutTypeCache;
setUserShortcutType(getPrefContext(), mUserShortcutType);
}
}
@@ -257,14 +267,14 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
private void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) {
updateUserShortcutType(/* saveChanges= */ true);
mShortcutPreference.setSummary(
getShortcutTypeSummary(getPrefContext()));
if (mShortcutPreference.getChecked()) {
AccessibilityUtil.optInAllValuesToSettings(getContext(), mUserShortcutType,
getComponentName());
AccessibilityUtil.optOutAllValuesFromSettings(getContext(), ~mUserShortcutType,
getComponentName());
}
mShortcutPreference.setSummary(
getShortcutTypeSummary(getPrefContext()));
}
@Override
@@ -347,22 +357,11 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
@Override
public void onSettingsClicked(ShortcutPreference preference) {
mUserShortcutType = getUserShortcutType(getPrefContext(),
UserShortcutType.SOFTWARE);
mUserShortcutTypeCache = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE);
showDialog(DIALOG_ID_EDIT_SHORTCUT);
}
private void initShortcutPreference(Bundle savedInstanceState) {
mUserShortcutType = getUserShortcutType(getPrefContext(),
UserShortcutType.SOFTWARE);
// Restore the user shortcut type
if (savedInstanceState != null && savedInstanceState.containsKey(EXTRA_SHORTCUT_TYPE)) {
mUserShortcutType = savedInstanceState.getInt(EXTRA_SHORTCUT_TYPE,
UserShortcutType.SOFTWARE);
}
// Initial ShortcutPreference widget
private void initShortcutPreference() {
final PreferenceScreen preferenceScreen = getPreferenceScreen();
mShortcutPreference = new ShortcutPreference(
preferenceScreen.getContext(), null);
@@ -374,10 +373,21 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
final RadioButtonPreference radioButtonPreference = findPreference(PREFERENCE_KEY);
// Put the shortcutPreference before radioButtonPreference.
mShortcutPreference.setOrder(radioButtonPreference.getOrder() - 1);
// TODO(b/142530063): Check the new key to decide whether checkbox should be checked.
preferenceScreen.addPreference(mShortcutPreference);
}
private void updateShortcutPreferenceData() {
// Get the user shortcut type from settings provider.
mUserShortcutType = AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(),
getComponentName());
if (mUserShortcutType != UserShortcutType.DEFAULT) {
setUserShortcutType(getPrefContext(), mUserShortcutType);
} else {
// Get the user shortcut type from shared_prefs if cannot get from settings provider.
mUserShortcutType = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE);
}
}
private void updateShortcutPreference() {
final PreferenceScreen preferenceScreen = getPreferenceScreen();
final ShortcutPreference shortcutPreference = preferenceScreen.findPreference(
@@ -388,6 +398,7 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
shortcutPreference.setChecked(
AccessibilityUtil.hasValuesInSettings(getContext(), shortcutTypes,
getComponentName()));
shortcutPreference.setSummary(getShortcutTypeSummary(getContext()));
}
}