diff --git a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java index 7a456023614..7de17cfdc4d 100644 --- a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java +++ b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java @@ -46,6 +46,8 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo Settings.Global.POWER_BUTTON_LONG_PRESS; private static final Uri POWER_BUTTON_LONG_PRESS_SETTING_URI = Settings.Global.getUriFor(POWER_BUTTON_LONG_PRESS_SETTING); + private static final String KEY_CHORD_POWER_VOLUME_UP_SETTING = + Settings.Global.KEY_CHORD_POWER_VOLUME_UP; // Used for fallback to global actions if necessary. @VisibleForTesting @@ -55,7 +57,7 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo static final String CARDS_ENABLED_KEY = Settings.Secure.GLOBAL_ACTIONS_PANEL_ENABLED; /** - * Value used for long press power button behaviour when Assist setting is enabled. + * Values used for long press power button behaviour when Assist setting is enabled. * * {@link com.android.server.policy.PhoneWindowManager#LONG_PRESS_POWER_GLOBAL_ACTIONS} for * source of the value. @@ -67,6 +69,17 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo @VisibleForTesting static final int LONG_PRESS_POWER_ASSISTANT_VALUE = 5; // Settings.Secure.ASSISTANT + /** + * Values used for volume key chord behaviour when Assist setting is enabled. + * + * Values based on config_keyChordPowerVolumeUp in + * frameworks/base/core/res/res/values/config.xml + */ + @VisibleForTesting + static final int KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE = 1; + @VisibleForTesting + static final int KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS = 2; + /** * Value used for long press power button behaviour when the Assist setting is disabled. * @@ -126,6 +139,17 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo @Override public boolean setChecked(boolean isChecked) { + if (setPowerLongPressValue(isChecked)) { + // The key chord value is dependant on the long press setting and it always + // toggled in tandem. POWER_BUTTON_LONG_PRESS_SETTING is always the source + // of truth for both. + return setPowerVolumeChordValue(isChecked); + } + + return false; + } + + private boolean setPowerLongPressValue(boolean isChecked) { if (isChecked) { return Settings.Global.putInt(mContext.getContentResolver(), POWER_BUTTON_LONG_PRESS_SETTING, LONG_PRESS_POWER_ASSISTANT_VALUE); @@ -147,6 +171,18 @@ public class LongPressPowerButtonPreferenceController extends TogglePreferenceCo POWER_BUTTON_LONG_PRESS_SETTING, defaultPowerButtonValue); } + /** + * Updates {@link Settings.Global.KEY_CHORD_POWER_VOLUME_UP} based on the changed value of + * {@link #POWER_BUTTON_LONG_PRESS_SETTING}. If power button is used for Assist, key chord + * should show the power menu. + */ + private boolean setPowerVolumeChordValue(boolean isPowerButtonLongPressChecked) { + 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); + } + /** * Returns true if the global actions menu on power button click is enabled via any of the * content options. diff --git a/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java index de58c994fb4..c2cdf4f64b4 100644 --- a/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java @@ -81,6 +81,9 @@ public class LongPressPowerButtonPreferenceControllerTest { assertThat(Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo( LongPressPowerButtonPreferenceController.LONG_PRESS_POWER_ASSISTANT_VALUE); + assertThat(Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo( + LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS); } @Test @@ -93,6 +96,9 @@ public class LongPressPowerButtonPreferenceControllerTest { 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_MUTE_TOGGLE); } @Test @@ -107,6 +113,9 @@ public class LongPressPowerButtonPreferenceControllerTest { assertThat(Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo( 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); } @Test @@ -125,5 +134,8 @@ public class LongPressPowerButtonPreferenceControllerTest { assertThat(Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo( 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); } }