Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5bf2ea27 authored by Wes Okuhara's avatar Wes Okuhara
Browse files

Screen capture: Setup keyboard shortcut for partial screenshots

Registers a keyboard shortcut (Meta + Ctrl + S) for taking a partial
screenshot. The resulting action for the keyboard shortcut will be
implemented in a separate CL.

Bug: 420714826
Test: atest KeyGestureControllerTests
Flag:com.android.hardware.input.enable_partial_screenshot_keyboard_shortcut

Change-Id: Ice5a2e8cd4e23869376e1165703f436f74d4f725
parent 1fde0526
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -135,6 +135,7 @@ public final class KeyGestureEvent {
    public static final int KEY_GESTURE_TYPE_QUIT_FOCUSED_TASK = 80;
    public static final int KEY_GESTURE_TYPE_QUIT_FOCUSED_DESKTOP_TASK = 81;
    public static final int KEY_GESTURE_TYPE_TOGGLE_FULLSCREEN = 82;
    public static final int KEY_GESTURE_TYPE_TAKE_PARTIAL_SCREENSHOT = 83;

    public static final int FLAG_CANCELLED = 1 << 0;
    public static final int FLAG_LONG_PRESS = 1 << 1;
@@ -232,6 +233,7 @@ public final class KeyGestureEvent {
            KEY_GESTURE_TYPE_QUIT_FOCUSED_TASK,
            KEY_GESTURE_TYPE_QUIT_FOCUSED_DESKTOP_TASK,
            KEY_GESTURE_TYPE_TOGGLE_FULLSCREEN,
            KEY_GESTURE_TYPE_TAKE_PARTIAL_SCREENSHOT,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface KeyGestureType {
@@ -836,6 +838,8 @@ public final class KeyGestureEvent {
                return "KEY_GESTURE_TYPE_QUIT_FOCUSED_DESKTOP_TASK";
            case KEY_GESTURE_TYPE_TOGGLE_FULLSCREEN:
                return "KEY_GESTURE_TYPE_TOGGLE_FULLSCREEN";
            case KEY_GESTURE_TYPE_TAKE_PARTIAL_SCREENSHOT:
                return "KEY_GESTURE_TYPE_TAKE_PARTIAL_SCREENSHOT";
            default:
                return Integer.toHexString(value);
        }
+7 −0
Original line number Diff line number Diff line
@@ -256,6 +256,13 @@ flag {
    bug: "403531245"
}

flag {
    name: "enable_partial_screenshot_keyboard_shortcut"
    namespace: "input"
    description: "Enables keyboard shortcut for taking partial screenshots via large screen capture UI"
    bug: "420714826"
}

flag {
  name: "keyboard_backlight_shortcuts"
  namespace: "desktop_input"
+4 −0
Original line number Diff line number Diff line
@@ -551,6 +551,7 @@ object TestShortcuts {
            simpleShortcutCategory(System, "System controls", "View notifications"),
            simpleShortcutCategory(System, "System controls", "View quick settings"),
            simpleShortcutCategory(System, "System controls", "Take screenshot"),
            simpleShortcutCategory(System, "System controls", "Take partial screenshot"),
            simpleShortcutCategory(System, "System controls", "Go back"),
            simpleShortcutCategory(MultiTasking, "Split screen", "Use full screen"),
            simpleShortcutCategory(
@@ -587,6 +588,9 @@ object TestShortcuts {
            simpleInputGestureData(
                keyGestureType = KeyGestureEvent.KEY_GESTURE_TYPE_TAKE_SCREENSHOT
            ),
            simpleInputGestureData(
                keyGestureType = KeyGestureEvent.KEY_GESTURE_TYPE_TAKE_PARTIAL_SCREENSHOT
            ),
            simpleInputGestureData(keyGestureType = KeyGestureEvent.KEY_GESTURE_TYPE_BACK),
            simpleInputGestureData(
                keyGestureType = KeyGestureEvent.KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION
+21 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.hardware.input.InputManager.KeyGestureEventHandler
import android.hardware.input.InputManager.KeyGestureEventListener
import android.hardware.input.KeyGestureEvent
import android.hardware.input.KeyGestureEvent.KEY_GESTURE_TYPE_ALL_APPS
import android.hardware.input.KeyGestureEvent.KEY_GESTURE_TYPE_TAKE_PARTIAL_SCREENSHOT
import android.hardware.input.KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_NOTIFICATION_PANEL
import android.hardware.input.KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_QUICK_SETTINGS_PANEL
import android.hardware.input.KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_TASKBAR
@@ -81,6 +82,7 @@ class SysUIKeyGestureEventInitializerTest : SysuiTestCase() {
    @EnableFlags(
        com.android.window.flags.Flags.FLAG_ENABLE_KEY_GESTURE_HANDLER_FOR_SYSUI,
        com.android.hardware.input.Flags.FLAG_ENABLE_QUICK_SETTINGS_PANEL_SHORTCUT,
        com.android.hardware.input.Flags.FLAG_ENABLE_PARTIAL_SCREENSHOT_KEYBOARD_SHORTCUT,
    )
    fun start_flagEnabled_registerKeyGestureEvents() {
        underTest.start()
@@ -91,6 +93,7 @@ class SysUIKeyGestureEventInitializerTest : SysuiTestCase() {
                .containsExactly(
                    KEY_GESTURE_TYPE_TOGGLE_NOTIFICATION_PANEL,
                    KEY_GESTURE_TYPE_TOGGLE_QUICK_SETTINGS_PANEL,
                    KEY_GESTURE_TYPE_TAKE_PARTIAL_SCREENSHOT,
                )
        }
    }
@@ -99,6 +102,7 @@ class SysUIKeyGestureEventInitializerTest : SysuiTestCase() {
    @DisableFlags(
        com.android.window.flags.Flags.FLAG_ENABLE_KEY_GESTURE_HANDLER_FOR_SYSUI,
        com.android.hardware.input.Flags.FLAG_ENABLE_QUICK_SETTINGS_PANEL_SHORTCUT,
        com.android.hardware.input.Flags.FLAG_ENABLE_PARTIAL_SCREENSHOT_KEYBOARD_SHORTCUT,
    )
    fun start_flagDisabled_noRegisterKeyGestureEvents() {
        underTest.start()
@@ -142,6 +146,23 @@ class SysUIKeyGestureEventInitializerTest : SysuiTestCase() {
        verify(commandQueue).toggleQuickSettingsPanel()
    }

    @Test
    @EnableFlags(com.android.hardware.input.Flags.FLAG_ENABLE_PARTIAL_SCREENSHOT_KEYBOARD_SHORTCUT)
    fun handleKeyGestureEvent_eventTypeTakePartialScreenshot_opensScreenCaptureUi() {
        underTest.start()
        verify(inputManager)
            .registerKeyGestureEventHandler(any(), keyGestureEventHandlerCaptor.capture())

        keyGestureEventHandlerCaptor.value.handleKeyGestureEvent(
            KeyGestureEvent.Builder()
                .setKeyGestureType(KEY_GESTURE_TYPE_TAKE_PARTIAL_SCREENSHOT)
                .build(),
            /* focusedToken= */ null,
        )

        // TODO(b/420714826) Verify screen capture UI is launched.
    }

    @Test
    @EnableFlags(com.android.window.flags.Flags.FLAG_ENABLE_KEY_GESTURE_HANDLER_FOR_SYSUI)
    fun handleKeyGestureEvent_otherEventTypeToggleNotificationPanel_noInteraction() {
+2 −0
Original line number Diff line number Diff line
@@ -2545,6 +2545,8 @@
    <string name="group_system_access_quick_settings_panel">View quick settings</string>
    <!-- User visible title for the keyboard shortcut that takes a full screenshot. [CHAR LIMIT=70] -->
    <string name="group_system_full_screenshot">Take screenshot</string>
    <!-- User visible title for the keyboard shortcut that begins a partial screenshot. [CHAR LIMIT=70] -->
    <string name="group_system_partial_screenshot">Take partial screenshot</string>
    <!-- User visible title for the keyboard shortcut that access list of system / apps shortcuts. [CHAR LIMIT=70] -->
    <string name="group_system_access_system_app_shortcuts">Show shortcuts</string>
    <!-- User visible title for the keyboard shortcut that goes back to previous state. [CHAR LIMIT=70] -->
Loading