From 0e64487bc3ceadf2b2203093a4ab18af6cbb8cb3 Mon Sep 17 00:00:00 2001 From: Lorenzo Lucena Maguire Date: Mon, 16 Dec 2024 22:04:36 +0000 Subject: [PATCH] Support Double Tap Power to open camera via config resource "Quickly open camera" screen was previously replaced by the "Double Tap Power Button" screen and accessible only if the feature flag android.service.quickaccesswallet.launch_wallet_option_on_power_double_tap was disabled. This CL introduces the possibility to set, via a config resource, "Quickly open camera" as the double tap power gesture screen. Test: atest DoubleTapPowerSettingsTest Test: atest DoubleTapPowerPreferenceControllerTest Test: atest DoubleTapPowerSettingsUtilsTest Test: manually modified config and verified screen and gesture behavior change Flag: android.service.quickaccesswallet.launch_wallet_option_on_power_double_tap Bug: 384794943 Change-Id: I5ab4422da09fa90848c66a41829327494080b5a2 Change-Id: I8e04cac3999a7ed99a611ef084c54bc07a5505dc --- ...TapPowerForCameraPreferenceController.java | 3 +- ...TapPowerForWalletPreferenceController.java | 3 +- ...apPowerMainSwitchPreferenceController.java | 3 +- .../DoubleTapPowerPreferenceController.java | 26 +++- .../gestures/DoubleTapPowerSettings.java | 18 ++- .../gestures/DoubleTapPowerSettingsUtils.java | 40 +++-- ...owerForCameraPreferenceControllerTest.java | 12 +- ...owerForWalletPreferenceControllerTest.java | 12 +- ...werMainSwitchPreferenceControllerTest.java | 9 +- ...oubleTapPowerPreferenceControllerTest.java | 145 +++++++++++++----- .../gestures/DoubleTapPowerSettingsTest.java | 56 ++++++- .../DoubleTapPowerSettingsUtilsTest.java | 70 +++++---- 12 files changed, 285 insertions(+), 112 deletions(-) diff --git a/src/com/android/settings/gestures/DoubleTapPowerForCameraPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerForCameraPreferenceController.java index 0c7c65a7ffa..77a8a9b64f9 100644 --- a/src/com/android/settings/gestures/DoubleTapPowerForCameraPreferenceController.java +++ b/src/com/android/settings/gestures/DoubleTapPowerForCameraPreferenceController.java @@ -65,7 +65,8 @@ public class DoubleTapPowerForCameraPreferenceController extends BasePreferenceC @Override public int getAvailabilityStatus() { - if (!DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureAvailable(mContext)) { + if (!DoubleTapPowerSettingsUtils + .isMultiTargetDoubleTapPowerButtonGestureAvailable(mContext)) { return UNSUPPORTED_ON_DEVICE; } return DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureEnabled(mContext) diff --git a/src/com/android/settings/gestures/DoubleTapPowerForWalletPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerForWalletPreferenceController.java index 56dda4d4953..9efeb9c3304 100644 --- a/src/com/android/settings/gestures/DoubleTapPowerForWalletPreferenceController.java +++ b/src/com/android/settings/gestures/DoubleTapPowerForWalletPreferenceController.java @@ -65,7 +65,8 @@ public class DoubleTapPowerForWalletPreferenceController extends BasePreferenceC @Override public int getAvailabilityStatus() { - if (!DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureAvailable(mContext)) { + if (!DoubleTapPowerSettingsUtils + .isMultiTargetDoubleTapPowerButtonGestureAvailable(mContext)) { return UNSUPPORTED_ON_DEVICE; } return DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureEnabled(mContext) diff --git a/src/com/android/settings/gestures/DoubleTapPowerMainSwitchPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerMainSwitchPreferenceController.java index 3eb18eb931d..4a6d328b59e 100644 --- a/src/com/android/settings/gestures/DoubleTapPowerMainSwitchPreferenceController.java +++ b/src/com/android/settings/gestures/DoubleTapPowerMainSwitchPreferenceController.java @@ -57,7 +57,8 @@ public class DoubleTapPowerMainSwitchPreferenceController @Override public int getAvailabilityStatus() { - return DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureAvailable(mContext) + return DoubleTapPowerSettingsUtils + .isMultiTargetDoubleTapPowerButtonGestureAvailable(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } diff --git a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java index 686d64cf1f5..ee3f5f01718 100644 --- a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java +++ b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java @@ -18,6 +18,8 @@ package com.android.settings.gestures; import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_DISABLED_MODE; + import android.content.Context; import android.content.SharedPreferences; import android.provider.Settings; @@ -37,7 +39,8 @@ public class DoubleTapPowerPreferenceController extends BasePreferenceController public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) { return !isGestureAvailable(context) - || prefs.getBoolean(DoubleTapPowerSettings.PREF_KEY_SUGGESTION_COMPLETE, false); + || prefs.getBoolean(DoubleTapPowerSettings.PREF_KEY_SUGGESTION_COMPLETE, + false); } private static boolean isGestureAvailable(@NonNull Context context) { @@ -46,7 +49,10 @@ public class DoubleTapPowerPreferenceController extends BasePreferenceController .getBoolean( com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled); } - return DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureAvailable(context); + return context.getResources() + .getInteger( + com.android.internal.R.integer.config_doubleTapPowerGestureMode) + != DOUBLE_TAP_POWER_DISABLED_MODE; } @Override @@ -56,7 +62,9 @@ public class DoubleTapPowerPreferenceController extends BasePreferenceController @Override public void displayPreference(@NonNull PreferenceScreen screen) { - if (!android.service.quickaccesswallet.Flags.launchWalletOptionOnPowerDoubleTap()) { + if (!android.service.quickaccesswallet.Flags.launchWalletOptionOnPowerDoubleTap() + || !DoubleTapPowerSettingsUtils + .isMultiTargetDoubleTapPowerButtonGestureAvailable(mContext)) { final Preference preference = screen.findPreference(getPreferenceKey()); if (preference != null) { preference.setTitle(R.string.double_tap_power_for_camera_title); @@ -68,12 +76,14 @@ public class DoubleTapPowerPreferenceController extends BasePreferenceController @Override @NonNull public CharSequence getSummary() { - if (!android.service.quickaccesswallet.Flags.launchWalletOptionOnPowerDoubleTap()) { + if (!android.service.quickaccesswallet.Flags.launchWalletOptionOnPowerDoubleTap() + || !DoubleTapPowerSettingsUtils + .isMultiTargetDoubleTapPowerButtonGestureAvailable(mContext)) { final boolean isCameraDoubleTapPowerGestureEnabled = Settings.Secure.getInt( - mContext.getContentResolver(), - CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, - DoubleTapPowerToOpenCameraPreferenceController.ON) + mContext.getContentResolver(), + CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, + DoubleTapPowerToOpenCameraPreferenceController.ON) == DoubleTapPowerToOpenCameraPreferenceController.ON; return mContext.getText( isCameraDoubleTapPowerGestureEnabled @@ -85,7 +95,7 @@ public class DoubleTapPowerPreferenceController extends BasePreferenceController mContext.getText(com.android.settings.R.string.gesture_setting_on); final CharSequence actionString = DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureForCameraLaunchEnabled( - mContext) + mContext) ? mContext.getText(R.string.double_tap_power_camera_action_summary) : mContext.getText(R.string.double_tap_power_wallet_action_summary); return mContext.getString(R.string.double_tap_power_summary, onString, actionString); diff --git a/src/com/android/settings/gestures/DoubleTapPowerSettings.java b/src/com/android/settings/gestures/DoubleTapPowerSettings.java index 076f23fa660..892eb4a5422 100644 --- a/src/com/android/settings/gestures/DoubleTapPowerSettings.java +++ b/src/com/android/settings/gestures/DoubleTapPowerSettings.java @@ -39,9 +39,11 @@ public class DoubleTapPowerSettings extends DashboardFragment { public static final String PREF_KEY_SUGGESTION_COMPLETE = "pref_double_tap_power_suggestion_complete"; + private Context mContext; @Override public void onAttach(Context context) { + mContext = context; super.onAttach(context); SuggestionFeatureProvider suggestionFeatureProvider = FeatureFactory.getFeatureFactory().getSuggestionFeatureProvider(); @@ -61,7 +63,15 @@ public class DoubleTapPowerSettings extends DashboardFragment { @Override protected int getPreferenceScreenResId() { - return android.service.quickaccesswallet.Flags.launchWalletOptionOnPowerDoubleTap() + return getDoubleTapPowerSettingsResId(mContext); + } + + private static int getDoubleTapPowerSettingsResId(Context context) { + if (!android.service.quickaccesswallet.Flags.launchWalletOptionOnPowerDoubleTap()) { + return R.xml.double_tap_power_to_open_camera_settings; + } + return DoubleTapPowerSettingsUtils + .isMultiTargetDoubleTapPowerButtonGestureAvailable(context) ? R.xml.double_tap_power_settings : R.xml.double_tap_power_to_open_camera_settings; } @@ -73,11 +83,7 @@ public class DoubleTapPowerSettings extends DashboardFragment { public List getXmlResourcesToIndex( @NonNull Context context, boolean enabled) { final SearchIndexableResource sir = new SearchIndexableResource(context); - sir.xmlResId = - android.service.quickaccesswallet.Flags - .launchWalletOptionOnPowerDoubleTap() - ? R.xml.double_tap_power_settings - : R.xml.double_tap_power_to_open_camera_settings; + sir.xmlResId = getDoubleTapPowerSettingsResId(context); return List.of(sir); } }; diff --git a/src/com/android/settings/gestures/DoubleTapPowerSettingsUtils.java b/src/com/android/settings/gestures/DoubleTapPowerSettingsUtils.java index a1bf9cbd48c..6347c0f48c5 100644 --- a/src/com/android/settings/gestures/DoubleTapPowerSettingsUtils.java +++ b/src/com/android/settings/gestures/DoubleTapPowerSettingsUtils.java @@ -29,6 +29,16 @@ import com.android.internal.R; /** Common code for double tap power settings shared between controllers. */ final class DoubleTapPowerSettingsUtils { + /** Configuration value indicating double tap power button gesture is disabled. */ + static final int DOUBLE_TAP_POWER_DISABLED_MODE = 0; + /** Configuration value indicating double tap power button gesture should launch camera. */ + static final int DOUBLE_TAP_POWER_LAUNCH_CAMERA_MODE = 1; + /** + * Configuration value indicating double tap power button gesture should launch one of many + * target actions. + */ + static final int DOUBLE_TAP_POWER_MULTI_TARGET_MODE = 2; + /** Setting storing whether the double tap power button gesture is enabled. */ private static final String DOUBLE_TAP_POWER_BUTTON_GESTURE_ENABLED = Settings.Secure.DOUBLE_TAP_POWER_BUTTON_GESTURE_ENABLED; @@ -52,19 +62,23 @@ final class DoubleTapPowerSettingsUtils { /** * @return true if double tap power button gesture is available. */ - public static boolean isDoubleTapPowerButtonGestureAvailable(@NonNull Context context) { - return context.getResources().getBoolean(R.bool.config_doubleTapPowerGestureEnabled); + public static boolean isMultiTargetDoubleTapPowerButtonGestureAvailable( + @NonNull Context context) { + return context.getResources() + .getInteger( + R.integer.config_doubleTapPowerGestureMode) + == DOUBLE_TAP_POWER_MULTI_TARGET_MODE; } /** * Gets double tap power button gesture enable or disable flag from Settings provider. * - * @return true if double tap on the power button gesture is currently enabled. * @param context App context + * @return true if double tap on the power button gesture is currently enabled. */ public static boolean isDoubleTapPowerButtonGestureEnabled(@NonNull Context context) { return Settings.Secure.getInt( - context.getContentResolver(), DOUBLE_TAP_POWER_BUTTON_GESTURE_ENABLED, ON) + context.getContentResolver(), DOUBLE_TAP_POWER_BUTTON_GESTURE_ENABLED, ON) == ON; } @@ -72,7 +86,7 @@ final class DoubleTapPowerSettingsUtils { * Sets double tap power button gesture enable or disable flag to Settings provider. * * @param context App context - * @param enable enable or disable double tap power button gesture. + * @param enable enable or disable double tap power button gesture. * @return {@code true} if the setting is updated. */ public static boolean setDoubleTapPowerButtonGestureEnabled( @@ -84,19 +98,19 @@ final class DoubleTapPowerSettingsUtils { } /** - * @return true if double tap on the power button gesture for camera launch is currently - * enabled. * @param context App context + * @return true if double tap on the power button gesture for camera launch is currently + * enabled. */ public static boolean isDoubleTapPowerButtonGestureForCameraLaunchEnabled( @NonNull Context context) { return Settings.Secure.getInt( - context.getContentResolver(), - DOUBLE_TAP_POWER_BUTTON_GESTURE_TARGET_ACTION, - context.getResources() - .getInteger( - com.android.internal.R.integer - .config_defaultDoubleTapPowerGestureAction)) + context.getContentResolver(), + DOUBLE_TAP_POWER_BUTTON_GESTURE_TARGET_ACTION, + context.getResources() + .getInteger( + com.android.internal.R.integer + .config_doubleTapPowerGestureMultiTargetDefaultAction)) == DOUBLE_TAP_POWER_BUTTON_CAMERA_LAUNCH_VALUE; } diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerForCameraPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerForCameraPreferenceControllerTest.java index cc710ec29e6..1647a9c1862 100644 --- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerForCameraPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerForCameraPreferenceControllerTest.java @@ -16,6 +16,9 @@ package com.android.settings.gestures; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_DISABLED_MODE; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_MULTI_TARGET_MODE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; @@ -72,7 +75,8 @@ public class DoubleTapPowerForCameraPreferenceControllerTest { @Test public void getAvailabilityStatus_setDoubleTapPowerGestureNotAvailable_preferenceUnsupported() { - when(mResources.getBoolean(R.bool.config_doubleTapPowerGestureEnabled)).thenReturn(false); + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMode)).thenReturn( + DOUBLE_TAP_POWER_DISABLED_MODE); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE); @@ -80,7 +84,8 @@ public class DoubleTapPowerForCameraPreferenceControllerTest { @Test public void getAvailabilityStatus_setDoubleTapPowerButtonDisabled_preferenceDisabled() { - when(mResources.getBoolean(R.bool.config_doubleTapPowerGestureEnabled)).thenReturn(true); + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMode)).thenReturn( + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); DoubleTapPowerSettingsUtils.setDoubleTapPowerButtonGestureEnabled(mContext, false); assertThat(mController.getAvailabilityStatus()) @@ -89,7 +94,8 @@ public class DoubleTapPowerForCameraPreferenceControllerTest { @Test public void getAvailabilityStatus_setDoubleTapPowerCameraLaunchEnabled_preferenceEnabled() { - when(mResources.getBoolean(R.bool.config_doubleTapPowerGestureEnabled)).thenReturn(true); + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMode)).thenReturn( + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); DoubleTapPowerSettingsUtils.setDoubleTapPowerButtonGestureEnabled(mContext, true); assertThat(mController.getAvailabilityStatus()) diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerForWalletPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerForWalletPreferenceControllerTest.java index c86a82edd0d..60b35102d99 100644 --- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerForWalletPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerForWalletPreferenceControllerTest.java @@ -16,6 +16,9 @@ package com.android.settings.gestures; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_DISABLED_MODE; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_MULTI_TARGET_MODE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; @@ -74,7 +77,8 @@ public class DoubleTapPowerForWalletPreferenceControllerTest { @Test public void getAvailabilityStatus_setDoubleTapPowerGestureNotAvailable_preferenceUnsupported() { - when(mResources.getBoolean(R.bool.config_doubleTapPowerGestureEnabled)).thenReturn(false); + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMode)).thenReturn( + DOUBLE_TAP_POWER_DISABLED_MODE); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE); @@ -82,7 +86,8 @@ public class DoubleTapPowerForWalletPreferenceControllerTest { @Test public void getAvailabilityStatus_setDoubleTapPowerButtonDisabled_preferenceDisabled() { - when(mResources.getBoolean(R.bool.config_doubleTapPowerGestureEnabled)).thenReturn(true); + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMode)).thenReturn( + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); DoubleTapPowerSettingsUtils.setDoubleTapPowerButtonGestureEnabled(mContext, false); assertThat(mController.getAvailabilityStatus()) @@ -91,7 +96,8 @@ public class DoubleTapPowerForWalletPreferenceControllerTest { @Test public void getAvailabilityStatus_setDoubleTapPowerWalletLaunchEnabled_preferenceEnabled() { - when(mResources.getBoolean(R.bool.config_doubleTapPowerGestureEnabled)).thenReturn(true); + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMode)).thenReturn( + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); DoubleTapPowerSettingsUtils.setDoubleTapPowerButtonGestureEnabled(mContext, true); assertThat(mController.getAvailabilityStatus()) diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerMainSwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerMainSwitchPreferenceControllerTest.java index 502e52ec6c3..5d9656c466b 100644 --- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerMainSwitchPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerMainSwitchPreferenceControllerTest.java @@ -16,6 +16,9 @@ package com.android.settings.gestures; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_DISABLED_MODE; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_MULTI_TARGET_MODE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; @@ -54,7 +57,8 @@ public class DoubleTapPowerMainSwitchPreferenceControllerTest { @Test public void getAvailabilityStatus_setDoubleTapPowerGestureAvailable_preferenceEnabled() { - when(mResources.getBoolean(R.bool.config_doubleTapPowerGestureEnabled)).thenReturn(true); + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMode)).thenReturn( + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.AVAILABLE); @@ -62,7 +66,8 @@ public class DoubleTapPowerMainSwitchPreferenceControllerTest { @Test public void getAvailabilityStatus_setDoubleTapPowerGestureUnavailable_preferenceUnsupported() { - when(mResources.getBoolean(R.bool.config_doubleTapPowerGestureEnabled)).thenReturn(false); + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMode)).thenReturn( + DOUBLE_TAP_POWER_DISABLED_MODE); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE); diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java index 17b03f355bf..b2ff5a65b59 100644 --- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java @@ -20,6 +20,9 @@ import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_D import static android.provider.Settings.Secure.DOUBLE_TAP_POWER_BUTTON_GESTURE_ENABLED; import static com.android.settings.gestures.DoubleTapPowerPreferenceController.isSuggestionComplete; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_DISABLED_MODE; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_LAUNCH_CAMERA_MODE; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_MULTI_TARGET_MODE; import static com.android.settings.gestures.DoubleTapPowerToOpenCameraPreferenceController.OFF; import static com.android.settings.gestures.DoubleTapPowerToOpenCameraPreferenceController.ON; @@ -58,7 +61,8 @@ import org.robolectric.annotation.Config; @Config(shadows = SettingsShadowResources.class) public class DoubleTapPowerPreferenceControllerTest { - @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); + @Rule + public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private Context mContext; private ContentResolver mContentResolver; private DoubleTapPowerPreferenceController mController; @@ -83,18 +87,30 @@ public class DoubleTapPowerPreferenceControllerTest { @Test @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) - public void isAvailable_flagEnabled_configIsTrue_returnsTrue() { + public void isAvailable_flagEnabled_configIsMultiTargetMode_returnsTrue() { SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_doubleTapPowerGestureEnabled, Boolean.TRUE); + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); assertThat(mController.isAvailable()).isTrue(); } @Test @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) - public void isAvailable_flagEnabled_configIsFalse_returnsFalse() { + public void isAvailable_flagEnabled_configIsCameraLaunchMode_returnsTrue() { SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_doubleTapPowerGestureEnabled, Boolean.FALSE); + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_LAUNCH_CAMERA_MODE); + + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) + public void isAvailable_flagEnabled_configIsDisabledMode_returnsFalse() { + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_DISABLED_MODE); assertThat(mController.isAvailable()).isFalse(); } @@ -121,18 +137,20 @@ public class DoubleTapPowerPreferenceControllerTest { @Test @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) - public void isSuggestionCompleted_enableFlag_doubleTapPower_trueWhenNotAvailable() { + public void isSuggestionCompleted_flagEnabled_configIsMultiTargetMode_trueWhenNotAvailable() { SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_doubleTapPowerGestureEnabled, false); + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_DISABLED_MODE); assertThat(isSuggestionComplete(mContext, null /* prefs */)).isTrue(); } @Test @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) - public void isSuggestionCompleted_enableFlag_doubleTapPower_falseWhenNotVisited() { + public void isSuggestionCompleted_enableFlag_configIsMultiTargetMode_falseWhenNotVisited() { SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_doubleTapPowerGestureEnabled, true); + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); // No stored value in shared preferences if not visited yet. final SharedPreferences prefs = new SuggestionFeatureProviderImpl().getSharedPrefs(mContext); @@ -142,9 +160,10 @@ public class DoubleTapPowerPreferenceControllerTest { @Test @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) - public void isSuggestionCompleted_enableFlag_doubleTapPower_trueWhenVisited() { + public void isSuggestionCompleted_enableFlag_configIsMultiTargetMode_trueWhenVisited() { SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_doubleTapPowerGestureEnabled, true); + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); // No stored value in shared preferences if not visited yet. final SharedPreferences prefs = new SuggestionFeatureProviderImpl().getSharedPrefs(mContext); @@ -189,13 +208,30 @@ public class DoubleTapPowerPreferenceControllerTest { @Test @DisableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) - public void displayPreference_flagDisabled_doubleTapPowerLegacyTitleIsDisplayed() { + public void displayPreference_flagDisabled_cameraLaunchTitleIsDisplayed() { mController.displayPreference(mScreen); assertThat( - TextUtils.equals( - mPreference.getTitle(), - mContext.getText(R.string.double_tap_power_for_camera_title))) + TextUtils.equals( + mPreference.getTitle(), + mContext.getText(R.string.double_tap_power_for_camera_title))) + .isTrue(); + } + + @Test + @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) + public void + displayPreference_flagEnabled_configIsCameraLaunchMode_cameraLaunchTitleIsDisplayed() { + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_LAUNCH_CAMERA_MODE); + + mController.displayPreference(mScreen); + + assertThat( + TextUtils.equals( + mPreference.getTitle(), + mContext.getText(R.string.double_tap_power_for_camera_title))) .isTrue(); } @@ -206,9 +242,9 @@ public class DoubleTapPowerPreferenceControllerTest { Settings.Secure.putInt(mContentResolver, CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, ON); assertThat( - TextUtils.equals( - mController.getSummary(), - mContext.getText(R.string.gesture_setting_on))) + TextUtils.equals( + mController.getSummary(), + mContext.getText(R.string.gesture_setting_on))) .isTrue(); } @@ -219,9 +255,42 @@ public class DoubleTapPowerPreferenceControllerTest { Settings.Secure.putInt(mContentResolver, CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, OFF); assertThat( - TextUtils.equals( - mController.getSummary(), - mContext.getText(R.string.gesture_setting_off))) + TextUtils.equals( + mController.getSummary(), + mContext.getText(R.string.gesture_setting_off))) + .isTrue(); + } + + @Test + @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) + public void getSummary_flagEnabled_doubleTapPowerEnabled_configIsCameraLaunchMode_returnsOn() { + // Set the setting to be enabled. + Settings.Secure.putInt(mContentResolver, CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, ON); + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_LAUNCH_CAMERA_MODE); + + assertThat( + TextUtils.equals( + mController.getSummary(), + mContext.getText(R.string.gesture_setting_on))) + .isTrue(); + } + + @Test + @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) + public void + getSummary_flagEnabled_doubleTapPowerDisabled_configIsCameraLaunchMode_returnsOff() { + // Set the setting to be disabled. + Settings.Secure.putInt(mContentResolver, CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, OFF); + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_LAUNCH_CAMERA_MODE); + + assertThat( + TextUtils.equals( + mController.getSummary(), + mContext.getText(R.string.gesture_setting_off))) .isTrue(); } @@ -233,9 +302,9 @@ public class DoubleTapPowerPreferenceControllerTest { mContentResolver, DOUBLE_TAP_POWER_BUTTON_GESTURE_ENABLED, 0 /* OFF */); assertThat( - TextUtils.equals( - mController.getSummary(), - mContext.getText(R.string.gesture_setting_off))) + TextUtils.equals( + mController.getSummary(), + mContext.getText(R.string.gesture_setting_off))) .isTrue(); } @@ -248,13 +317,13 @@ public class DoubleTapPowerPreferenceControllerTest { DoubleTapPowerSettingsUtils.setDoubleTapPowerButtonForCameraLaunch(mContext); assertThat( - TextUtils.equals( - mController.getSummary(), - mContext.getString( - R.string.double_tap_power_summary, - mContext.getText(R.string.gesture_setting_on), - mContext.getText( - R.string.double_tap_power_camera_action_summary)))) + TextUtils.equals( + mController.getSummary(), + mContext.getString( + R.string.double_tap_power_summary, + mContext.getText(R.string.gesture_setting_on), + mContext.getText( + R.string.double_tap_power_camera_action_summary)))) .isTrue(); } @@ -267,13 +336,13 @@ public class DoubleTapPowerPreferenceControllerTest { DoubleTapPowerSettingsUtils.setDoubleTapPowerButtonForWalletLaunch(mContext); assertThat( - TextUtils.equals( - mController.getSummary(), - mContext.getString( - R.string.double_tap_power_summary, - mContext.getText(R.string.gesture_setting_on), - mContext.getText( - R.string.double_tap_power_wallet_action_summary)))) + TextUtils.equals( + mController.getSummary(), + mContext.getString( + R.string.double_tap_power_summary, + mContext.getText(R.string.gesture_setting_on), + mContext.getText( + R.string.double_tap_power_wallet_action_summary)))) .isTrue(); } } diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerSettingsTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerSettingsTest.java index 7d4f52e67a2..40c13806fd6 100644 --- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerSettingsTest.java +++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerSettingsTest.java @@ -16,6 +16,9 @@ package com.android.settings.gestures; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_LAUNCH_CAMERA_MODE; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_MULTI_TARGET_MODE; + import static com.google.common.truth.Truth.assertThat; import android.platform.test.annotations.DisableFlags; @@ -25,6 +28,7 @@ import android.provider.SearchIndexableResource; import android.service.quickaccesswallet.Flags; import com.android.settings.R; +import com.android.settings.testutils.shadow.SettingsShadowResources; import org.junit.Before; import org.junit.Rule; @@ -32,13 +36,16 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; import java.util.List; +@Config(shadows = SettingsShadowResources.class) @RunWith(RobolectricTestRunner.class) public class DoubleTapPowerSettingsTest { - @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); + @Rule + public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private DoubleTapPowerSettings mSettings; @Before @@ -48,10 +55,29 @@ public class DoubleTapPowerSettingsTest { @Test @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) - public void getPreferenceScreenResId_flagEnabled_returnsFlagEnabledResId() { + public void + getPreferenceScreenResId_flagEnabled_configIsMultiTargetMode_returnsMultiTargetResId() { + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); + mSettings.onAttach(RuntimeEnvironment.getApplication()); + assertThat(mSettings.getPreferenceScreenResId()).isEqualTo(R.xml.double_tap_power_settings); } + @Test + @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) + public void + getPreferenceScreenResId_flagEnabled_configIsCameraMode_returnsCameraLaunchResId() { + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_LAUNCH_CAMERA_MODE); + mSettings.onAttach(RuntimeEnvironment.getApplication()); + + assertThat(mSettings.getPreferenceScreenResId()).isEqualTo( + R.xml.double_tap_power_to_open_camera_settings); + } + @Test @DisableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) public void getPreferenceScreenResId_flagDisabled_returnsFlagDisabledResId() { @@ -61,7 +87,12 @@ public class DoubleTapPowerSettingsTest { @Test @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) - public void testSearchIndexProvider_flagEnabled_shouldIndexFlagEnabledResource() { + public void + testSearchIndexProvider_flagEnabled_configIsMultiTargetMode_indexMultiTargetResId() { + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); + final List indexRes = DoubleTapPowerSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex( RuntimeEnvironment.getApplication(), true /* enabled */); @@ -70,9 +101,26 @@ public class DoubleTapPowerSettingsTest { assertThat(indexRes.get(0).xmlResId).isEqualTo(R.xml.double_tap_power_settings); } + @Test + @EnableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) + public void + testSearchIndexProvider_flagEnabled_configIsCameraLaunchMode_indexCameraLaunchResId() { + SettingsShadowResources.overrideResource( + com.android.internal.R.integer.config_doubleTapPowerGestureMode, + DOUBLE_TAP_POWER_LAUNCH_CAMERA_MODE); + + final List indexRes = + DoubleTapPowerSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex( + RuntimeEnvironment.getApplication(), true /* enabled */); + + assertThat(indexRes).isNotNull(); + assertThat(indexRes.get(0).xmlResId).isEqualTo( + R.xml.double_tap_power_to_open_camera_settings); + } + @Test @DisableFlags(Flags.FLAG_LAUNCH_WALLET_OPTION_ON_POWER_DOUBLE_TAP) - public void testSearchIndexProvider_flagDisabled_shouldIndexFlagDisabledResource() { + public void testSearchIndexProvider_flagDisabled_indexFlagDisabledResource() { final List indexRes = DoubleTapPowerSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex( RuntimeEnvironment.getApplication(), true /* enabled */); diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerSettingsUtilsTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerSettingsUtilsTest.java index 817f198a5b2..401a848ed0c 100644 --- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerSettingsUtilsTest.java +++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerSettingsUtilsTest.java @@ -16,6 +16,8 @@ package com.android.settings.gestures; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_DISABLED_MODE; +import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.DOUBLE_TAP_POWER_MULTI_TARGET_MODE; import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.OFF; import static com.android.settings.gestures.DoubleTapPowerSettingsUtils.ON; @@ -55,18 +57,22 @@ public class DoubleTapPowerSettingsUtilsTest { } @Test - public void isDoubleTapPowerButtonGestureAvailable_setAvailable_returnsTrue() { - when(mResources.getBoolean(R.bool.config_doubleTapPowerGestureEnabled)).thenReturn(true); + public void isMultiTargetDoubleTapPowerButtonGestureAvailable_setAvailable_returnsTrue() { + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMode)).thenReturn( + DOUBLE_TAP_POWER_MULTI_TARGET_MODE); - assertThat(DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureAvailable(mContext)) + assertThat(DoubleTapPowerSettingsUtils.isMultiTargetDoubleTapPowerButtonGestureAvailable( + mContext)) .isTrue(); } @Test - public void isDoubleTapPowerButtonGestureAvailable_setUnavailable_returnsFalse() { - when(mResources.getBoolean(R.bool.config_doubleTapPowerGestureEnabled)).thenReturn(false); + public void isMultiTargetDoubleTapPowerButtonGestureAvailable_setUnavailable_returnsFalse() { + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMode)).thenReturn( + DOUBLE_TAP_POWER_DISABLED_MODE); - assertThat(DoubleTapPowerSettingsUtils.isDoubleTapPowerButtonGestureAvailable(mContext)) + assertThat(DoubleTapPowerSettingsUtils.isMultiTargetDoubleTapPowerButtonGestureAvailable( + mContext)) .isFalse(); } @@ -103,10 +109,10 @@ public class DoubleTapPowerSettingsUtilsTest { DoubleTapPowerSettingsUtils.setDoubleTapPowerButtonGestureEnabled(mContext, true); assertThat( - Settings.Secure.getInt( - mContext.getContentResolver(), - Settings.Secure.DOUBLE_TAP_POWER_BUTTON_GESTURE_ENABLED, - OFF)) + Settings.Secure.getInt( + mContext.getContentResolver(), + Settings.Secure.DOUBLE_TAP_POWER_BUTTON_GESTURE_ENABLED, + OFF)) .isEqualTo(ON); } @@ -115,10 +121,10 @@ public class DoubleTapPowerSettingsUtilsTest { DoubleTapPowerSettingsUtils.setDoubleTapPowerButtonGestureEnabled(mContext, false); assertThat( - Settings.Secure.getInt( - mContext.getContentResolver(), - Settings.Secure.DOUBLE_TAP_POWER_BUTTON_GESTURE_ENABLED, - ON)) + Settings.Secure.getInt( + mContext.getContentResolver(), + Settings.Secure.DOUBLE_TAP_POWER_BUTTON_GESTURE_ENABLED, + ON)) .isEqualTo(OFF); } @@ -130,8 +136,8 @@ public class DoubleTapPowerSettingsUtilsTest { DOUBLE_TAP_POWER_BUTTON_CAMERA_LAUNCH_VALUE); assertThat( - DoubleTapPowerSettingsUtils - .isDoubleTapPowerButtonGestureForCameraLaunchEnabled(mContext)) + DoubleTapPowerSettingsUtils + .isDoubleTapPowerButtonGestureForCameraLaunchEnabled(mContext)) .isTrue(); } @@ -144,32 +150,32 @@ public class DoubleTapPowerSettingsUtilsTest { DOUBLE_TAP_POWER_BUTTON_WALLET_LAUNCH_VALUE); assertThat( - DoubleTapPowerSettingsUtils - .isDoubleTapPowerButtonGestureForCameraLaunchEnabled(mContext)) + DoubleTapPowerSettingsUtils + .isDoubleTapPowerButtonGestureForCameraLaunchEnabled(mContext)) .isFalse(); } @Test public void isDoubleTapPowerButtonGestureForCameraLaunchEnabled_defaultSetToCamera_returnsTrue() { - when(mResources.getInteger(R.integer.config_defaultDoubleTapPowerGestureAction)) + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMultiTargetDefaultAction)) .thenReturn(DOUBLE_TAP_POWER_BUTTON_CAMERA_LAUNCH_VALUE); assertThat( - DoubleTapPowerSettingsUtils - .isDoubleTapPowerButtonGestureForCameraLaunchEnabled(mContext)) + DoubleTapPowerSettingsUtils + .isDoubleTapPowerButtonGestureForCameraLaunchEnabled(mContext)) .isTrue(); } @Test public void isDoubleTapPowerButtonGestureForCameraLaunchEnabled_defaultNotCamera_returnsFalse() { - when(mResources.getInteger(R.integer.config_defaultDoubleTapPowerGestureAction)) + when(mResources.getInteger(R.integer.config_doubleTapPowerGestureMultiTargetDefaultAction)) .thenReturn(DOUBLE_TAP_POWER_BUTTON_WALLET_LAUNCH_VALUE); assertThat( - DoubleTapPowerSettingsUtils - .isDoubleTapPowerButtonGestureForCameraLaunchEnabled(mContext)) + DoubleTapPowerSettingsUtils + .isDoubleTapPowerButtonGestureForCameraLaunchEnabled(mContext)) .isFalse(); } @@ -180,10 +186,10 @@ public class DoubleTapPowerSettingsUtilsTest { assertThat(result).isTrue(); assertThat( - Settings.Secure.getInt( - mContext.getContentResolver(), - Settings.Secure.DOUBLE_TAP_POWER_BUTTON_GESTURE, - DOUBLE_TAP_POWER_BUTTON_WALLET_LAUNCH_VALUE)) + Settings.Secure.getInt( + mContext.getContentResolver(), + Settings.Secure.DOUBLE_TAP_POWER_BUTTON_GESTURE, + DOUBLE_TAP_POWER_BUTTON_WALLET_LAUNCH_VALUE)) .isEqualTo(DOUBLE_TAP_POWER_BUTTON_CAMERA_LAUNCH_VALUE); } @@ -194,10 +200,10 @@ public class DoubleTapPowerSettingsUtilsTest { assertThat(result).isTrue(); assertThat( - Settings.Secure.getInt( - mContext.getContentResolver(), - Settings.Secure.DOUBLE_TAP_POWER_BUTTON_GESTURE, - DOUBLE_TAP_POWER_BUTTON_CAMERA_LAUNCH_VALUE)) + Settings.Secure.getInt( + mContext.getContentResolver(), + Settings.Secure.DOUBLE_TAP_POWER_BUTTON_GESTURE, + DOUBLE_TAP_POWER_BUTTON_CAMERA_LAUNCH_VALUE)) .isEqualTo(DOUBLE_TAP_POWER_BUTTON_WALLET_LAUNCH_VALUE); } }