Loading core/java/android/window/DesktopExperienceFlags.java +2 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,8 @@ public enum DesktopExperienceFlags { BASE_DENSITY_FOR_EXTERNAL_DISPLAYS( com.android.server.display.feature.flags.Flags::baseDensityForExternalDisplays, true, com.android.server.display.feature.flags.Flags.FLAG_BASE_DENSITY_FOR_EXTERNAL_DISPLAYS), CLOSE_TASK_KEYBOARD_SHORTCUT(Flags::closeTaskKeyboardShortcut, false, Flags.FLAG_CLOSE_TASK_KEYBOARD_SHORTCUT), CONNECTED_DISPLAYS_CURSOR(com.android.input.flags.Flags::connectedDisplaysCursor, true, com.android.input.flags.Flags.FLAG_CONNECTED_DISPLAYS_CURSOR), DISPLAY_TOPOLOGY(com.android.server.display.feature.flags.Flags::displayTopology, true, Loading services/core/java/com/android/server/input/InputGestureManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -315,6 +315,15 @@ final class InputGestureManager { /* allowCaptureByFocusedWindow = */false )); } if (DesktopExperienceFlags.CLOSE_TASK_KEYBOARD_SHORTCUT.isTrue()) { systemShortcuts.add( createKeyGesture( KeyEvent.KEYCODE_W, KeyEvent.META_META_ON | KeyEvent.META_CTRL_ON, KeyGestureEvent.KEY_GESTURE_TYPE_QUIT_FOCUSED_TASK, /* allowCaptureByFocusedWindow = */false )); } if (enableQuickSettingsPanelShortcut()) { systemShortcuts.add( createKeyGesture( Loading tests/Input/src/com/android/server/input/KeyGestureControllerTests.kt +4 −3 Original line number Diff line number Diff line Loading @@ -99,6 +99,7 @@ import org.mockito.kotlin.times com.android.hardware.input.Flags.FLAG_KEYBOARD_A11Y_SHORTCUT_CONTROL, com.android.hardware.input.Flags.FLAG_ENABLE_TALKBACK_AND_MAGNIFIER_KEY_GESTURES, com.android.hardware.input.Flags.FLAG_ENABLE_VOICE_ACCESS_KEY_GESTURES, com.android.window.flags.Flags.FLAG_CLOSE_TASK_KEYBOARD_SHORTCUT, com.android.window.flags.Flags.FLAG_ENABLE_MOVE_TO_NEXT_DISPLAY_SHORTCUT, com.android.window.flags.Flags.FLAG_ENABLE_TASK_RESIZING_KEYBOARD_SHORTCUTS, com.android.window.flags.Flags.FLAG_KEYBOARD_SHORTCUTS_TO_SWITCH_DESKS, Loading Loading @@ -1283,7 +1284,7 @@ class KeyGestureControllerTests { ) sendKeys( intArrayOf(KeyEvent.KEYCODE_ESCAPE), timeDelayMs = 2 * LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS timeDelayMs = 2 * LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS, ) keyGestureController.unregisterKeyGestureHandler(handler, TEST_PID) assertEquals(1, callback) Loading @@ -1301,7 +1302,7 @@ class KeyGestureControllerTests { ) sendKeys( intArrayOf(KeyEvent.KEYCODE_ESCAPE), timeDelayMs = 2 * LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS timeDelayMs = 2 * LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS, ) keyGestureController.unregisterKeyGestureHandler(handler, TEST_PID) assertEquals(0, callback) Loading @@ -1320,7 +1321,7 @@ class KeyGestureControllerTests { ) sendKeys( intArrayOf(KeyEvent.KEYCODE_ESCAPE), timeDelayMs = LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS / 2 timeDelayMs = LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS / 2, ) keyGestureController.unregisterKeyGestureHandler(handler, TEST_PID) assertEquals(0, callback) Loading tests/Input/src/com/android/server/input/KeyGestureTestData.kt +12 −0 Original line number Diff line number Diff line Loading @@ -165,6 +165,18 @@ object KeyGestureTestData { KeyEvent.META_META_ON or KeyEvent.META_CTRL_ON, intArrayOf(KeyGestureEvent.ACTION_GESTURE_COMPLETE), ), KeyGestureData( "META + CTRL + W -> Quit focused task", intArrayOf( KeyEvent.KEYCODE_META_LEFT, KeyEvent.KEYCODE_CTRL_LEFT, KeyEvent.KEYCODE_W, ), KeyGestureEvent.KEY_GESTURE_TYPE_QUIT_FOCUSED_TASK, intArrayOf(KeyEvent.KEYCODE_W), KeyEvent.META_META_ON or KeyEvent.META_CTRL_ON, intArrayOf(KeyGestureEvent.ACTION_GESTURE_COMPLETE), ), KeyGestureData( "META + [ -> Resizes a task to fit the left half of the screen", intArrayOf(KeyEvent.KEYCODE_META_LEFT, KeyEvent.KEYCODE_LEFT_BRACKET), Loading Loading
core/java/android/window/DesktopExperienceFlags.java +2 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,8 @@ public enum DesktopExperienceFlags { BASE_DENSITY_FOR_EXTERNAL_DISPLAYS( com.android.server.display.feature.flags.Flags::baseDensityForExternalDisplays, true, com.android.server.display.feature.flags.Flags.FLAG_BASE_DENSITY_FOR_EXTERNAL_DISPLAYS), CLOSE_TASK_KEYBOARD_SHORTCUT(Flags::closeTaskKeyboardShortcut, false, Flags.FLAG_CLOSE_TASK_KEYBOARD_SHORTCUT), CONNECTED_DISPLAYS_CURSOR(com.android.input.flags.Flags::connectedDisplaysCursor, true, com.android.input.flags.Flags.FLAG_CONNECTED_DISPLAYS_CURSOR), DISPLAY_TOPOLOGY(com.android.server.display.feature.flags.Flags::displayTopology, true, Loading
services/core/java/com/android/server/input/InputGestureManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -315,6 +315,15 @@ final class InputGestureManager { /* allowCaptureByFocusedWindow = */false )); } if (DesktopExperienceFlags.CLOSE_TASK_KEYBOARD_SHORTCUT.isTrue()) { systemShortcuts.add( createKeyGesture( KeyEvent.KEYCODE_W, KeyEvent.META_META_ON | KeyEvent.META_CTRL_ON, KeyGestureEvent.KEY_GESTURE_TYPE_QUIT_FOCUSED_TASK, /* allowCaptureByFocusedWindow = */false )); } if (enableQuickSettingsPanelShortcut()) { systemShortcuts.add( createKeyGesture( Loading
tests/Input/src/com/android/server/input/KeyGestureControllerTests.kt +4 −3 Original line number Diff line number Diff line Loading @@ -99,6 +99,7 @@ import org.mockito.kotlin.times com.android.hardware.input.Flags.FLAG_KEYBOARD_A11Y_SHORTCUT_CONTROL, com.android.hardware.input.Flags.FLAG_ENABLE_TALKBACK_AND_MAGNIFIER_KEY_GESTURES, com.android.hardware.input.Flags.FLAG_ENABLE_VOICE_ACCESS_KEY_GESTURES, com.android.window.flags.Flags.FLAG_CLOSE_TASK_KEYBOARD_SHORTCUT, com.android.window.flags.Flags.FLAG_ENABLE_MOVE_TO_NEXT_DISPLAY_SHORTCUT, com.android.window.flags.Flags.FLAG_ENABLE_TASK_RESIZING_KEYBOARD_SHORTCUTS, com.android.window.flags.Flags.FLAG_KEYBOARD_SHORTCUTS_TO_SWITCH_DESKS, Loading Loading @@ -1283,7 +1284,7 @@ class KeyGestureControllerTests { ) sendKeys( intArrayOf(KeyEvent.KEYCODE_ESCAPE), timeDelayMs = 2 * LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS timeDelayMs = 2 * LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS, ) keyGestureController.unregisterKeyGestureHandler(handler, TEST_PID) assertEquals(1, callback) Loading @@ -1301,7 +1302,7 @@ class KeyGestureControllerTests { ) sendKeys( intArrayOf(KeyEvent.KEYCODE_ESCAPE), timeDelayMs = 2 * LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS timeDelayMs = 2 * LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS, ) keyGestureController.unregisterKeyGestureHandler(handler, TEST_PID) assertEquals(0, callback) Loading @@ -1320,7 +1321,7 @@ class KeyGestureControllerTests { ) sendKeys( intArrayOf(KeyEvent.KEYCODE_ESCAPE), timeDelayMs = LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS / 2 timeDelayMs = LONG_PRESS_DELAY_FOR_ESCAPE_MILLIS / 2, ) keyGestureController.unregisterKeyGestureHandler(handler, TEST_PID) assertEquals(0, callback) Loading
tests/Input/src/com/android/server/input/KeyGestureTestData.kt +12 −0 Original line number Diff line number Diff line Loading @@ -165,6 +165,18 @@ object KeyGestureTestData { KeyEvent.META_META_ON or KeyEvent.META_CTRL_ON, intArrayOf(KeyGestureEvent.ACTION_GESTURE_COMPLETE), ), KeyGestureData( "META + CTRL + W -> Quit focused task", intArrayOf( KeyEvent.KEYCODE_META_LEFT, KeyEvent.KEYCODE_CTRL_LEFT, KeyEvent.KEYCODE_W, ), KeyGestureEvent.KEY_GESTURE_TYPE_QUIT_FOCUSED_TASK, intArrayOf(KeyEvent.KEYCODE_W), KeyEvent.META_META_ON or KeyEvent.META_CTRL_ON, intArrayOf(KeyGestureEvent.ACTION_GESTURE_COMPLETE), ), KeyGestureData( "META + [ -> Resizes a task to fit the left half of the screen", intArrayOf(KeyEvent.KEYCODE_META_LEFT, KeyEvent.KEYCODE_LEFT_BRACKET), Loading