From fd540cbb0c06f6f6e509e953f6e3d65b8c2f81f0 Mon Sep 17 00:00:00 2001 From: Jernej Virag Date: Tue, 11 May 2021 13:25:02 +0000 Subject: [PATCH] Fix power+volume chord fallback when LPP option is disabled Not all devices will have power+volume chord enabled. Fix current wrong behaviour by falling back to mute chord behaviour only if it was set as the default option in device overlay. Bug: 187814162 Test: make RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.gestures.*" Change-Id: I15c0a71d25738b3b01a20bf22c790d9dcba5d6fd --- ...gPressPowerButtonPreferenceController.java | 21 +++++++++++++--- ...ssPowerButtonPreferenceControllerTest.java | 24 +++++++++++++++++-- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java index 7de17cfdc4d..96db2c91a42 100644 --- a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java +++ b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java @@ -76,6 +76,8 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo * frameworks/base/core/res/res/values/config.xml */ @VisibleForTesting + static final int KEY_CHORD_POWER_VOLUME_UP_NO_ACTION = 0; + @VisibleForTesting static final int KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE = 1; @VisibleForTesting static final int KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS = 2; @@ -89,6 +91,9 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo private static final int POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE = R.integer.config_longPressOnPowerBehavior; + private static final int KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE = + R.integer.config_keyChordPowerVolumeUp; + @Nullable private SettingObserver mSettingsObserver; @@ -177,10 +182,20 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo * should show the power menu. */ private boolean setPowerVolumeChordValue(boolean isPowerButtonLongPressChecked) { + if (isPowerButtonLongPressChecked) { + return Settings.Global.putInt(mContext.getContentResolver(), + KEY_CHORD_POWER_VOLUME_UP_SETTING, KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS); + } + + // If the key chord defaults to mute toggle, we restore that setting if LPP option is + // disabled. Otherwise we default to no action. + boolean isMuteToggleKeyChordDefault = mContext.getResources().getInteger( + KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE) + == KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE; return Settings.Global.putInt(mContext.getContentResolver(), - KEY_CHORD_POWER_VOLUME_UP_SETTING, isPowerButtonLongPressChecked - ? KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS - : KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE); + KEY_CHORD_POWER_VOLUME_UP_SETTING, isMuteToggleKeyChordDefault + ? KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE + : KEY_CHORD_POWER_VOLUME_UP_NO_ACTION); } /** diff --git a/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java index c2cdf4f64b4..085e53d232e 100644 --- a/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java @@ -93,6 +93,25 @@ public class LongPressPowerButtonPreferenceControllerTest { com.android.internal.R.integer.config_longPressOnPowerBehavior)) .thenReturn(8); + mController.onPreferenceChange(null, false); + assertThat(Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(8); + assertThat(Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo( + LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION); + } + + @Test + public void preferenceUnchecked_muteChordDefault_longPressPowerSettingSetToDefaultValue() { + // Value out of range chosen deliberately. + when(mResources.getInteger( + com.android.internal.R.integer.config_longPressOnPowerBehavior)) + .thenReturn(8); + when(mResources.getInteger( + com.android.internal.R.integer.config_keyChordPowerVolumeUp)) + .thenReturn( + LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE); + mController.onPreferenceChange(null, false); assertThat(Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(8); @@ -115,9 +134,10 @@ public class LongPressPowerButtonPreferenceControllerTest { LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_SHUT_OFF); assertThat(Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo( - LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE); + LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION); } + @Test public void preferenceUnchecked_assistDefaultGlobalActionsEnabled_setGlobalActions() { // Value out of range chosen deliberately. @@ -136,6 +156,6 @@ public class LongPressPowerButtonPreferenceControllerTest { LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_GLOBAL_ACTIONS); assertThat(Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo( - LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE); + LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION); } }