diff --git a/src/com/android/settings/accessibility/FloatingMenuSizePreferenceController.java b/src/com/android/settings/accessibility/FloatingMenuSizePreferenceController.java index bd447be1d1d..7d4f495f5a8 100644 --- a/src/com/android/settings/accessibility/FloatingMenuSizePreferenceController.java +++ b/src/com/android/settings/accessibility/FloatingMenuSizePreferenceController.java @@ -52,11 +52,12 @@ public class FloatingMenuSizePreferenceController extends BasePreferenceControll @Retention(RetentionPolicy.SOURCE) @IntDef({ + Size.UNKNOWN, Size.SMALL, Size.LARGE, }) - @VisibleForTesting - @interface Size { + public @interface Size { + int UNKNOWN = -1; int SMALL = 0; int LARGE = 1; } diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index e05943c5bce..a485b494ddb 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -643,6 +643,17 @@ public class ToggleScreenMagnificationPreferenceFragment extends joiner.add(MAGNIFICATION_CONTROLLER_NAME); Settings.Secure.putString(context.getContentResolver(), targetKey, joiner.toString()); + // The size setting defaults to unknown. If the user has ever manually changed the size + // before, we do not automatically change it. + if (shortcutType == UserShortcutType.SOFTWARE + && Settings.Secure.getInt(context.getContentResolver(), + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE, + FloatingMenuSizePreferenceController.Size.UNKNOWN) + == FloatingMenuSizePreferenceController.Size.UNKNOWN) { + Settings.Secure.putInt(context.getContentResolver(), + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE, + FloatingMenuSizePreferenceController.Size.LARGE); + } } @VisibleForTesting diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java index a4033b1127b..2eac7851688 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java @@ -64,6 +64,7 @@ import org.robolectric.Shadows; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowContentResolver; import org.robolectric.shadows.ShadowPackageManager; +import org.robolectric.shadows.ShadowSettings; import org.robolectric.shadows.androidx.fragment.FragmentController; import org.robolectric.util.ReflectionHelpers; @@ -71,7 +72,8 @@ import java.util.Collection; import java.util.List; /** Tests for {@link ToggleScreenMagnificationPreferenceFragment}. */ -@Config(shadows = {ShadowUserManager.class, ShadowStorageManager.class}) +@Config(shadows = {ShadowUserManager.class, ShadowStorageManager.class, + ShadowSettings.ShadowSecure.class}) @RunWith(RobolectricTestRunner.class) public class ToggleScreenMagnificationPreferenceFragmentTest { @@ -208,6 +210,73 @@ public class ToggleScreenMagnificationPreferenceFragmentTest { PLACEHOLDER_COMPONENT_NAME.flattenToString() + ":" + MAGNIFICATION_CONTROLLER_NAME); } + @Test + public void optInAllValuesToSettings_software_sizeValueIsNull_putLargeSizeValue() { + ShadowSettings.ShadowSecure.reset(); + + ToggleScreenMagnificationPreferenceFragment.optInAllMagnificationValuesToSettings(mContext, + UserShortcutType.SOFTWARE); + + assertThat(Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE, + FloatingMenuSizePreferenceController.Size.UNKNOWN)).isEqualTo( + FloatingMenuSizePreferenceController.Size.LARGE); + } + + @Test + public void optInAllValuesToSettings_software_sizeValueIsNotNull_sizeValueIsNotChanged() { + for (int size : new int[] {FloatingMenuSizePreferenceController.Size.LARGE, + FloatingMenuSizePreferenceController.Size.SMALL}) { + Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE, size); + + ToggleScreenMagnificationPreferenceFragment.optInAllMagnificationValuesToSettings( + mContext, + UserShortcutType.SOFTWARE); + + assertThat(Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE, + FloatingMenuSizePreferenceController.Size.UNKNOWN)).isEqualTo( + size); + } + } + + @Test + public void optInAllValuesToSettings_hardware_sizeValueIsNotChanged() { + for (int size : new int[] {FloatingMenuSizePreferenceController.Size.UNKNOWN, + FloatingMenuSizePreferenceController.Size.LARGE, + FloatingMenuSizePreferenceController.Size.SMALL}) { + Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE, size); + + ToggleScreenMagnificationPreferenceFragment.optInAllMagnificationValuesToSettings( + mContext, + UserShortcutType.HARDWARE); + + assertThat(Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE, size + 1)).isEqualTo( + size); + } + } + + @Test + public void optInAllValuesToSettings_tripletap_sizeValueIsNotChanged() { + for (int size : new int[] {FloatingMenuSizePreferenceController.Size.UNKNOWN, + FloatingMenuSizePreferenceController.Size.LARGE, + FloatingMenuSizePreferenceController.Size.SMALL}) { + Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE, size); + + ToggleScreenMagnificationPreferenceFragment.optInAllMagnificationValuesToSettings( + mContext, + UserShortcutType.TRIPLETAP); + + assertThat(Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE, size + 1)).isEqualTo( + size); + } + } + @Test public void optOutAllValuesToSettings_optOutValue_emptyString() { putStringIntoSettings(SOFTWARE_SHORTCUT_KEY, MAGNIFICATION_CONTROLLER_NAME);