Loading src/com/android/settings/accessibility/AccessibilityUtil.java +20 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,26 @@ final class AccessibilityUtil { return false; } /** * Gets the corresponding user shortcut type of a given accessibility service. * * @param context The current context. * @param componentName The component name that need to be checked existed in Settings. * @return The user shortcut type if component name existed in {@code UserShortcutType} string * Settings. */ static int getUserShortcutTypesFromSettings(Context context, @NonNull ComponentName componentName) { int shortcutTypes = UserShortcutType.DEFAULT; if (hasValuesInSettings(context, UserShortcutType.SOFTWARE, componentName)) { shortcutTypes |= UserShortcutType.SOFTWARE; } if (hasValuesInSettings(context, UserShortcutType.HARDWARE, componentName)) { shortcutTypes |= UserShortcutType.HARDWARE; } return shortcutTypes; } /** * Converts {@link UserShortcutType} to key in Settings. * Loading src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +30 −19 Original line number Diff line number Diff line Loading @@ -68,6 +68,8 @@ public class ToggleAccessibilityServicePreferenceFragment extends private static final String EXTRA_SHORTCUT_TYPE = "shortcut_type"; private ShortcutPreference mShortcutPreference; private int mUserShortcutType = UserShortcutType.DEFAULT; // Used to restore the edit dialog status. private int mUserShortcutTypeCache = UserShortcutType.DEFAULT; private CheckBox mSoftwareTypeCheckBox; private CheckBox mHardwareTypeCheckBox; Loading Loading @@ -115,12 +117,17 @@ public class ToggleAccessibilityServicePreferenceFragment extends @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, 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(); } @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutType); outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutTypeCache); super.onSaveInstanceState(outState); } Loading @@ -129,6 +136,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends super.onResume(); mSettingsContentObserver.register(getContentResolver()); updateSwitchBarToggleSwitch(); updateShortcutPreferenceData(); updateShortcutPreference(); } Loading Loading @@ -237,7 +245,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends } 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(); Loading @@ -245,14 +253,15 @@ public class ToggleAccessibilityServicePreferenceFragment extends } 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); } } Loading Loading @@ -315,14 +324,14 @@ public class ToggleAccessibilityServicePreferenceFragment extends private void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) { updateUserShortcutType(/* saveChanges= */ true); mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); if (mShortcutPreference.getChecked()) { AccessibilityUtil.optInAllValuesToSettings(getContext(), mUserShortcutType, mComponentName); AccessibilityUtil.optOutAllValuesFromSettings(getContext(), ~mUserShortcutType, mComponentName); } mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); } @Override Loading Loading @@ -351,23 +360,25 @@ public class ToggleAccessibilityServicePreferenceFragment extends switchBar.setSwitchBarText(switchBarText, switchBarText); } private void initShortcutPreference(Bundle savedInstanceState) { 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); // 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); mShortcutPreference.setPersistent(false); mShortcutPreference.setKey(getShortcutPreferenceKey()); mShortcutPreference.setTitle(R.string.accessibility_shortcut_title); mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); mShortcutPreference.setOnClickListener(this); // Put the shortcutPreference before settingsPreference. mShortcutPreference.setOrder(-1); Loading @@ -384,6 +395,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends shortcutPreference.setChecked( AccessibilityUtil.hasValuesInSettings(getContext(), shortcutTypes, mComponentName)); shortcutPreference.setSummary(getShortcutTypeSummary(getContext())); } } Loading Loading @@ -492,8 +504,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends @Override public void onSettingsClicked(ShortcutPreference preference) { mUserShortcutType = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); mUserShortcutTypeCache = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); showPopupDialog(DialogType.EDIT_SHORTCUT); } Loading src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java +31 −21 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere 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; Loading Loading @@ -125,7 +127,13 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @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) { Loading @@ -141,13 +149,14 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutType); outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutTypeCache); super.onSaveInstanceState(outState); } @Override public void onResume() { super.onResume(); updateShortcutPreferenceData(); updateShortcutPreference(); } Loading Loading @@ -191,7 +200,7 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere } 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(); Loading @@ -199,14 +208,15 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere } 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); } } Loading Loading @@ -269,14 +279,14 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere 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 Loading @@ -287,17 +297,19 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere return 0; } 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); 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); } } // Initial ShortcutPreference widget private void initShortcutPreference() { final PreferenceScreen preferenceScreen = getPreferenceScreen(); mShortcutPreference = new ShortcutPreference( preferenceScreen.getContext(), null); Loading @@ -305,11 +317,9 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere mShortcutPreference.setPersistent(false); mShortcutPreference.setKey(getShortcutPreferenceKey()); mShortcutPreference.setTitle(R.string.accessibility_shortcut_title); mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); mShortcutPreference.setOnClickListener(this); // Put the shortcutPreference before previewPreference. mShortcutPreference.setOrder(previewPreference.getOrder() - 1); // TODO(b/142530063): Check the new key to decide whether checkbox should be checked. preferenceScreen.addPreference(mShortcutPreference); } Loading @@ -323,6 +333,7 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere shortcutPreference.setChecked( AccessibilityUtil.hasValuesInSettings(getContext(), shortcutTypes, getComponentName())); shortcutPreference.setSummary(getShortcutTypeSummary(getContext())); } } Loading @@ -348,8 +359,7 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @Override public void onSettingsClicked(ShortcutPreference preference) { mUserShortcutType = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); mUserShortcutTypeCache = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); showDialog(DIALOG_ID_EDIT_SHORTCUT); } Loading src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java +33 −22 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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); } Loading @@ -127,6 +135,7 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe ((DaltonizerRadioButtonPreferenceController) controller).displayPreference( getPreferenceScreen()); } updateShortcutPreferenceData(); updateShortcutPreference(); } Loading Loading @@ -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(); Loading @@ -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); } } Loading Loading @@ -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 Loading Loading @@ -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); Loading @@ -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( Loading @@ -388,6 +398,7 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe shortcutPreference.setChecked( AccessibilityUtil.hasValuesInSettings(getContext(), shortcutTypes, getComponentName())); shortcutPreference.setSummary(getShortcutTypeSummary(getContext())); } } Loading src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +44 −21 Original line number Diff line number Diff line Loading @@ -69,6 +69,8 @@ public class ToggleScreenMagnificationPreferenceFragment extends private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference"; private ShortcutPreference mShortcutPreference; private int mUserShortcutType = UserShortcutType.DEFAULT; // Used to restore the edit dialog status. private int mUserShortcutTypeCache = UserShortcutType.DEFAULT; private CheckBox mSoftwareTypeCheckBox; private CheckBox mHardwareTypeCheckBox; private CheckBox mTripleTapTypeCheckBox; Loading Loading @@ -176,7 +178,12 @@ public class ToggleScreenMagnificationPreferenceFragment extends final PreferenceCategory optionCategory = new PreferenceCategory(getPrefContext()); optionCategory.setTitle(R.string.accessibility_screen_option); 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 Preference settingsPreference = new Preference(getPrefContext()); settingsPreference.setTitle(R.string.accessibility_magnification_service_settings_title); Loading Loading @@ -210,7 +217,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutType); outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutTypeCache); super.onSaveInstanceState(outState); } Loading @@ -224,6 +231,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends } updateConfigurationWarningIfNeeded(); updateShortcutPreferenceData(); updateShortcutPreference(); } Loading Loading @@ -292,7 +300,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends } 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(); Loading @@ -300,17 +308,18 @@ public class ToggleScreenMagnificationPreferenceFragment extends } 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 (mTripleTapTypeCheckBox.isChecked()) { mUserShortcutType |= UserShortcutType.TRIPLETAP; mUserShortcutTypeCache |= UserShortcutType.TRIPLETAP; } if (saveChanges) { mUserShortcutType = mUserShortcutTypeCache; setUserShortcutType(getPrefContext(), mUserShortcutType); } } Loading Loading @@ -378,12 +387,12 @@ public class ToggleScreenMagnificationPreferenceFragment extends private void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) { updateUserShortcutType(/* saveChanges= */ true); mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); if (mShortcutPreference.getChecked()) { optInAllMagnificationValuesToSettings(getContext(), mUserShortcutType); optOutAllMagnificationValuesFromSettings(getContext(), ~mUserShortcutType); } mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); } private String getComponentName() { Loading Loading @@ -457,22 +466,22 @@ public class ToggleScreenMagnificationPreferenceFragment extends @Override public void onSettingsClicked(ShortcutPreference preference) { mUserShortcutType = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); mUserShortcutTypeCache = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); showDialog(DialogType.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); private void updateShortcutPreferenceData() { // Get the user shortcut type from settings provider. mUserShortcutType = getUserShortcutTypeFromSettings(getPrefContext()); 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); } } // Initial ShortcutPreference widget private void initShortcutPreference() { final PreferenceScreen preferenceScreen = getPreferenceScreen(); mShortcutPreference = new ShortcutPreference( preferenceScreen.getContext(), null); Loading @@ -481,7 +490,6 @@ public class ToggleScreenMagnificationPreferenceFragment extends mShortcutPreference.setTitle(R.string.accessibility_magnification_shortcut_title); mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); mShortcutPreference.setOnClickListener(this); // TODO(b/142530063): Check the new setting key to decide which summary should be shown. } private void updateShortcutPreference() { Loading @@ -493,6 +501,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); shortcutPreference.setChecked( hasMagnificationValuesInSettings(getContext(), shortcutTypes)); shortcutPreference.setSummary(getShortcutTypeSummary(getContext())); } } Loading Loading @@ -648,4 +657,18 @@ public class ToggleScreenMagnificationPreferenceFragment extends context.getContentResolver().getUserId()); return mode == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; } private static int getUserShortcutTypeFromSettings(Context context) { int shortcutTypes = UserShortcutType.DEFAULT; if (hasMagnificationValuesInSettings(context, UserShortcutType.SOFTWARE)) { shortcutTypes |= UserShortcutType.SOFTWARE; } if (hasMagnificationValuesInSettings(context, UserShortcutType.HARDWARE)) { shortcutTypes |= UserShortcutType.HARDWARE; } if (hasMagnificationValuesInSettings(context, UserShortcutType.TRIPLETAP)) { shortcutTypes |= UserShortcutType.TRIPLETAP; } return shortcutTypes; } } Loading
src/com/android/settings/accessibility/AccessibilityUtil.java +20 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,26 @@ final class AccessibilityUtil { return false; } /** * Gets the corresponding user shortcut type of a given accessibility service. * * @param context The current context. * @param componentName The component name that need to be checked existed in Settings. * @return The user shortcut type if component name existed in {@code UserShortcutType} string * Settings. */ static int getUserShortcutTypesFromSettings(Context context, @NonNull ComponentName componentName) { int shortcutTypes = UserShortcutType.DEFAULT; if (hasValuesInSettings(context, UserShortcutType.SOFTWARE, componentName)) { shortcutTypes |= UserShortcutType.SOFTWARE; } if (hasValuesInSettings(context, UserShortcutType.HARDWARE, componentName)) { shortcutTypes |= UserShortcutType.HARDWARE; } return shortcutTypes; } /** * Converts {@link UserShortcutType} to key in Settings. * Loading
src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +30 −19 Original line number Diff line number Diff line Loading @@ -68,6 +68,8 @@ public class ToggleAccessibilityServicePreferenceFragment extends private static final String EXTRA_SHORTCUT_TYPE = "shortcut_type"; private ShortcutPreference mShortcutPreference; private int mUserShortcutType = UserShortcutType.DEFAULT; // Used to restore the edit dialog status. private int mUserShortcutTypeCache = UserShortcutType.DEFAULT; private CheckBox mSoftwareTypeCheckBox; private CheckBox mHardwareTypeCheckBox; Loading Loading @@ -115,12 +117,17 @@ public class ToggleAccessibilityServicePreferenceFragment extends @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, 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(); } @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutType); outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutTypeCache); super.onSaveInstanceState(outState); } Loading @@ -129,6 +136,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends super.onResume(); mSettingsContentObserver.register(getContentResolver()); updateSwitchBarToggleSwitch(); updateShortcutPreferenceData(); updateShortcutPreference(); } Loading Loading @@ -237,7 +245,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends } 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(); Loading @@ -245,14 +253,15 @@ public class ToggleAccessibilityServicePreferenceFragment extends } 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); } } Loading Loading @@ -315,14 +324,14 @@ public class ToggleAccessibilityServicePreferenceFragment extends private void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) { updateUserShortcutType(/* saveChanges= */ true); mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); if (mShortcutPreference.getChecked()) { AccessibilityUtil.optInAllValuesToSettings(getContext(), mUserShortcutType, mComponentName); AccessibilityUtil.optOutAllValuesFromSettings(getContext(), ~mUserShortcutType, mComponentName); } mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); } @Override Loading Loading @@ -351,23 +360,25 @@ public class ToggleAccessibilityServicePreferenceFragment extends switchBar.setSwitchBarText(switchBarText, switchBarText); } private void initShortcutPreference(Bundle savedInstanceState) { 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); // 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); mShortcutPreference.setPersistent(false); mShortcutPreference.setKey(getShortcutPreferenceKey()); mShortcutPreference.setTitle(R.string.accessibility_shortcut_title); mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); mShortcutPreference.setOnClickListener(this); // Put the shortcutPreference before settingsPreference. mShortcutPreference.setOrder(-1); Loading @@ -384,6 +395,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends shortcutPreference.setChecked( AccessibilityUtil.hasValuesInSettings(getContext(), shortcutTypes, mComponentName)); shortcutPreference.setSummary(getShortcutTypeSummary(getContext())); } } Loading Loading @@ -492,8 +504,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends @Override public void onSettingsClicked(ShortcutPreference preference) { mUserShortcutType = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); mUserShortcutTypeCache = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); showPopupDialog(DialogType.EDIT_SHORTCUT); } Loading
src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java +31 −21 Original line number Diff line number Diff line Loading @@ -65,6 +65,8 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere 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; Loading Loading @@ -125,7 +127,13 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @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) { Loading @@ -141,13 +149,14 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutType); outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutTypeCache); super.onSaveInstanceState(outState); } @Override public void onResume() { super.onResume(); updateShortcutPreferenceData(); updateShortcutPreference(); } Loading Loading @@ -191,7 +200,7 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere } 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(); Loading @@ -199,14 +208,15 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere } 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); } } Loading Loading @@ -269,14 +279,14 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere 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 Loading @@ -287,17 +297,19 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere return 0; } 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); 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); } } // Initial ShortcutPreference widget private void initShortcutPreference() { final PreferenceScreen preferenceScreen = getPreferenceScreen(); mShortcutPreference = new ShortcutPreference( preferenceScreen.getContext(), null); Loading @@ -305,11 +317,9 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere mShortcutPreference.setPersistent(false); mShortcutPreference.setKey(getShortcutPreferenceKey()); mShortcutPreference.setTitle(R.string.accessibility_shortcut_title); mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); mShortcutPreference.setOnClickListener(this); // Put the shortcutPreference before previewPreference. mShortcutPreference.setOrder(previewPreference.getOrder() - 1); // TODO(b/142530063): Check the new key to decide whether checkbox should be checked. preferenceScreen.addPreference(mShortcutPreference); } Loading @@ -323,6 +333,7 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere shortcutPreference.setChecked( AccessibilityUtil.hasValuesInSettings(getContext(), shortcutTypes, getComponentName())); shortcutPreference.setSummary(getShortcutTypeSummary(getContext())); } } Loading @@ -348,8 +359,7 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @Override public void onSettingsClicked(ShortcutPreference preference) { mUserShortcutType = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); mUserShortcutTypeCache = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); showDialog(DIALOG_ID_EDIT_SHORTCUT); } Loading
src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java +33 −22 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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); } Loading @@ -127,6 +135,7 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe ((DaltonizerRadioButtonPreferenceController) controller).displayPreference( getPreferenceScreen()); } updateShortcutPreferenceData(); updateShortcutPreference(); } Loading Loading @@ -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(); Loading @@ -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); } } Loading Loading @@ -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 Loading Loading @@ -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); Loading @@ -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( Loading @@ -388,6 +398,7 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe shortcutPreference.setChecked( AccessibilityUtil.hasValuesInSettings(getContext(), shortcutTypes, getComponentName())); shortcutPreference.setSummary(getShortcutTypeSummary(getContext())); } } Loading
src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +44 −21 Original line number Diff line number Diff line Loading @@ -69,6 +69,8 @@ public class ToggleScreenMagnificationPreferenceFragment extends private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference"; private ShortcutPreference mShortcutPreference; private int mUserShortcutType = UserShortcutType.DEFAULT; // Used to restore the edit dialog status. private int mUserShortcutTypeCache = UserShortcutType.DEFAULT; private CheckBox mSoftwareTypeCheckBox; private CheckBox mHardwareTypeCheckBox; private CheckBox mTripleTapTypeCheckBox; Loading Loading @@ -176,7 +178,12 @@ public class ToggleScreenMagnificationPreferenceFragment extends final PreferenceCategory optionCategory = new PreferenceCategory(getPrefContext()); optionCategory.setTitle(R.string.accessibility_screen_option); 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 Preference settingsPreference = new Preference(getPrefContext()); settingsPreference.setTitle(R.string.accessibility_magnification_service_settings_title); Loading Loading @@ -210,7 +217,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutType); outState.putInt(EXTRA_SHORTCUT_TYPE, mUserShortcutTypeCache); super.onSaveInstanceState(outState); } Loading @@ -224,6 +231,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends } updateConfigurationWarningIfNeeded(); updateShortcutPreferenceData(); updateShortcutPreference(); } Loading Loading @@ -292,7 +300,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends } 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(); Loading @@ -300,17 +308,18 @@ public class ToggleScreenMagnificationPreferenceFragment extends } 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 (mTripleTapTypeCheckBox.isChecked()) { mUserShortcutType |= UserShortcutType.TRIPLETAP; mUserShortcutTypeCache |= UserShortcutType.TRIPLETAP; } if (saveChanges) { mUserShortcutType = mUserShortcutTypeCache; setUserShortcutType(getPrefContext(), mUserShortcutType); } } Loading Loading @@ -378,12 +387,12 @@ public class ToggleScreenMagnificationPreferenceFragment extends private void callOnAlertDialogCheckboxClicked(DialogInterface dialog, int which) { updateUserShortcutType(/* saveChanges= */ true); mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); if (mShortcutPreference.getChecked()) { optInAllMagnificationValuesToSettings(getContext(), mUserShortcutType); optOutAllMagnificationValuesFromSettings(getContext(), ~mUserShortcutType); } mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); } private String getComponentName() { Loading Loading @@ -457,22 +466,22 @@ public class ToggleScreenMagnificationPreferenceFragment extends @Override public void onSettingsClicked(ShortcutPreference preference) { mUserShortcutType = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); mUserShortcutTypeCache = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); showDialog(DialogType.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); private void updateShortcutPreferenceData() { // Get the user shortcut type from settings provider. mUserShortcutType = getUserShortcutTypeFromSettings(getPrefContext()); 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); } } // Initial ShortcutPreference widget private void initShortcutPreference() { final PreferenceScreen preferenceScreen = getPreferenceScreen(); mShortcutPreference = new ShortcutPreference( preferenceScreen.getContext(), null); Loading @@ -481,7 +490,6 @@ public class ToggleScreenMagnificationPreferenceFragment extends mShortcutPreference.setTitle(R.string.accessibility_magnification_shortcut_title); mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); mShortcutPreference.setOnClickListener(this); // TODO(b/142530063): Check the new setting key to decide which summary should be shown. } private void updateShortcutPreference() { Loading @@ -493,6 +501,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); shortcutPreference.setChecked( hasMagnificationValuesInSettings(getContext(), shortcutTypes)); shortcutPreference.setSummary(getShortcutTypeSummary(getContext())); } } Loading Loading @@ -648,4 +657,18 @@ public class ToggleScreenMagnificationPreferenceFragment extends context.getContentResolver().getUserId()); return mode == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; } private static int getUserShortcutTypeFromSettings(Context context) { int shortcutTypes = UserShortcutType.DEFAULT; if (hasMagnificationValuesInSettings(context, UserShortcutType.SOFTWARE)) { shortcutTypes |= UserShortcutType.SOFTWARE; } if (hasMagnificationValuesInSettings(context, UserShortcutType.HARDWARE)) { shortcutTypes |= UserShortcutType.HARDWARE; } if (hasMagnificationValuesInSettings(context, UserShortcutType.TRIPLETAP)) { shortcutTypes |= UserShortcutType.TRIPLETAP; } return shortcutTypes; } }