Merge "Power key behavior tweaks." into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
2c570c179a
@@ -13569,6 +13569,28 @@ public final class Settings {
|
||||
|
||||
private static final Validator AWARE_ALLOWED_VALIDATOR = BOOLEAN_VALIDATOR;
|
||||
|
||||
/**
|
||||
* Overrides internal R.integer.config_longPressOnPowerBehavior.
|
||||
* Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
|
||||
* Used by PhoneWindowManager.
|
||||
* @hide
|
||||
*/
|
||||
public static final String POWER_BUTTON_LONG_PRESS =
|
||||
"power_button_long_press";
|
||||
private static final Validator POWER_BUTTON_LONG_PRESS_VALIDATOR =
|
||||
new SettingsValidators.InclusiveIntegerRangeValidator(0, 5);
|
||||
|
||||
/**
|
||||
* Overrides internal R.integer.config_veryLongPressOnPowerBehavior.
|
||||
* Allowable values detailed in frameworks/base/core/res/res/values/config.xml.
|
||||
* Used by PhoneWindowManager.
|
||||
* @hide
|
||||
*/
|
||||
public static final String POWER_BUTTON_VERY_LONG_PRESS =
|
||||
"power_button_very_long_press";
|
||||
private static final Validator POWER_BUTTON_VERY_LONG_PRESS_VALIDATOR =
|
||||
new SettingsValidators.InclusiveIntegerRangeValidator(0, 1);
|
||||
|
||||
/**
|
||||
* Settings to backup. This is here so that it's in the same place as the settings
|
||||
* keys and easy to update.
|
||||
@@ -13682,6 +13704,8 @@ public final class Settings {
|
||||
WIFI_PNO_RECENCY_SORTING_ENABLED_VALIDATOR);
|
||||
VALIDATORS.put(WIFI_LINK_PROBING_ENABLED, WIFI_LINK_PROBING_ENABLED_VALIDATOR);
|
||||
VALIDATORS.put(AWARE_ALLOWED, AWARE_ALLOWED_VALIDATOR);
|
||||
VALIDATORS.put(POWER_BUTTON_LONG_PRESS, POWER_BUTTON_LONG_PRESS_VALIDATOR);
|
||||
VALIDATORS.put(POWER_BUTTON_VERY_LONG_PRESS, POWER_BUTTON_VERY_LONG_PRESS_VALIDATOR);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -14687,6 +14711,7 @@ public final class Settings {
|
||||
*/
|
||||
public static final String TEXT_CLASSIFIER_ACTION_MODEL_PARAMS =
|
||||
"text_classifier_action_model_params";
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1098,6 +1098,7 @@
|
||||
2 - Power off (with confirmation)
|
||||
3 - Power off (without confirmation)
|
||||
4 - Go to voice assist
|
||||
5 - Go to assistant (Settings.Secure.ASSISTANT)
|
||||
-->
|
||||
<integer name="config_longPressOnPowerBehavior">1</integer>
|
||||
|
||||
|
||||
@@ -577,7 +577,10 @@ public class SettingsBackupTest {
|
||||
Settings.Global.RADIO_BUG_WAKELOCK_TIMEOUT_COUNT_THRESHOLD,
|
||||
Settings.Global.RADIO_BUG_SYSTEM_ERROR_COUNT_THRESHOLD,
|
||||
Settings.Global.ENABLED_SUBSCRIPTION_FOR_SLOT,
|
||||
Settings.Global.MODEM_STACK_ENABLED_FOR_SLOT);
|
||||
Settings.Global.MODEM_STACK_ENABLED_FOR_SLOT,
|
||||
Settings.Global.POWER_BUTTON_LONG_PRESS,
|
||||
Settings.Global.POWER_BUTTON_VERY_LONG_PRESS);
|
||||
|
||||
private static final Set<String> BACKUP_BLACKLISTED_SECURE_SETTINGS =
|
||||
newHashSet(
|
||||
Settings.Secure.ACCESSIBILITY_SOFT_KEYBOARD_MODE,
|
||||
|
||||
@@ -256,6 +256,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
// Whether to allow devices placed in vr headset viewers to have an alternative Home intent.
|
||||
static final boolean ENABLE_VR_HEADSET_HOME_CAPTURE = true;
|
||||
|
||||
// must match: config_shortPressOnPowerBehavior in config.xml
|
||||
static final int SHORT_PRESS_POWER_NOTHING = 0;
|
||||
static final int SHORT_PRESS_POWER_GO_TO_SLEEP = 1;
|
||||
static final int SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP = 2;
|
||||
@@ -263,29 +264,34 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
static final int SHORT_PRESS_POWER_GO_HOME = 4;
|
||||
static final int SHORT_PRESS_POWER_CLOSE_IME_OR_GO_HOME = 5;
|
||||
|
||||
// must match: config_LongPressOnPowerBehavior in config.xml
|
||||
static final int LONG_PRESS_POWER_NOTHING = 0;
|
||||
static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
|
||||
static final int LONG_PRESS_POWER_SHUT_OFF = 2;
|
||||
static final int LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM = 3;
|
||||
static final int LONG_PRESS_POWER_GO_TO_VOICE_ASSIST = 4;
|
||||
static final int LONG_PRESS_POWER_ASSISTANT = 5; // Settings.Secure.ASSISTANT
|
||||
|
||||
// must match: config_veryLongPresOnPowerBehavior in config.xml
|
||||
static final int VERY_LONG_PRESS_POWER_NOTHING = 0;
|
||||
static final int VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
|
||||
|
||||
// must match: config_doublePressOnPowerBehavior in config.xml
|
||||
static final int MULTI_PRESS_POWER_NOTHING = 0;
|
||||
static final int MULTI_PRESS_POWER_THEATER_MODE = 1;
|
||||
static final int MULTI_PRESS_POWER_BRIGHTNESS_BOOST = 2;
|
||||
|
||||
// must match: config_longPressOnBackBehavior in config.xml
|
||||
static final int LONG_PRESS_BACK_NOTHING = 0;
|
||||
static final int LONG_PRESS_BACK_GO_TO_VOICE_ASSIST = 1;
|
||||
|
||||
// These need to match the documentation/constant in
|
||||
// core/res/res/values/config.xml
|
||||
// must match: config_longPressOnHomeBehavior in config.xml
|
||||
static final int LONG_PRESS_HOME_NOTHING = 0;
|
||||
static final int LONG_PRESS_HOME_ALL_APPS = 1;
|
||||
static final int LONG_PRESS_HOME_ASSIST = 2;
|
||||
static final int LAST_LONG_PRESS_HOME_BEHAVIOR = LONG_PRESS_HOME_ASSIST;
|
||||
|
||||
// must match: config_doubleTapOnHomeBehavior in config.xml
|
||||
static final int DOUBLE_TAP_HOME_NOTHING = 0;
|
||||
static final int DOUBLE_TAP_HOME_RECENT_SYSTEM_UI = 1;
|
||||
|
||||
@@ -770,6 +776,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
resolver.registerContentObserver(Settings.Secure.getUriFor(
|
||||
Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED), false, this,
|
||||
UserHandle.USER_ALL);
|
||||
resolver.registerContentObserver(Settings.Global.getUriFor(
|
||||
Settings.Global.POWER_BUTTON_LONG_PRESS), false, this,
|
||||
UserHandle.USER_ALL);
|
||||
resolver.registerContentObserver(Settings.Global.getUriFor(
|
||||
Settings.Global.POWER_BUTTON_VERY_LONG_PRESS), false, this,
|
||||
UserHandle.USER_ALL);
|
||||
updateSettings();
|
||||
}
|
||||
|
||||
@@ -1195,38 +1207,38 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
private void powerLongPress() {
|
||||
final int behavior = getResolvedLongPressOnPowerBehavior();
|
||||
switch (behavior) {
|
||||
case LONG_PRESS_POWER_NOTHING:
|
||||
break;
|
||||
case LONG_PRESS_POWER_GLOBAL_ACTIONS:
|
||||
mPowerKeyHandled = true;
|
||||
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
|
||||
"Power - Long Press - Global Actions");
|
||||
showGlobalActionsInternal();
|
||||
break;
|
||||
case LONG_PRESS_POWER_SHUT_OFF:
|
||||
case LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM:
|
||||
mPowerKeyHandled = true;
|
||||
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
|
||||
"Power - Long Press - Shut Off");
|
||||
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
|
||||
mWindowManagerFuncs.shutdown(behavior == LONG_PRESS_POWER_SHUT_OFF);
|
||||
break;
|
||||
case LONG_PRESS_POWER_GO_TO_VOICE_ASSIST:
|
||||
mPowerKeyHandled = true;
|
||||
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
|
||||
"Power - Long Press - Go To Voice Assist");
|
||||
final boolean keyguardActive = mKeyguardDelegate == null
|
||||
? false
|
||||
: mKeyguardDelegate.isShowing();
|
||||
if (!keyguardActive) {
|
||||
Intent intent = new Intent(Intent.ACTION_VOICE_ASSIST);
|
||||
if (mAllowStartActivityForLongPressOnPowerDuringSetup) {
|
||||
mContext.startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF);
|
||||
} else {
|
||||
startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case LONG_PRESS_POWER_NOTHING:
|
||||
break;
|
||||
case LONG_PRESS_POWER_GLOBAL_ACTIONS:
|
||||
mPowerKeyHandled = true;
|
||||
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
|
||||
"Power - Long Press - Global Actions");
|
||||
showGlobalActionsInternal();
|
||||
break;
|
||||
case LONG_PRESS_POWER_SHUT_OFF:
|
||||
case LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM:
|
||||
mPowerKeyHandled = true;
|
||||
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
|
||||
"Power - Long Press - Shut Off");
|
||||
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS);
|
||||
mWindowManagerFuncs.shutdown(behavior == LONG_PRESS_POWER_SHUT_OFF);
|
||||
break;
|
||||
case LONG_PRESS_POWER_GO_TO_VOICE_ASSIST:
|
||||
mPowerKeyHandled = true;
|
||||
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
|
||||
"Power - Long Press - Go To Voice Assist");
|
||||
// Some devices allow the voice assistant intent during setup (and use that intent
|
||||
// to launch something else, like Settings). So we explicitly allow that via the
|
||||
// config_allowStartActivityForLongPressOnPowerInSetup resource in config.xml.
|
||||
launchVoiceAssist(mAllowStartActivityForLongPressOnPowerDuringSetup);
|
||||
break;
|
||||
case LONG_PRESS_POWER_ASSISTANT:
|
||||
mPowerKeyHandled = true;
|
||||
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
|
||||
"Power - Long Press - Go To Assistant");
|
||||
final int powerKeyDeviceId = Integer.MIN_VALUE;
|
||||
launchAssistAction(null, powerKeyDeviceId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1250,13 +1262,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
case LONG_PRESS_BACK_NOTHING:
|
||||
break;
|
||||
case LONG_PRESS_BACK_GO_TO_VOICE_ASSIST:
|
||||
final boolean keyguardActive = mKeyguardDelegate == null
|
||||
? false
|
||||
: mKeyguardDelegate.isShowing();
|
||||
if (!keyguardActive) {
|
||||
Intent intent = new Intent(Intent.ACTION_VOICE_ASSIST);
|
||||
startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF);
|
||||
}
|
||||
launchVoiceAssist(false /* allowDuringSetup */);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1999,6 +2005,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
mHasSoftInput = hasSoftInput;
|
||||
updateRotation = true;
|
||||
}
|
||||
|
||||
mLongPressOnPowerBehavior = Settings.Global.getInt(resolver,
|
||||
Settings.Global.POWER_BUTTON_LONG_PRESS,
|
||||
mContext.getResources().getInteger(
|
||||
com.android.internal.R.integer.config_longPressOnPowerBehavior));
|
||||
mVeryLongPressOnPowerBehavior = Settings.Global.getInt(resolver,
|
||||
Settings.Global.POWER_BUTTON_VERY_LONG_PRESS,
|
||||
mContext.getResources().getInteger(
|
||||
com.android.internal.R.integer.config_veryLongPressOnPowerBehavior));
|
||||
}
|
||||
if (updateRotation) {
|
||||
updateRotation(true);
|
||||
@@ -3225,6 +3240,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// There are several different flavors of "assistant" that can be launched from
|
||||
// various parts of the UI.
|
||||
|
||||
/** starts ACTION_SEARCH_LONG_PRESS, usually a voice search prompt */
|
||||
private void launchAssistLongPressAction() {
|
||||
performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
|
||||
"Assist - Long Press");
|
||||
@@ -3246,6 +3265,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
/** Asks the status bar to startAssist(), usually a full "assistant" interface */
|
||||
private void launchAssistAction(String hint, int deviceId) {
|
||||
sendCloseSystemWindows(SYSTEM_DIALOG_REASON_ASSIST);
|
||||
if (!isUserSetupComplete()) {
|
||||
@@ -3276,12 +3296,30 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
/** Launches ACTION_VOICE_ASSIST. Does nothing on keyguard. */
|
||||
private void launchVoiceAssist(boolean allowDuringSetup) {
|
||||
final boolean keyguardActive = mKeyguardDelegate == null
|
||||
? false
|
||||
: mKeyguardDelegate.isShowing();
|
||||
if (!keyguardActive) {
|
||||
Intent intent = new Intent(Intent.ACTION_VOICE_ASSIST);
|
||||
startActivityAsUser(intent, null, UserHandle.CURRENT_OR_SELF,
|
||||
allowDuringSetup);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void startActivityAsUser(Intent intent, UserHandle handle) {
|
||||
startActivityAsUser(intent, null, handle);
|
||||
}
|
||||
|
||||
private void startActivityAsUser(Intent intent, Bundle bundle, UserHandle handle) {
|
||||
if (isUserSetupComplete()) {
|
||||
startActivityAsUser(intent, bundle, handle, false /* allowDuringSetup */);
|
||||
}
|
||||
|
||||
private void startActivityAsUser(Intent intent, Bundle bundle, UserHandle handle,
|
||||
boolean allowDuringSetup) {
|
||||
if (allowDuringSetup || isUserSetupComplete()) {
|
||||
mContext.startActivityAsUser(intent, bundle, handle);
|
||||
} else {
|
||||
Slog.i(TAG, "Not starting activity because user setup is in progress: " + intent);
|
||||
@@ -5541,6 +5579,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
return "LONG_PRESS_POWER_SHUT_OFF";
|
||||
case LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM:
|
||||
return "LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM";
|
||||
case LONG_PRESS_POWER_GO_TO_VOICE_ASSIST:
|
||||
return "LONG_PRESS_POWER_GO_TO_VOICE_ASSIST";
|
||||
case LONG_PRESS_POWER_ASSISTANT:
|
||||
return "LONG_PRESS_POWER_ASSISTANT";
|
||||
default:
|
||||
return Integer.toString(behavior);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user