Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +7 −6 Original line number Diff line number Diff line Loading @@ -3576,7 +3576,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } break; case KeyEvent.KEYCODE_I: if (firstDown && event.isMetaPressed()) { if (firstDown && event.isMetaPressed() && isUserSetupComplete() && !keyguardOn) { showSystemSettings(); notifyKeyGestureCompleted(event, KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SYSTEM_SETTINGS); Loading Loading @@ -4138,6 +4138,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { int displayId = event.getDisplayId(); int modifierState = event.getModifierState(); boolean keyguardOn = keyguardOn(); boolean canLaunchApp = isUserSetupComplete() && !keyguardOn; switch (gestureType) { case KeyGestureEvent.KEY_GESTURE_TYPE_RECENT_APPS: if (complete) { Loading @@ -4155,7 +4156,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { return true; case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_ASSISTANT: case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_VOICE_ASSISTANT: if (complete) { if (complete && canLaunchApp) { launchAssistAction(Intent.EXTRA_ASSIST_INPUT_HINT_KEYBOARD, deviceId, SystemClock.uptimeMillis(), AssistUtils.INVOCATION_TYPE_UNKNOWN); Loading @@ -4168,7 +4169,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } return true; case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SYSTEM_SETTINGS: if (complete) { if (complete && canLaunchApp) { showSystemSettings(); } return true; Loading Loading @@ -4271,7 +4272,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } return true; case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SEARCH: if (complete) { if (complete && canLaunchApp) { launchTargetSearchActivity(); } return true; Loading Loading @@ -4352,8 +4353,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { break; case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_APPLICATION: AppLaunchData data = event.getAppLaunchData(); if (complete && isUserSetupComplete() && !keyguardOn && data != null && mModifierShortcutManager.launchApplication(data)) { if (complete && canLaunchApp && data != null && mModifierShortcutManager.launchApplication(data)) { dismissKeyboardShortcutsMenu(); } return true; Loading services/tests/wmtests/src/com/android/server/policy/KeyGestureEventTests.java +40 −0 Original line number Diff line number Diff line Loading @@ -771,4 +771,44 @@ public class KeyGestureEventTests extends ShortcutKeyTestBase { KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB)); mPhoneWindowManager.assertZenMode(Settings.Global.ZEN_MODE_OFF); } @Test public void testLaunchSettingsAndSearchDoesntOpenAnything_withKeyguardOn() { mPhoneWindowManager.overrideKeyguardOn(true); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SYSTEM_SETTINGS); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SEARCH); mPhoneWindowManager.assertNoActivityLaunched(); } @Test public void testLaunchSettingsAndSearchDoesntOpenAnything_withUserSetupIncomplete() { mPhoneWindowManager.overrideIsUserSetupComplete(false); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SYSTEM_SETTINGS); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SEARCH); mPhoneWindowManager.assertNoActivityLaunched(); } @Test public void testLaunchAssistantDoesntWork_withKeyguardOn() { mPhoneWindowManager.overrideKeyguardOn(true); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_ASSISTANT); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_VOICE_ASSISTANT); mPhoneWindowManager.assertSearchManagerDoesntLaunchAssist(); } @Test public void testLaunchAssistantDoesntWork_withUserSetupIncomplete() { mPhoneWindowManager.overrideIsUserSetupComplete(false); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_ASSISTANT); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_VOICE_ASSISTANT); mPhoneWindowManager.assertSearchManagerDoesntLaunchAssist(); } } services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -571,6 +571,10 @@ class TestPhoneWindowManager { doNothing().when(mPhoneWindowManager).launchHomeFromHotKey(anyInt()); } void overrideKeyguardOn(boolean isKeyguardOn) { doReturn(isKeyguardOn).when(mPhoneWindowManager).keyguardOn(); } void overrideIsUserSetupComplete(boolean isCompleted) { doReturn(isCompleted).when(mPhoneWindowManager).isUserSetupComplete(); } Loading Loading @@ -733,6 +737,11 @@ class TestPhoneWindowManager { verify(mSearchManager).launchAssist(any()); } void assertSearchManagerDoesntLaunchAssist() { mTestLooper.dispatchAll(); verify(mSearchManager, never()).launchAssist(any()); } void assertLaunchSystemSettings() { mTestLooper.dispatchAll(); ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); Loading Loading @@ -937,4 +946,10 @@ class TestPhoneWindowManager { verify(mInputManagerInternal) .handleKeyGestureInKeyGestureController(anyInt(), any(), anyInt(), eq(gestureType)); } void assertNoActivityLaunched() { mTestLooper.dispatchAll(); verify(mContext, never()).startActivityAsUser(any(), any(), any()); verify(mContext, never()).startActivityAsUser(any(), any()); } } Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +7 −6 Original line number Diff line number Diff line Loading @@ -3576,7 +3576,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } break; case KeyEvent.KEYCODE_I: if (firstDown && event.isMetaPressed()) { if (firstDown && event.isMetaPressed() && isUserSetupComplete() && !keyguardOn) { showSystemSettings(); notifyKeyGestureCompleted(event, KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SYSTEM_SETTINGS); Loading Loading @@ -4138,6 +4138,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { int displayId = event.getDisplayId(); int modifierState = event.getModifierState(); boolean keyguardOn = keyguardOn(); boolean canLaunchApp = isUserSetupComplete() && !keyguardOn; switch (gestureType) { case KeyGestureEvent.KEY_GESTURE_TYPE_RECENT_APPS: if (complete) { Loading @@ -4155,7 +4156,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { return true; case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_ASSISTANT: case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_VOICE_ASSISTANT: if (complete) { if (complete && canLaunchApp) { launchAssistAction(Intent.EXTRA_ASSIST_INPUT_HINT_KEYBOARD, deviceId, SystemClock.uptimeMillis(), AssistUtils.INVOCATION_TYPE_UNKNOWN); Loading @@ -4168,7 +4169,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } return true; case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SYSTEM_SETTINGS: if (complete) { if (complete && canLaunchApp) { showSystemSettings(); } return true; Loading Loading @@ -4271,7 +4272,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } return true; case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SEARCH: if (complete) { if (complete && canLaunchApp) { launchTargetSearchActivity(); } return true; Loading Loading @@ -4352,8 +4353,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { break; case KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_APPLICATION: AppLaunchData data = event.getAppLaunchData(); if (complete && isUserSetupComplete() && !keyguardOn && data != null && mModifierShortcutManager.launchApplication(data)) { if (complete && canLaunchApp && data != null && mModifierShortcutManager.launchApplication(data)) { dismissKeyboardShortcutsMenu(); } return true; Loading
services/tests/wmtests/src/com/android/server/policy/KeyGestureEventTests.java +40 −0 Original line number Diff line number Diff line Loading @@ -771,4 +771,44 @@ public class KeyGestureEventTests extends ShortcutKeyTestBase { KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_DO_NOT_DISTURB)); mPhoneWindowManager.assertZenMode(Settings.Global.ZEN_MODE_OFF); } @Test public void testLaunchSettingsAndSearchDoesntOpenAnything_withKeyguardOn() { mPhoneWindowManager.overrideKeyguardOn(true); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SYSTEM_SETTINGS); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SEARCH); mPhoneWindowManager.assertNoActivityLaunched(); } @Test public void testLaunchSettingsAndSearchDoesntOpenAnything_withUserSetupIncomplete() { mPhoneWindowManager.overrideIsUserSetupComplete(false); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SYSTEM_SETTINGS); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_SEARCH); mPhoneWindowManager.assertNoActivityLaunched(); } @Test public void testLaunchAssistantDoesntWork_withKeyguardOn() { mPhoneWindowManager.overrideKeyguardOn(true); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_ASSISTANT); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_VOICE_ASSISTANT); mPhoneWindowManager.assertSearchManagerDoesntLaunchAssist(); } @Test public void testLaunchAssistantDoesntWork_withUserSetupIncomplete() { mPhoneWindowManager.overrideIsUserSetupComplete(false); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_ASSISTANT); sendKeyGestureEventComplete(KeyGestureEvent.KEY_GESTURE_TYPE_LAUNCH_VOICE_ASSISTANT); mPhoneWindowManager.assertSearchManagerDoesntLaunchAssist(); } }
services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +15 −0 Original line number Diff line number Diff line Loading @@ -571,6 +571,10 @@ class TestPhoneWindowManager { doNothing().when(mPhoneWindowManager).launchHomeFromHotKey(anyInt()); } void overrideKeyguardOn(boolean isKeyguardOn) { doReturn(isKeyguardOn).when(mPhoneWindowManager).keyguardOn(); } void overrideIsUserSetupComplete(boolean isCompleted) { doReturn(isCompleted).when(mPhoneWindowManager).isUserSetupComplete(); } Loading Loading @@ -733,6 +737,11 @@ class TestPhoneWindowManager { verify(mSearchManager).launchAssist(any()); } void assertSearchManagerDoesntLaunchAssist() { mTestLooper.dispatchAll(); verify(mSearchManager, never()).launchAssist(any()); } void assertLaunchSystemSettings() { mTestLooper.dispatchAll(); ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); Loading Loading @@ -937,4 +946,10 @@ class TestPhoneWindowManager { verify(mInputManagerInternal) .handleKeyGestureInKeyGestureController(anyInt(), any(), anyInt(), eq(gestureType)); } void assertNoActivityLaunched() { mTestLooper.dispatchAll(); verify(mContext, never()).startActivityAsUser(any(), any(), any()); verify(mContext, never()).startActivityAsUser(any(), any()); } }