From fb576356aa72c30e7797f673c470e864e6880ece Mon Sep 17 00:00:00 2001 From: jasonwshsu Date: Tue, 7 Jan 2020 15:24:40 +0800 Subject: [PATCH] Accessibility shortcut secondary action - handle all preferred shortcut type key - save and restore all preferredShortcutType: SOFTWARE, HARDWARE, TRIPLETAP Bug: 142530063 Test: manual Change-Id: I7dd714d1516f49e89c42822241f9cb2b41ae2d2e --- .../accessibility/AccessibilityUtil.java | 75 +++++++++++++-- ...ccessibilityServicePreferenceFragment.java | 32 +++---- ...oggleColorInversionPreferenceFragment.java | 21 +++-- .../ToggleDaltonizerPreferenceFragment.java | 21 +++-- ...ScreenMagnificationPreferenceFragment.java | 92 +++++++++++-------- .../accessibility/AccessibilityUtilTest.java | 39 +++++++- 6 files changed, 189 insertions(+), 91 deletions(-) diff --git a/src/com/android/settings/accessibility/AccessibilityUtil.java b/src/com/android/settings/accessibility/AccessibilityUtil.java index 06c114b5578..fb7b01f1d98 100644 --- a/src/com/android/settings/accessibility/AccessibilityUtil.java +++ b/src/com/android/settings/accessibility/AccessibilityUtil.java @@ -27,6 +27,7 @@ import android.text.TextUtils; import androidx.annotation.IntDef; import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; import com.android.settings.R; @@ -160,41 +161,76 @@ final class AccessibilityUtil { } /** - * Opts in component name into colon-separated {@code shortcutType} key's string in Settings. + * Opts in component name into multiple {@code shortcutTypes} colon-separated string in + * Settings. + * + * @param context The current context. + * @param shortcutTypes A combination of {@link UserShortcutType}. + * @param componentName The component name that need to be opted in Settings. + */ + static void optInAllValuesToSettings(Context context, int shortcutTypes, + @NonNull ComponentName componentName) { + if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) { + optInValueToSettings(context, UserShortcutType.SOFTWARE, componentName); + } + if (((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE)) { + optInValueToSettings(context, UserShortcutType.HARDWARE, componentName); + } + } + + /** + * Opts in component name into {@code shortcutType} colon-separated string in Settings. * * @param context The current context. * @param shortcutType The preferred shortcut type user selected. * @param componentName The component name that need to be opted in Settings. */ + @VisibleForTesting static void optInValueToSettings(Context context, @UserShortcutType int shortcutType, @NonNull ComponentName componentName) { final String targetKey = convertKeyFromSettings(shortcutType); final String targetString = Settings.Secure.getString(context.getContentResolver(), targetKey); - if (TextUtils.isEmpty(targetString)) { - return; - } - if (hasValueInSettings(context, shortcutType, componentName)) { return; } final StringJoiner joiner = new StringJoiner(String.valueOf(COMPONENT_NAME_SEPARATOR)); - - joiner.add(targetString); + if (!TextUtils.isEmpty(targetString)) { + joiner.add(targetString); + } joiner.add(componentName.flattenToString()); Settings.Secure.putString(context.getContentResolver(), targetKey, joiner.toString()); } /** - * Opts out component name into colon-separated {@code shortcutType} key's string in Settings. + * Opts out component name into multiple {@code shortcutTypes} colon-separated string in + * Settings. + * + * @param context The current context. + * @param shortcutTypes A combination of {@link UserShortcutType}. + * @param componentName The component name that need to be opted out from Settings. + */ + static void optOutAllValuesFromSettings(Context context, int shortcutTypes, + @NonNull ComponentName componentName) { + if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) { + optOutValueFromSettings(context, UserShortcutType.SOFTWARE, componentName); + } + if (((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE)) { + optOutValueFromSettings(context, UserShortcutType.HARDWARE, componentName); + } + } + + /** + * Opts out component name into {@code shortcutType} colon-separated string in Settings. * * @param context The current context. * @param shortcutType The preferred shortcut type user selected. * @param componentName The component name that need to be opted out from Settings. */ + @VisibleForTesting static void optOutValueFromSettings(Context context, @UserShortcutType int shortcutType, @NonNull ComponentName componentName) { final StringJoiner joiner = new StringJoiner(String.valueOf(COMPONENT_NAME_SEPARATOR)); @@ -219,13 +255,34 @@ final class AccessibilityUtil { } /** - * Returns if component name existed in Settings. + * Returns if component name existed in one of {@code shortcutTypes} string in Settings. + * + * @param context The current context. + * @param shortcutTypes A combination of {@link UserShortcutType}. + * @param componentName The component name that need to be checked existed in Settings. + * @return {@code true} if componentName existed in Settings. + */ + static boolean hasValuesInSettings(Context context, int shortcutTypes, + @NonNull ComponentName componentName) { + boolean exist = false; + if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) { + exist = hasValueInSettings(context, UserShortcutType.SOFTWARE, componentName); + } + if (((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE)) { + exist |= hasValueInSettings(context, UserShortcutType.HARDWARE, componentName); + } + return exist; + } + + /** + * Returns if component name existed in {@code shortcutType} string Settings. * * @param context The current context. * @param shortcutType The preferred shortcut type user selected. * @param componentName The component name that need to be checked existed in Settings. * @return {@code true} if componentName existed in Settings. */ + @VisibleForTesting static boolean hasValueInSettings(Context context, @UserShortcutType int shortcutType, @NonNull ComponentName componentName) { final String targetKey = convertKeyFromSettings(shortcutType); diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java index e2751570fcf..5358aabc7fc 100644 --- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java @@ -317,6 +317,12 @@ public class ToggleAccessibilityServicePreferenceFragment extends updateUserShortcutType(/* saveChanges= */ true); mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); + if (mShortcutPreference.getChecked()) { + AccessibilityUtil.optInAllValuesToSettings(getContext(), mUserShortcutType, + mComponentName); + AccessibilityUtil.optOutAllValuesFromSettings(getContext(), ~mUserShortcutType, + mComponentName); + } } @Override @@ -346,8 +352,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends } private void initShortcutPreference(Bundle savedInstanceState) { - mUserShortcutType = getUserShortcutType(getPrefContext(), - UserShortcutType.SOFTWARE); + mUserShortcutType = getUserShortcutType(getPrefContext(), UserShortcutType.SOFTWARE); // Restore the user shortcut type if (savedInstanceState != null && savedInstanceState.containsKey(EXTRA_SHORTCUT_TYPE)) { @@ -366,7 +371,6 @@ public class ToggleAccessibilityServicePreferenceFragment extends mShortcutPreference.setOnClickListener(this); // Put the shortcutPreference before settingsPreference. mShortcutPreference.setOrder(-1); - // TODO(b/142530063): Check the new key to decide whether checkbox should be checked. preferenceScreen.addPreference(mShortcutPreference); } @@ -376,11 +380,9 @@ public class ToggleAccessibilityServicePreferenceFragment extends getShortcutPreferenceKey()); if (shortcutPreference != null) { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. + final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); shortcutPreference.setChecked( - AccessibilityUtil.hasValueInSettings(getContext(), - UserShortcutType.SOFTWARE, + AccessibilityUtil.hasValuesInSettings(getContext(), shortcutTypes, mComponentName)); } } @@ -473,20 +475,17 @@ public class ToggleAccessibilityServicePreferenceFragment extends @Override public void onCheckboxClicked(ShortcutPreference preference) { + final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); if (preference.getChecked()) { if (!getArguments().getBoolean(AccessibilitySettings.EXTRA_CHECKED)) { preference.setChecked(false); showPopupDialog(DialogType.ENABLE_WARNING_FROM_SHORTCUT); } else { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog - // shortcut preferred key. - AccessibilityUtil.optInValueToSettings(getContext(), UserShortcutType.SOFTWARE, + AccessibilityUtil.optInAllValuesToSettings(getContext(), shortcutTypes, mComponentName); } } else { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. - AccessibilityUtil.optOutValueFromSettings(getContext(), UserShortcutType.SOFTWARE, + AccessibilityUtil.optOutAllValuesFromSettings(getContext(), shortcutTypes, mComponentName); } } @@ -578,10 +577,9 @@ public class ToggleAccessibilityServicePreferenceFragment extends private void onAllowButtonFromShortcutClicked() { final ShortcutPreference shortcutPreference = findPreference(getShortcutPreferenceKey()); shortcutPreference.setChecked(true); - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. - AccessibilityUtil.optInValueToSettings(getContext(), UserShortcutType.SOFTWARE, - mComponentName); + + final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); + AccessibilityUtil.optInAllValuesToSettings(getContext(), shortcutTypes, mComponentName); mDialog.dismiss(); } diff --git a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java index b4c7dcea277..610bb6b2ae0 100644 --- a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java @@ -273,6 +273,12 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere updateUserShortcutType(/* saveChanges= */ true); mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); + if (mShortcutPreference.getChecked()) { + AccessibilityUtil.optInAllValuesToSettings(getContext(), mUserShortcutType, + getComponentName()); + AccessibilityUtil.optOutAllValuesFromSettings(getContext(), ~mUserShortcutType, + getComponentName()); + } } @Override @@ -315,11 +321,9 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere getShortcutPreferenceKey()); if (shortcutPreference != null) { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. + final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); shortcutPreference.setChecked( - AccessibilityUtil.hasValueInSettings(getContext(), - UserShortcutType.SOFTWARE, + AccessibilityUtil.hasValuesInSettings(getContext(), shortcutTypes, getComponentName())); } } @@ -334,15 +338,12 @@ public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePrefere @Override public void onCheckboxClicked(ShortcutPreference preference) { + final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); if (preference.getChecked()) { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. - AccessibilityUtil.optInValueToSettings(getContext(), UserShortcutType.SOFTWARE, + AccessibilityUtil.optInAllValuesToSettings(getContext(), shortcutTypes, getComponentName()); } else { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. - AccessibilityUtil.optOutValueFromSettings(getContext(), UserShortcutType.SOFTWARE, + AccessibilityUtil.optOutAllValuesFromSettings(getContext(), shortcutTypes, getComponentName()); } } diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java index 12a207e0afd..c20e304bc70 100644 --- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java @@ -245,6 +245,12 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe updateUserShortcutType(/* saveChanges= */ true); mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); + if (mShortcutPreference.getChecked()) { + AccessibilityUtil.optInAllValuesToSettings(getContext(), mUserShortcutType, + getComponentName()); + AccessibilityUtil.optOutAllValuesFromSettings(getContext(), ~mUserShortcutType, + getComponentName()); + } } @Override @@ -303,15 +309,12 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe @Override public void onCheckboxClicked(ShortcutPreference preference) { + final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); if (preference.getChecked()) { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. - AccessibilityUtil.optInValueToSettings(getContext(), UserShortcutType.SOFTWARE, + AccessibilityUtil.optInAllValuesToSettings(getContext(), shortcutTypes, getComponentName()); } else { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. - AccessibilityUtil.optOutValueFromSettings(getContext(), UserShortcutType.SOFTWARE, + AccessibilityUtil.optOutAllValuesFromSettings(getContext(), shortcutTypes, getComponentName()); } } @@ -355,11 +358,9 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe getShortcutPreferenceKey()); if (shortcutPreference != null) { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. + final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); shortcutPreference.setChecked( - AccessibilityUtil.hasValueInSettings(getContext(), - UserShortcutType.SOFTWARE, + AccessibilityUtil.hasValuesInSettings(getContext(), shortcutTypes, getComponentName())); } diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index c6756a89806..2de2cb727ee 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -372,6 +372,10 @@ public class ToggleScreenMagnificationPreferenceFragment extends updateUserShortcutType(/* saveChanges= */ true); mShortcutPreference.setSummary( getShortcutTypeSummary(getPrefContext())); + if (mShortcutPreference.getChecked()) { + optInAllMagnificationValuesToSettings(getContext(), mUserShortcutType); + optOutAllMagnificationValuesFromSettings(getContext(), ~mUserShortcutType); + } } private String getComponentName() { @@ -435,38 +439,11 @@ public class ToggleScreenMagnificationPreferenceFragment extends @Override public void onCheckboxClicked(ShortcutPreference preference) { + final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); if (preference.getChecked()) { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. - optInMagnificationValueToSettings(getContext(), UserShortcutType.SOFTWARE); - - // TODO(b/142531156): ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED need to be treated - // as special case in this file. - if ((mUserShortcutType & UserShortcutType.SOFTWARE) - == UserShortcutType.SOFTWARE) { - MagnificationPreferenceFragment.setChecked(getContentResolver(), - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, - /* isChecked= */ true); - } - if ((mUserShortcutType & UserShortcutType.TRIPLETAP) - == UserShortcutType.TRIPLETAP) { - MagnificationPreferenceFragment.setChecked(getContentResolver(), - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, - /* isChecked= */ true); - } + optInAllMagnificationValuesToSettings(getContext(), shortcutTypes); } else { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. - optOutMagnificationValueFromSettings(getContext(), UserShortcutType.SOFTWARE); - - // TODO(b/142531156): ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED need to be treated - // as special case in this file. - MagnificationPreferenceFragment.setChecked(getContentResolver(), - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, - /* isChecked= */ false); - MagnificationPreferenceFragment.setChecked(getContentResolver(), - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, - /* isChecked= */ false); + optOutAllMagnificationValuesFromSettings(getContext(), shortcutTypes); } } @@ -505,11 +482,9 @@ public class ToggleScreenMagnificationPreferenceFragment extends getShortcutPreferenceKey()); if (shortcutPreference != null) { - // TODO(b/142531156): Replace UserShortcutType.SOFTWARE value with dialog shortcut - // preferred key. + final int shortcutTypes = getUserShortcutType(getContext(), UserShortcutType.SOFTWARE); shortcutPreference.setChecked( - hasMagnificationValueInSettings(getContext(), - UserShortcutType.SOFTWARE)); + hasMagnificationValuesInSettings(getContext(), shortcutTypes)); } } @@ -534,28 +509,50 @@ public class ToggleScreenMagnificationPreferenceFragment extends int EDIT_SHORTCUT = 3; } + private static void optInAllMagnificationValuesToSettings(Context context, int shortcutTypes) { + if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) { + optInMagnificationValueToSettings(context, UserShortcutType.SOFTWARE); + } + if (((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE)) { + optInMagnificationValueToSettings(context, UserShortcutType.HARDWARE); + } + if (((shortcutTypes & UserShortcutType.TRIPLETAP) == UserShortcutType.TRIPLETAP)) { + optInMagnificationValueToSettings(context, UserShortcutType.TRIPLETAP); + } + } + private static void optInMagnificationValueToSettings(Context context, @UserShortcutType int shortcutType) { final String targetKey = AccessibilityUtil.convertKeyFromSettings(shortcutType); final String targetString = Settings.Secure.getString(context.getContentResolver(), targetKey); - if (TextUtils.isEmpty(targetString)) { - return; - } - if (hasMagnificationValueInSettings(context, shortcutType)) { return; } final StringJoiner joiner = new StringJoiner(String.valueOf(COMPONENT_NAME_SEPARATOR)); - - joiner.add(Settings.Secure.getString(context.getContentResolver(), targetKey)); + if (TextUtils.isEmpty(targetString)) { + joiner.add(targetString); + } joiner.add(MAGNIFICATION_CONTROLLER_NAME); Settings.Secure.putString(context.getContentResolver(), targetKey, joiner.toString()); } + private static void optOutAllMagnificationValuesFromSettings(Context context, + int shortcutTypes) { + if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) { + optOutMagnificationValueFromSettings(context, UserShortcutType.SOFTWARE); + } + if (((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE)) { + optOutMagnificationValueFromSettings(context, UserShortcutType.HARDWARE); + } + if (((shortcutTypes & UserShortcutType.TRIPLETAP) == UserShortcutType.TRIPLETAP)) { + optOutMagnificationValueFromSettings(context, UserShortcutType.TRIPLETAP); + } + } + private static void optOutMagnificationValueFromSettings(Context context, @UserShortcutType int shortcutType) { final StringJoiner joiner = new StringJoiner(String.valueOf(COMPONENT_NAME_SEPARATOR)); @@ -579,6 +576,21 @@ public class ToggleScreenMagnificationPreferenceFragment extends Settings.Secure.putString(context.getContentResolver(), targetKey, joiner.toString()); } + private static boolean hasMagnificationValuesInSettings(Context context, int shortcutTypes) { + boolean exist = false; + + if ((shortcutTypes & UserShortcutType.SOFTWARE) == UserShortcutType.SOFTWARE) { + exist = hasMagnificationValueInSettings(context, UserShortcutType.SOFTWARE); + } + if (((shortcutTypes & UserShortcutType.HARDWARE) == UserShortcutType.HARDWARE)) { + exist |= hasMagnificationValueInSettings(context, UserShortcutType.HARDWARE); + } + if (((shortcutTypes & UserShortcutType.TRIPLETAP) == UserShortcutType.TRIPLETAP)) { + exist |= hasMagnificationValueInSettings(context, UserShortcutType.TRIPLETAP); + } + return exist; + } + private static boolean hasMagnificationValueInSettings(Context context, @UserShortcutType int shortcutType) { final String targetKey = AccessibilityUtil.convertKeyFromSettings(shortcutType); diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java index 152ba22a1ec..e8116c442c0 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityUtilTest.java @@ -53,6 +53,8 @@ public final class AccessibilityUtilTest { DUMMY_CLASS_NAME2); private static final String SOFTWARE_SHORTCUT_KEY = Settings.Secure.ACCESSIBILITY_BUTTON_TARGET_COMPONENT; + private static final String HARDWARE_SHORTCUT_KEY = + Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE; private Context mContext; @@ -133,7 +135,7 @@ public final class AccessibilityUtilTest { } @Test - public void hasValueInSettings_dummyComponentName_hasValue() { + public void hasValueInSettings_putValue_hasValue() { putStringIntoSettings(SOFTWARE_SHORTCUT_KEY, DUMMY_COMPONENT_NAME.flattenToString()); assertThat(AccessibilityUtil.hasValueInSettings(mContext, UserShortcutType.SOFTWARE, @@ -141,7 +143,20 @@ public final class AccessibilityUtilTest { } @Test - public void optInValueToSettings_optInDummyComponentName2_haveDummyComponentName2String() { + public void optInAllValuesToSettings_optInValue_haveMatchString() { + int shortcutTypes = UserShortcutType.SOFTWARE | UserShortcutType.HARDWARE; + + AccessibilityUtil.optInAllValuesToSettings(mContext, shortcutTypes, DUMMY_COMPONENT_NAME); + + assertThat(getStringFromSettings(SOFTWARE_SHORTCUT_KEY)).isEqualTo( + DUMMY_COMPONENT_NAME.flattenToString()); + assertThat(getStringFromSettings(HARDWARE_SHORTCUT_KEY)).isEqualTo( + DUMMY_COMPONENT_NAME.flattenToString()); + + } + + @Test + public void optInValueToSettings_optInValue_haveMatchString() { putStringIntoSettings(SOFTWARE_SHORTCUT_KEY, DUMMY_COMPONENT_NAME.flattenToString()); AccessibilityUtil.optInValueToSettings(mContext, UserShortcutType.SOFTWARE, DUMMY_COMPONENT_NAME2); @@ -152,7 +167,7 @@ public final class AccessibilityUtilTest { } @Test - public void optInValueToSettings_optInTwoDummyComponentName_haveOneDummyComponentName2String() { + public void optInValueToSettings_optInTwoValues_haveMatchString() { putStringIntoSettings(SOFTWARE_SHORTCUT_KEY, DUMMY_COMPONENT_NAME.flattenToString()); AccessibilityUtil.optInValueToSettings(mContext, UserShortcutType.SOFTWARE, DUMMY_COMPONENT_NAME2); @@ -165,7 +180,21 @@ public final class AccessibilityUtilTest { } @Test - public void optOutValueFromSettings_optOutDummyComponentName_emptyValue() { + public void optOutAllValuesToSettings_optOutValue_emptyString() { + putStringIntoSettings(SOFTWARE_SHORTCUT_KEY, DUMMY_COMPONENT_NAME.flattenToString()); + putStringIntoSettings(HARDWARE_SHORTCUT_KEY, DUMMY_COMPONENT_NAME.flattenToString()); + int shortcutTypes = + UserShortcutType.SOFTWARE | UserShortcutType.HARDWARE | UserShortcutType.TRIPLETAP; + + AccessibilityUtil.optOutAllValuesFromSettings(mContext, shortcutTypes, + DUMMY_COMPONENT_NAME); + + assertThat(getStringFromSettings(SOFTWARE_SHORTCUT_KEY)).isEmpty(); + assertThat(getStringFromSettings(HARDWARE_SHORTCUT_KEY)).isEmpty(); + } + + @Test + public void optOutValueFromSettings_optOutValue_emptyString() { putStringIntoSettings(SOFTWARE_SHORTCUT_KEY, DUMMY_COMPONENT_NAME.flattenToString()); AccessibilityUtil.optOutValueFromSettings(mContext, UserShortcutType.SOFTWARE, DUMMY_COMPONENT_NAME); @@ -174,7 +203,7 @@ public final class AccessibilityUtilTest { } @Test - public void optOutValueFromSettings_optOutDummyComponentName2_haveDummyComponentName() { + public void optOutValueFromSettings_optOutValue_haveMatchString() { putStringIntoSettings(SOFTWARE_SHORTCUT_KEY, DUMMY_COMPONENT_NAME.flattenToString() + ":" + DUMMY_COMPONENT_NAME2.flattenToString()); AccessibilityUtil.optOutValueFromSettings(mContext, UserShortcutType.SOFTWARE,