Loading core/res/res/values-watch/config.xml +3 −2 Original line number Diff line number Diff line Loading @@ -21,9 +21,10 @@ for watch products. Do not translate. --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Only show settings item due to smaller real estate. --> <!-- Show smaller list of items due to smaller real estate. --> <string-array translatable="false" name="config_globalActionsList"> <item>assist</item> <item>power</item> <item>restart</item> </string-array> <!-- Base "touch slop" value used by ViewConfiguration as a Loading core/res/res/values/config.xml +10 −0 Original line number Diff line number Diff line Loading @@ -940,9 +940,16 @@ 1 - Global actions menu 2 - Power off (with confirmation) 3 - Power off (without confirmation) 4 - Go to voice assist --> <integer name="config_longPressOnPowerBehavior">1</integer> <!-- Control the behavior when the user long presses the power button for a long time. 0 - Nothing 1 - Global actions menu --> <integer name="config_veryLongPressOnPowerBehavior">0</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 Loading Loading @@ -986,6 +993,9 @@ --> <integer name="config_shortPressOnSleepBehavior">0</integer> <!-- Time to wait while a button is pressed before triggering a very long press. --> <integer name="config_veryLongPressTimeout">6000</integer> <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] --> <string name="widget_default_package_name" translatable="false"></string> Loading core/res/res/values/symbols.xml +2 −0 Original line number Diff line number Diff line Loading @@ -419,6 +419,8 @@ <java-symbol type="integer" name="config_extraFreeKbytesAbsolute" /> <java-symbol type="integer" name="config_immersive_mode_confirmation_panic" /> <java-symbol type="integer" name="config_longPressOnPowerBehavior" /> <java-symbol type="integer" name="config_veryLongPressOnPowerBehavior" /> <java-symbol type="integer" name="config_veryLongPressTimeout" /> <java-symbol type="integer" name="config_longPressOnBackBehavior" /> <java-symbol type="integer" name="config_backPanicBehavior" /> <java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAdjust" /> Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +72 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { 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 VERY_LONG_PRESS_POWER_NOTHING = 0; static final int VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS = 1; static final int MULTI_PRESS_POWER_NOTHING = 0; static final int MULTI_PRESS_POWER_THEATER_MODE = 1; Loading Loading @@ -569,6 +573,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mLidControlsSleep; int mShortPressOnPowerBehavior; int mLongPressOnPowerBehavior; int mVeryLongPressOnPowerBehavior; int mDoublePressOnPowerBehavior; int mTriplePressOnPowerBehavior; int mLongPressOnBackBehavior; Loading @@ -586,6 +591,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mHasSoftInput = false; boolean mTranslucentDecorEnabled = true; boolean mUseTvRouting; int mVeryLongPressTimeout; private boolean mHandleVolumeKeysInWM; Loading Loading @@ -796,6 +802,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { private static final int MSG_HANDLE_ALL_APPS = 26; private static final int MSG_LAUNCH_ASSIST = 27; private static final int MSG_LAUNCH_ASSIST_LONG_PRESS = 28; private static final int MSG_POWER_VERY_LONG_PRESS = 29; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1; Loading Loading @@ -855,6 +862,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { case MSG_POWER_LONG_PRESS: powerLongPress(); break; case MSG_POWER_VERY_LONG_PRESS: powerVeryLongPress(); break; case MSG_UPDATE_DREAMING_SLEEP_TOKEN: updateDreamingSleepToken(msg.arg1 != 0); break; Loading Loading @@ -1299,6 +1309,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { msg.setAsynchronous(true); mHandler.sendMessageDelayed(msg, ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout()); if (hasVeryLongPressOnPowerBehavior()) { Message longMsg = mHandler.obtainMessage(MSG_POWER_VERY_LONG_PRESS); longMsg.setAsynchronous(true); mHandler.sendMessageDelayed(longMsg, mVeryLongPressTimeout); } } } else { wakeUpFromPowerKey(event.getDownTime()); Loading @@ -1308,6 +1324,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { msg.setAsynchronous(true); mHandler.sendMessageDelayed(msg, ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout()); if (hasVeryLongPressOnPowerBehavior()) { Message longMsg = mHandler.obtainMessage(MSG_POWER_VERY_LONG_PRESS); longMsg.setAsynchronous(true); mHandler.sendMessageDelayed(longMsg, mVeryLongPressTimeout); } mBeganFromNonInteractive = true; } else { final int maxCount = getMaxMultiPressPowerCount(); Loading Loading @@ -1369,6 +1392,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { mPowerKeyHandled = true; mHandler.removeMessages(MSG_POWER_LONG_PRESS); } if (hasVeryLongPressOnPowerBehavior()) { mHandler.removeMessages(MSG_POWER_VERY_LONG_PRESS); } } private void cancelPendingBackKeyAction() { Loading Loading @@ -1516,6 +1542,29 @@ public class PhoneWindowManager implements WindowManagerPolicy { 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; performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); final boolean keyguardActive = mKeyguardDelegate == null ? false : mKeyguardDelegate.isShowing(); if (!keyguardActive) { Intent intent = new Intent(Intent.ACTION_VOICE_ASSIST); startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF); } break; } } private void powerVeryLongPress() { switch (mVeryLongPressOnPowerBehavior) { case VERY_LONG_PRESS_POWER_NOTHING: break; case VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS: mPowerKeyHandled = true; performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); showGlobalActionsInternal(); break; } } Loading Loading @@ -1574,6 +1623,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { return getResolvedLongPressOnPowerBehavior() != LONG_PRESS_POWER_NOTHING; } private boolean hasVeryLongPressOnPowerBehavior() { return mVeryLongPressOnPowerBehavior != VERY_LONG_PRESS_POWER_NOTHING; } private boolean hasLongPressOnBackBehavior() { return mLongPressOnBackBehavior != LONG_PRESS_BACK_NOTHING; } Loading Loading @@ -1979,12 +2032,16 @@ public class PhoneWindowManager implements WindowManagerPolicy { com.android.internal.R.integer.config_shortPressOnPowerBehavior); mLongPressOnPowerBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_longPressOnPowerBehavior); mVeryLongPressOnPowerBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_veryLongPressOnPowerBehavior); mDoublePressOnPowerBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_doublePressOnPowerBehavior); mTriplePressOnPowerBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_triplePressOnPowerBehavior); mShortPressOnSleepBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_shortPressOnSleepBehavior); mVeryLongPressTimeout = mContext.getResources().getInteger( com.android.internal.R.integer.config_veryLongPressTimeout); mUseTvRouting = AudioSystem.getPlatformType(mContext) == AudioSystem.PLATFORM_TELEVISION; Loading Loading @@ -8192,6 +8249,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { pw.print(prefix); pw.print("mLongPressOnPowerBehavior="); pw.println(longPressOnPowerBehaviorToString(mLongPressOnPowerBehavior)); pw.print(prefix); pw.print("mVeryLongPressOnPowerBehavior="); pw.println(veryLongPressOnPowerBehaviorToString(mVeryLongPressOnPowerBehavior)); pw.print(prefix); pw.print("mDoublePressOnPowerBehavior="); pw.println(multiPressOnPowerBehaviorToString(mDoublePressOnPowerBehavior)); Loading Loading @@ -8445,6 +8505,18 @@ public class PhoneWindowManager implements WindowManagerPolicy { return Integer.toString(behavior); } } private static String veryLongPressOnPowerBehaviorToString(int behavior) { switch (behavior) { case VERY_LONG_PRESS_POWER_NOTHING: return "VERY_LONG_PRESS_POWER_NOTHING"; case VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS: return "VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS"; default: return Integer.toString(behavior); } } private static String multiPressOnPowerBehaviorToString(int behavior) { switch (behavior) { case MULTI_PRESS_POWER_NOTHING: Loading Loading
core/res/res/values-watch/config.xml +3 −2 Original line number Diff line number Diff line Loading @@ -21,9 +21,10 @@ for watch products. Do not translate. --> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Only show settings item due to smaller real estate. --> <!-- Show smaller list of items due to smaller real estate. --> <string-array translatable="false" name="config_globalActionsList"> <item>assist</item> <item>power</item> <item>restart</item> </string-array> <!-- Base "touch slop" value used by ViewConfiguration as a Loading
core/res/res/values/config.xml +10 −0 Original line number Diff line number Diff line Loading @@ -940,9 +940,16 @@ 1 - Global actions menu 2 - Power off (with confirmation) 3 - Power off (without confirmation) 4 - Go to voice assist --> <integer name="config_longPressOnPowerBehavior">1</integer> <!-- Control the behavior when the user long presses the power button for a long time. 0 - Nothing 1 - Global actions menu --> <integer name="config_veryLongPressOnPowerBehavior">0</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 Loading Loading @@ -986,6 +993,9 @@ --> <integer name="config_shortPressOnSleepBehavior">0</integer> <!-- Time to wait while a button is pressed before triggering a very long press. --> <integer name="config_veryLongPressTimeout">6000</integer> <!-- Package name for default keyguard appwidget [DO NOT TRANSLATE] --> <string name="widget_default_package_name" translatable="false"></string> Loading
core/res/res/values/symbols.xml +2 −0 Original line number Diff line number Diff line Loading @@ -419,6 +419,8 @@ <java-symbol type="integer" name="config_extraFreeKbytesAbsolute" /> <java-symbol type="integer" name="config_immersive_mode_confirmation_panic" /> <java-symbol type="integer" name="config_longPressOnPowerBehavior" /> <java-symbol type="integer" name="config_veryLongPressOnPowerBehavior" /> <java-symbol type="integer" name="config_veryLongPressTimeout" /> <java-symbol type="integer" name="config_longPressOnBackBehavior" /> <java-symbol type="integer" name="config_backPanicBehavior" /> <java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAdjust" /> Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +72 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { 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 VERY_LONG_PRESS_POWER_NOTHING = 0; static final int VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS = 1; static final int MULTI_PRESS_POWER_NOTHING = 0; static final int MULTI_PRESS_POWER_THEATER_MODE = 1; Loading Loading @@ -569,6 +573,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mLidControlsSleep; int mShortPressOnPowerBehavior; int mLongPressOnPowerBehavior; int mVeryLongPressOnPowerBehavior; int mDoublePressOnPowerBehavior; int mTriplePressOnPowerBehavior; int mLongPressOnBackBehavior; Loading @@ -586,6 +591,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mHasSoftInput = false; boolean mTranslucentDecorEnabled = true; boolean mUseTvRouting; int mVeryLongPressTimeout; private boolean mHandleVolumeKeysInWM; Loading Loading @@ -796,6 +802,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { private static final int MSG_HANDLE_ALL_APPS = 26; private static final int MSG_LAUNCH_ASSIST = 27; private static final int MSG_LAUNCH_ASSIST_LONG_PRESS = 28; private static final int MSG_POWER_VERY_LONG_PRESS = 29; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0; private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1; Loading Loading @@ -855,6 +862,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { case MSG_POWER_LONG_PRESS: powerLongPress(); break; case MSG_POWER_VERY_LONG_PRESS: powerVeryLongPress(); break; case MSG_UPDATE_DREAMING_SLEEP_TOKEN: updateDreamingSleepToken(msg.arg1 != 0); break; Loading Loading @@ -1299,6 +1309,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { msg.setAsynchronous(true); mHandler.sendMessageDelayed(msg, ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout()); if (hasVeryLongPressOnPowerBehavior()) { Message longMsg = mHandler.obtainMessage(MSG_POWER_VERY_LONG_PRESS); longMsg.setAsynchronous(true); mHandler.sendMessageDelayed(longMsg, mVeryLongPressTimeout); } } } else { wakeUpFromPowerKey(event.getDownTime()); Loading @@ -1308,6 +1324,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { msg.setAsynchronous(true); mHandler.sendMessageDelayed(msg, ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout()); if (hasVeryLongPressOnPowerBehavior()) { Message longMsg = mHandler.obtainMessage(MSG_POWER_VERY_LONG_PRESS); longMsg.setAsynchronous(true); mHandler.sendMessageDelayed(longMsg, mVeryLongPressTimeout); } mBeganFromNonInteractive = true; } else { final int maxCount = getMaxMultiPressPowerCount(); Loading Loading @@ -1369,6 +1392,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { mPowerKeyHandled = true; mHandler.removeMessages(MSG_POWER_LONG_PRESS); } if (hasVeryLongPressOnPowerBehavior()) { mHandler.removeMessages(MSG_POWER_VERY_LONG_PRESS); } } private void cancelPendingBackKeyAction() { Loading Loading @@ -1516,6 +1542,29 @@ public class PhoneWindowManager implements WindowManagerPolicy { 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; performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); final boolean keyguardActive = mKeyguardDelegate == null ? false : mKeyguardDelegate.isShowing(); if (!keyguardActive) { Intent intent = new Intent(Intent.ACTION_VOICE_ASSIST); startActivityAsUser(intent, UserHandle.CURRENT_OR_SELF); } break; } } private void powerVeryLongPress() { switch (mVeryLongPressOnPowerBehavior) { case VERY_LONG_PRESS_POWER_NOTHING: break; case VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS: mPowerKeyHandled = true; performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false); showGlobalActionsInternal(); break; } } Loading Loading @@ -1574,6 +1623,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { return getResolvedLongPressOnPowerBehavior() != LONG_PRESS_POWER_NOTHING; } private boolean hasVeryLongPressOnPowerBehavior() { return mVeryLongPressOnPowerBehavior != VERY_LONG_PRESS_POWER_NOTHING; } private boolean hasLongPressOnBackBehavior() { return mLongPressOnBackBehavior != LONG_PRESS_BACK_NOTHING; } Loading Loading @@ -1979,12 +2032,16 @@ public class PhoneWindowManager implements WindowManagerPolicy { com.android.internal.R.integer.config_shortPressOnPowerBehavior); mLongPressOnPowerBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_longPressOnPowerBehavior); mVeryLongPressOnPowerBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_veryLongPressOnPowerBehavior); mDoublePressOnPowerBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_doublePressOnPowerBehavior); mTriplePressOnPowerBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_triplePressOnPowerBehavior); mShortPressOnSleepBehavior = mContext.getResources().getInteger( com.android.internal.R.integer.config_shortPressOnSleepBehavior); mVeryLongPressTimeout = mContext.getResources().getInteger( com.android.internal.R.integer.config_veryLongPressTimeout); mUseTvRouting = AudioSystem.getPlatformType(mContext) == AudioSystem.PLATFORM_TELEVISION; Loading Loading @@ -8192,6 +8249,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { pw.print(prefix); pw.print("mLongPressOnPowerBehavior="); pw.println(longPressOnPowerBehaviorToString(mLongPressOnPowerBehavior)); pw.print(prefix); pw.print("mVeryLongPressOnPowerBehavior="); pw.println(veryLongPressOnPowerBehaviorToString(mVeryLongPressOnPowerBehavior)); pw.print(prefix); pw.print("mDoublePressOnPowerBehavior="); pw.println(multiPressOnPowerBehaviorToString(mDoublePressOnPowerBehavior)); Loading Loading @@ -8445,6 +8505,18 @@ public class PhoneWindowManager implements WindowManagerPolicy { return Integer.toString(behavior); } } private static String veryLongPressOnPowerBehaviorToString(int behavior) { switch (behavior) { case VERY_LONG_PRESS_POWER_NOTHING: return "VERY_LONG_PRESS_POWER_NOTHING"; case VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS: return "VERY_LONG_PRESS_POWER_GLOBAL_ACTIONS"; default: return Integer.toString(behavior); } } private static String multiPressOnPowerBehaviorToString(int behavior) { switch (behavior) { case MULTI_PRESS_POWER_NOTHING: Loading