Power + Volume up key chord can now be configured.
Device default value set in config_keyChordPowerVolumeUp in
config.xml; can be overridden for all users with
Settings.Global.KEY_CHORD_POWER_VOLUME_UP.
Value may be one of:
0 - no-op
1 - vibrate mode (current AOSP default behavior)
2 - launch assistant
Bug: 179673796
Test: adb shell settings put global key_chord_volume_up <0, 1, or 2>
adb shell dumpsys window | grep mPowerVolUpBehavior
adb shell input keycombination POWER VOLUME_UP
Change-Id: I0e03155bdbe61d9fdd6838fe2c860749cf360907
This commit is contained in:
@@ -14702,6 +14702,15 @@ public final class Settings {
|
||||
public static final String POWER_BUTTON_VERY_LONG_PRESS =
|
||||
"power_button_very_long_press";
|
||||
|
||||
/**
|
||||
* Overrides internal R.integer.config_keyChordPowerVolumeUp.
|
||||
* Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
|
||||
* Used by PhoneWindowManager.
|
||||
* @hide
|
||||
*/
|
||||
@Readable
|
||||
public static final String KEY_CHORD_POWER_VOLUME_UP =
|
||||
"key_chord_power_volume_up";
|
||||
|
||||
/**
|
||||
* Keyguard should be on the left hand side of the screen, for wide screen layouts.
|
||||
|
||||
@@ -960,6 +960,13 @@
|
||||
-->
|
||||
<integer name="config_veryLongPressOnPowerBehavior">0</integer>
|
||||
|
||||
<!-- Control the behavior when the user presses the power and volume up buttons together.
|
||||
0 - Nothing
|
||||
1 - Mute toggle
|
||||
2 - Global actions menu
|
||||
-->
|
||||
<integer name="config_keyChordPowerVolumeUp">1</integer>
|
||||
|
||||
<!-- Control the behavior when the user long presses the back button. Non-zero values are only
|
||||
valid for watches as part of CDD/CTS.
|
||||
0 - Nothing
|
||||
|
||||
@@ -436,6 +436,7 @@
|
||||
<java-symbol type="integer" name="config_veryLongPressTimeout" />
|
||||
<java-symbol type="integer" name="config_longPressOnBackBehavior" />
|
||||
<java-symbol type="bool" name="config_allowStartActivityForLongPressOnPowerInSetup" />
|
||||
<java-symbol type="integer" name="config_keyChordPowerVolumeUp" />
|
||||
<java-symbol type="integer" name="config_wakeUpToLastStateTimeoutMillis" />
|
||||
<java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAdjust" />
|
||||
<java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAbsolute" />
|
||||
|
||||
@@ -127,6 +127,7 @@ public class GlobalSettingsValidators {
|
||||
VALIDATORS.put(Global.POWER_BUTTON_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 5));
|
||||
VALIDATORS.put(
|
||||
Global.POWER_BUTTON_VERY_LONG_PRESS, new InclusiveIntegerRangeValidator(0, 1));
|
||||
VALIDATORS.put(Global.KEY_CHORD_POWER_VOLUME_UP, new InclusiveIntegerRangeValidator(0, 2));
|
||||
VALIDATORS.put(Global.NOTIFICATION_BUBBLES, BOOLEAN_VALIDATOR);
|
||||
VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_APP, ANY_STRING_VALIDATOR);
|
||||
VALIDATORS.put(Global.CUSTOM_BUGREPORT_HANDLER_USER, ANY_INTEGER_VALIDATOR);
|
||||
|
||||
@@ -593,6 +593,7 @@ public class SettingsBackupTest {
|
||||
Settings.Global.INTEGRITY_CHECK_INCLUDES_RULE_PROVIDER,
|
||||
Settings.Global.CACHED_APPS_FREEZER_ENABLED,
|
||||
Settings.Global.APP_INTEGRITY_VERIFICATION_TIMEOUT,
|
||||
Settings.Global.KEY_CHORD_POWER_VOLUME_UP,
|
||||
Settings.Global.ADVANCED_BATTERY_USAGE_AMOUNT);
|
||||
|
||||
private static final Set<String> BACKUP_DENY_LIST_SECURE_SETTINGS =
|
||||
|
||||
@@ -273,6 +273,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
static final int VERY_LONG_PRESS_POWER_NOTHING = 0;
|
||||
static final int VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
|
||||
|
||||
// must match: config_keyChordPowerVolumeUp in config.xml
|
||||
static final int POWER_VOLUME_UP_BEHAVIOR_NOTHING = 0;
|
||||
static final int POWER_VOLUME_UP_BEHAVIOR_MUTE = 1;
|
||||
static final int POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS = 2;
|
||||
|
||||
// must match: config_doublePressOnPowerBehavior in config.xml
|
||||
static final int MULTI_PRESS_POWER_NOTHING = 0;
|
||||
static final int MULTI_PRESS_POWER_THEATER_MODE = 1;
|
||||
@@ -488,6 +493,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
int mLongPressOnBackBehavior;
|
||||
int mShortPressOnSleepBehavior;
|
||||
int mShortPressOnWindowBehavior;
|
||||
int mPowerVolUpBehavior;
|
||||
boolean mHasSoftInput = false;
|
||||
boolean mHapticTextHandleEnabled;
|
||||
boolean mUseTvRouting;
|
||||
@@ -727,6 +733,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
resolver.registerContentObserver(Settings.Global.getUriFor(
|
||||
Settings.Global.POWER_BUTTON_VERY_LONG_PRESS), false, this,
|
||||
UserHandle.USER_ALL);
|
||||
resolver.registerContentObserver(Settings.Global.getUriFor(
|
||||
Settings.Global.KEY_CHORD_POWER_VOLUME_UP), false, this,
|
||||
UserHandle.USER_ALL);
|
||||
resolver.registerContentObserver(Settings.Global.getUriFor(
|
||||
Settings.Global.POWER_BUTTON_SUPPRESSION_DELAY_AFTER_GESTURE_WAKE), false, this,
|
||||
UserHandle.USER_ALL);
|
||||
@@ -1267,6 +1276,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
mPowerManager.userActivity(SystemClock.uptimeMillis(), false);
|
||||
}
|
||||
|
||||
private void cancelGlobalActionsAction() {
|
||||
mHandler.removeMessages(MSG_DISPATCH_SHOW_GLOBAL_ACTIONS);
|
||||
}
|
||||
|
||||
boolean isDeviceProvisioned() {
|
||||
return Settings.Global.getInt(
|
||||
mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0) != 0;
|
||||
@@ -1835,20 +1848,48 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
}
|
||||
});
|
||||
|
||||
// Volume up + power can either be the "ringer toggle chord" or as another way to
|
||||
// launch GlobalActions. This behavior can change at runtime so we must check behavior
|
||||
// inside the TwoKeysCombinationRule.
|
||||
mKeyCombinationManager.addRule(
|
||||
new TwoKeysCombinationRule(KEYCODE_VOLUME_UP, KEYCODE_POWER) {
|
||||
@Override
|
||||
boolean preCondition() {
|
||||
return mRingerToggleChord != VOLUME_HUSH_OFF;
|
||||
switch (mPowerVolUpBehavior) {
|
||||
case POWER_VOLUME_UP_BEHAVIOR_MUTE:
|
||||
return mRingerToggleChord != VOLUME_HUSH_OFF;
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
void execute() {
|
||||
mPowerKeyHandled = true;
|
||||
interceptRingerToggleChord();
|
||||
switch (mPowerVolUpBehavior) {
|
||||
case POWER_VOLUME_UP_BEHAVIOR_MUTE:
|
||||
// no haptic feedback here since
|
||||
interceptRingerToggleChord();
|
||||
mPowerKeyHandled = true;
|
||||
break;
|
||||
case POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS:
|
||||
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
|
||||
"Power + Volume Up - Global Actions");
|
||||
showGlobalActions();
|
||||
mPowerKeyHandled = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
void cancel() {
|
||||
cancelPendingRingerToggleChordAction();
|
||||
switch (mPowerVolUpBehavior) {
|
||||
case POWER_VOLUME_UP_BEHAVIOR_MUTE:
|
||||
cancelPendingRingerToggleChordAction();
|
||||
break;
|
||||
case POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS:
|
||||
cancelGlobalActionsAction();
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -2054,6 +2095,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
Settings.Global.POWER_BUTTON_VERY_LONG_PRESS,
|
||||
mContext.getResources().getInteger(
|
||||
com.android.internal.R.integer.config_veryLongPressOnPowerBehavior));
|
||||
mPowerVolUpBehavior = Settings.Global.getInt(resolver,
|
||||
Settings.Global.KEY_CHORD_POWER_VOLUME_UP,
|
||||
mContext.getResources().getInteger(
|
||||
com.android.internal.R.integer.config_keyChordPowerVolumeUp));
|
||||
}
|
||||
if (updateRotation) {
|
||||
updateRotation(true);
|
||||
@@ -5204,6 +5249,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
pw.print(prefix);
|
||||
pw.print("mTriplePressOnPowerBehavior=");
|
||||
pw.println(multiPressOnPowerBehaviorToString(mTriplePressOnPowerBehavior));
|
||||
pw.print(prefix);
|
||||
pw.print("mPowerVolUpBehavior=");
|
||||
pw.println(powerVolumeUpBehaviorToString(mPowerVolUpBehavior));
|
||||
pw.print(prefix);
|
||||
pw.print("mShortPressOnSleepBehavior=");
|
||||
pw.println(shortPressOnSleepBehaviorToString(mShortPressOnSleepBehavior));
|
||||
@@ -5378,6 +5426,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
private static String powerVolumeUpBehaviorToString(int behavior) {
|
||||
switch (behavior) {
|
||||
case POWER_VOLUME_UP_BEHAVIOR_NOTHING:
|
||||
return "POWER_VOLUME_UP_BEHAVIOR_NOTHING";
|
||||
case POWER_VOLUME_UP_BEHAVIOR_MUTE:
|
||||
return "POWER_VOLUME_UP_BEHAVIOR_MUTE";
|
||||
case POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS:
|
||||
return "POWER_VOLUME_UP_BEHAVIOR_GLOBAL_ACTIONS";
|
||||
default:
|
||||
return Integer.toString(behavior);
|
||||
}
|
||||
}
|
||||
|
||||
private static String multiPressOnPowerBehaviorToString(int behavior) {
|
||||
switch (behavior) {
|
||||
case MULTI_PRESS_POWER_NOTHING:
|
||||
|
||||
Reference in New Issue
Block a user