Loading core/res/res/values/config.xml +8 −0 Original line number Diff line number Diff line Loading @@ -1151,6 +1151,14 @@ <!-- Allows activities to be launched on a long press on power during device setup. --> <bool name="config_allowStartActivityForLongPressOnPowerInSetup">false</bool> <!-- Control the behavior when the user short presses the settings button. 0 - Nothing 1 - Launch notification panel This needs to match the constants in com/android/server/policy/PhoneWindowManager.java --> <integer name="config_shortPressOnSettingsBehavior">0</integer> <!-- Control the behavior when the user short presses the power button. 0 - Nothing 1 - Go to sleep (doze) Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -1816,6 +1816,7 @@ <java-symbol type="integer" name="config_lidNavigationAccessibility" /> <java-symbol type="integer" name="config_lidOpenRotation" /> <java-symbol type="integer" name="config_longPressOnHomeBehavior" /> <java-symbol type="integer" name="config_shortPressOnSettingsBehavior" /> <java-symbol type="layout" name="global_actions" /> <java-symbol type="layout" name="global_actions_item" /> <java-symbol type="layout" name="global_actions_silent_mode" /> Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +38 −0 Original line number Diff line number Diff line Loading @@ -333,6 +333,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { static final int SHORT_PRESS_SLEEP_GO_TO_SLEEP = 0; static final int SHORT_PRESS_SLEEP_GO_TO_SLEEP_AND_GO_HOME = 1; // must match: config_shortPressOnSettingsBehavior in config.xml static final int SHORT_PRESS_SETTINGS_NOTHING = 0; static final int SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL = 1; static final int LAST_SHORT_PRESS_SETTINGS_BEHAVIOR = SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL; static final int PENDING_KEY_NULL = -1; // Must match: config_shortPressOnStemPrimaryBehavior in config.xml Loading Loading @@ -611,6 +616,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { // What we do when the user double-taps on home int mDoubleTapOnHomeBehavior; // What we do when the user presses on settings int mShortPressOnSettingsBehavior; // Must match config_primaryShortPressTargetActivity in config.xml ComponentName mPrimaryShortPressTargetActivity; Loading Loading @@ -2766,6 +2774,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mPackageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) { mShortPressOnWindowBehavior = SHORT_PRESS_WINDOW_PICTURE_IN_PICTURE; } mShortPressOnSettingsBehavior = res.getInteger( com.android.internal.R.integer.config_shortPressOnSettingsBehavior); if (mShortPressOnSettingsBehavior < SHORT_PRESS_SETTINGS_NOTHING || mShortPressOnSettingsBehavior > LAST_SHORT_PRESS_SETTINGS_BEHAVIOR) { mShortPressOnSettingsBehavior = SHORT_PRESS_SETTINGS_NOTHING; } } private void updateSettings() { Loading Loading @@ -3632,6 +3647,15 @@ public class PhoneWindowManager implements WindowManagerPolicy { Slog.wtf(TAG, "KEYCODE_STYLUS_BUTTON_* should be handled in" + " interceptKeyBeforeQueueing"); return true; case KeyEvent.KEYCODE_SETTINGS: if (mShortPressOnSettingsBehavior == SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL) { if (!down) { toggleNotificationPanel(); logKeyboardSystemsEvent(event, KeyboardLogEvent.TOGGLE_NOTIFICATION_PANEL); } return true; } break; } if (isValidGlobalKey(keyCode) && mGlobalKeyManager.handleGlobalKey(mContext, keyCode, event)) { Loading Loading @@ -6272,6 +6296,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { pw.print("mLongPressOnPowerBehavior="); pw.println(longPressOnPowerBehaviorToString(mLongPressOnPowerBehavior)); pw.print(prefix); pw.print("mShortPressOnSettingsBehavior="); pw.println(shortPressOnSettingsBehaviorToString(mShortPressOnSettingsBehavior)); pw.print(prefix); pw.print("mLongPressOnPowerAssistantTimeoutMs="); pw.println(mLongPressOnPowerAssistantTimeoutMs); pw.print(prefix); Loading Loading @@ -6470,6 +6497,17 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } private static String shortPressOnSettingsBehaviorToString(int behavior) { switch (behavior) { case SHORT_PRESS_SETTINGS_NOTHING: return "SHORT_PRESS_SETTINGS_NOTHING"; case SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL: return "SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL"; default: return Integer.toString(behavior); } } private static String veryLongPressOnPowerBehaviorToString(int behavior) { switch (behavior) { case VERY_LONG_PRESS_POWER_NOTHING: Loading services/tests/wmtests/src/com/android/server/policy/ShortcutLoggingTests.java +23 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static com.android.server.policy.PhoneWindowManager.DOUBLE_TAP_HOME_RECEN import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_HOME_ALL_APPS; import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_HOME_ASSIST; import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_HOME_NOTIFICATION_PANEL; import static com.android.server.policy.PhoneWindowManager.SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL; import android.platform.test.annotations.Presubmit; import android.view.KeyEvent; Loading Loading @@ -284,6 +285,16 @@ public class ShortcutLoggingTests extends ShortcutKeyTestBase { KeyboardLogEvent.APP_SWITCH, KeyEvent.KEYCODE_H, META_ON}}; } @Keep private static Object[][] shortPressOnSettingsTestArguments() { // testName, testKeys, shortPressOnSettingsBehavior, expectedLogEvent, expectedKey, // expectedModifierState return new Object[][]{ {"SETTINGS key -> Toggle Notification panel", new int[]{KeyEvent.KEYCODE_SETTINGS}, SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL, KeyboardLogEvent.TOGGLE_NOTIFICATION_PANEL, KeyEvent.KEYCODE_SETTINGS, 0}}; } @Before public void setUp() { setUpPhoneWindowManager(/*supportSettingsUpdate*/ true); Loading @@ -294,6 +305,7 @@ public class ShortcutLoggingTests extends ShortcutKeyTestBase { mPhoneWindowManager.overrideEnableBugReportTrigger(true); mPhoneWindowManager.overrideStatusBarManagerInternal(); mPhoneWindowManager.overrideStartActivity(); mPhoneWindowManager.overrideSendBroadcast(); mPhoneWindowManager.overrideUserSetupComplete(); mPhoneWindowManager.setupAssistForLaunch(); mPhoneWindowManager.overrideTogglePanel(); Loading Loading @@ -330,4 +342,15 @@ public class ShortcutLoggingTests extends ShortcutKeyTestBase { mPhoneWindowManager.assertShortcutLogged(VENDOR_ID, PRODUCT_ID, expectedLogEvent, expectedKey, expectedModifierState, "Failed while executing " + testName); } @Test @Parameters(method = "shortPressOnSettingsTestArguments") public void testShortPressOnSettings(String testName, int[] testKeys, int shortPressOnSettingsBehavior, KeyboardLogEvent expectedLogEvent, int expectedKey, int expectedModifierState) { mPhoneWindowManager.overrideShortPressOnSettingsBehavior(shortPressOnSettingsBehavior); sendKeyCombination(testKeys, 0 /* duration */); mPhoneWindowManager.assertShortcutLogged(VENDOR_ID, PRODUCT_ID, expectedLogEvent, expectedKey, expectedModifierState, "Failed while executing " + testName); } } services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +8 −0 Original line number Diff line number Diff line Loading @@ -375,6 +375,10 @@ class TestPhoneWindowManager { mPhoneWindowManager.mDoubleTapOnHomeBehavior = behavior; } void overrideShortPressOnSettingsBehavior(int behavior) { mPhoneWindowManager.mShortPressOnSettingsBehavior = behavior; } void overrideCanStartDreaming(boolean canDream) { doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean()); } Loading Loading @@ -484,6 +488,10 @@ class TestPhoneWindowManager { doNothing().when(mContext).startActivityAsUser(any(), any(), any()); } void overrideSendBroadcast() { doNothing().when(mContext).sendBroadcastAsUser(any(), any(), any()); } void overrideUserSetupComplete() { doReturn(true).when(mPhoneWindowManager).isUserSetupComplete(); } Loading Loading
core/res/res/values/config.xml +8 −0 Original line number Diff line number Diff line Loading @@ -1151,6 +1151,14 @@ <!-- Allows activities to be launched on a long press on power during device setup. --> <bool name="config_allowStartActivityForLongPressOnPowerInSetup">false</bool> <!-- Control the behavior when the user short presses the settings button. 0 - Nothing 1 - Launch notification panel This needs to match the constants in com/android/server/policy/PhoneWindowManager.java --> <integer name="config_shortPressOnSettingsBehavior">0</integer> <!-- Control the behavior when the user short presses the power button. 0 - Nothing 1 - Go to sleep (doze) Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -1816,6 +1816,7 @@ <java-symbol type="integer" name="config_lidNavigationAccessibility" /> <java-symbol type="integer" name="config_lidOpenRotation" /> <java-symbol type="integer" name="config_longPressOnHomeBehavior" /> <java-symbol type="integer" name="config_shortPressOnSettingsBehavior" /> <java-symbol type="layout" name="global_actions" /> <java-symbol type="layout" name="global_actions_item" /> <java-symbol type="layout" name="global_actions_silent_mode" /> Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +38 −0 Original line number Diff line number Diff line Loading @@ -333,6 +333,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { static final int SHORT_PRESS_SLEEP_GO_TO_SLEEP = 0; static final int SHORT_PRESS_SLEEP_GO_TO_SLEEP_AND_GO_HOME = 1; // must match: config_shortPressOnSettingsBehavior in config.xml static final int SHORT_PRESS_SETTINGS_NOTHING = 0; static final int SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL = 1; static final int LAST_SHORT_PRESS_SETTINGS_BEHAVIOR = SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL; static final int PENDING_KEY_NULL = -1; // Must match: config_shortPressOnStemPrimaryBehavior in config.xml Loading Loading @@ -611,6 +616,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { // What we do when the user double-taps on home int mDoubleTapOnHomeBehavior; // What we do when the user presses on settings int mShortPressOnSettingsBehavior; // Must match config_primaryShortPressTargetActivity in config.xml ComponentName mPrimaryShortPressTargetActivity; Loading Loading @@ -2766,6 +2774,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mPackageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) { mShortPressOnWindowBehavior = SHORT_PRESS_WINDOW_PICTURE_IN_PICTURE; } mShortPressOnSettingsBehavior = res.getInteger( com.android.internal.R.integer.config_shortPressOnSettingsBehavior); if (mShortPressOnSettingsBehavior < SHORT_PRESS_SETTINGS_NOTHING || mShortPressOnSettingsBehavior > LAST_SHORT_PRESS_SETTINGS_BEHAVIOR) { mShortPressOnSettingsBehavior = SHORT_PRESS_SETTINGS_NOTHING; } } private void updateSettings() { Loading Loading @@ -3632,6 +3647,15 @@ public class PhoneWindowManager implements WindowManagerPolicy { Slog.wtf(TAG, "KEYCODE_STYLUS_BUTTON_* should be handled in" + " interceptKeyBeforeQueueing"); return true; case KeyEvent.KEYCODE_SETTINGS: if (mShortPressOnSettingsBehavior == SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL) { if (!down) { toggleNotificationPanel(); logKeyboardSystemsEvent(event, KeyboardLogEvent.TOGGLE_NOTIFICATION_PANEL); } return true; } break; } if (isValidGlobalKey(keyCode) && mGlobalKeyManager.handleGlobalKey(mContext, keyCode, event)) { Loading Loading @@ -6272,6 +6296,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { pw.print("mLongPressOnPowerBehavior="); pw.println(longPressOnPowerBehaviorToString(mLongPressOnPowerBehavior)); pw.print(prefix); pw.print("mShortPressOnSettingsBehavior="); pw.println(shortPressOnSettingsBehaviorToString(mShortPressOnSettingsBehavior)); pw.print(prefix); pw.print("mLongPressOnPowerAssistantTimeoutMs="); pw.println(mLongPressOnPowerAssistantTimeoutMs); pw.print(prefix); Loading Loading @@ -6470,6 +6497,17 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } private static String shortPressOnSettingsBehaviorToString(int behavior) { switch (behavior) { case SHORT_PRESS_SETTINGS_NOTHING: return "SHORT_PRESS_SETTINGS_NOTHING"; case SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL: return "SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL"; default: return Integer.toString(behavior); } } private static String veryLongPressOnPowerBehaviorToString(int behavior) { switch (behavior) { case VERY_LONG_PRESS_POWER_NOTHING: Loading
services/tests/wmtests/src/com/android/server/policy/ShortcutLoggingTests.java +23 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static com.android.server.policy.PhoneWindowManager.DOUBLE_TAP_HOME_RECEN import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_HOME_ALL_APPS; import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_HOME_ASSIST; import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_HOME_NOTIFICATION_PANEL; import static com.android.server.policy.PhoneWindowManager.SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL; import android.platform.test.annotations.Presubmit; import android.view.KeyEvent; Loading Loading @@ -284,6 +285,16 @@ public class ShortcutLoggingTests extends ShortcutKeyTestBase { KeyboardLogEvent.APP_SWITCH, KeyEvent.KEYCODE_H, META_ON}}; } @Keep private static Object[][] shortPressOnSettingsTestArguments() { // testName, testKeys, shortPressOnSettingsBehavior, expectedLogEvent, expectedKey, // expectedModifierState return new Object[][]{ {"SETTINGS key -> Toggle Notification panel", new int[]{KeyEvent.KEYCODE_SETTINGS}, SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL, KeyboardLogEvent.TOGGLE_NOTIFICATION_PANEL, KeyEvent.KEYCODE_SETTINGS, 0}}; } @Before public void setUp() { setUpPhoneWindowManager(/*supportSettingsUpdate*/ true); Loading @@ -294,6 +305,7 @@ public class ShortcutLoggingTests extends ShortcutKeyTestBase { mPhoneWindowManager.overrideEnableBugReportTrigger(true); mPhoneWindowManager.overrideStatusBarManagerInternal(); mPhoneWindowManager.overrideStartActivity(); mPhoneWindowManager.overrideSendBroadcast(); mPhoneWindowManager.overrideUserSetupComplete(); mPhoneWindowManager.setupAssistForLaunch(); mPhoneWindowManager.overrideTogglePanel(); Loading Loading @@ -330,4 +342,15 @@ public class ShortcutLoggingTests extends ShortcutKeyTestBase { mPhoneWindowManager.assertShortcutLogged(VENDOR_ID, PRODUCT_ID, expectedLogEvent, expectedKey, expectedModifierState, "Failed while executing " + testName); } @Test @Parameters(method = "shortPressOnSettingsTestArguments") public void testShortPressOnSettings(String testName, int[] testKeys, int shortPressOnSettingsBehavior, KeyboardLogEvent expectedLogEvent, int expectedKey, int expectedModifierState) { mPhoneWindowManager.overrideShortPressOnSettingsBehavior(shortPressOnSettingsBehavior); sendKeyCombination(testKeys, 0 /* duration */); mPhoneWindowManager.assertShortcutLogged(VENDOR_ID, PRODUCT_ID, expectedLogEvent, expectedKey, expectedModifierState, "Failed while executing " + testName); } }
services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +8 −0 Original line number Diff line number Diff line Loading @@ -375,6 +375,10 @@ class TestPhoneWindowManager { mPhoneWindowManager.mDoubleTapOnHomeBehavior = behavior; } void overrideShortPressOnSettingsBehavior(int behavior) { mPhoneWindowManager.mShortPressOnSettingsBehavior = behavior; } void overrideCanStartDreaming(boolean canDream) { doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean()); } Loading Loading @@ -484,6 +488,10 @@ class TestPhoneWindowManager { doNothing().when(mContext).startActivityAsUser(any(), any(), any()); } void overrideSendBroadcast() { doNothing().when(mContext).sendBroadcastAsUser(any(), any(), any()); } void overrideUserSetupComplete() { doReturn(true).when(mPhoneWindowManager).isUserSetupComplete(); } Loading