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

Commit 90e0558f authored by Vaibhav Devmurari's avatar Vaibhav Devmurari
Browse files

Add Action+Q shortcut for opening quick settings panel

Test: atest InputTests
Test: atest SysUIKeyGestureEventInitializerTest
Bug: 423899230
Flag: com.android.hardware.input.enable_quick_settings_panel_shortcut
Change-Id: Ie5d2cfefb0b18c9fbd2774757153463bb645a9ee
parent 1c61b5e6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -131,6 +131,7 @@ public final class KeyGestureEvent {
    public static final int KEY_GESTURE_TYPE_TOGGLE_VOICE_ACCESS = 76;
    public static final int KEY_GESTURE_TYPE_SWITCH_TO_PREVIOUS_DESK = 77;
    public static final int KEY_GESTURE_TYPE_SWITCH_TO_NEXT_DESK = 78;
    public static final int KEY_GESTURE_TYPE_TOGGLE_QUICK_SETTINGS_PANEL = 79;

    public static final int FLAG_CANCELLED = 1 << 0;
    public static final int FLAG_LONG_PRESS = 1 << 1;
@@ -224,6 +225,7 @@ public final class KeyGestureEvent {
            KEY_GESTURE_TYPE_TOGGLE_VOICE_ACCESS,
            KEY_GESTURE_TYPE_SWITCH_TO_PREVIOUS_DESK,
            KEY_GESTURE_TYPE_SWITCH_TO_NEXT_DESK,
            KEY_GESTURE_TYPE_TOGGLE_QUICK_SETTINGS_PANEL,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface KeyGestureType {
@@ -820,6 +822,8 @@ public final class KeyGestureEvent {
                return "KEY_GESTURE_TYPE_SWITCH_TO_PREVIOUS_DESK";
            case KEY_GESTURE_TYPE_SWITCH_TO_NEXT_DESK:
                return "KEY_GESTURE_TYPE_SWITCH_TO_NEXT_DESK";
            case KEY_GESTURE_TYPE_TOGGLE_QUICK_SETTINGS_PANEL:
                return "KEY_GESTURE_TYPE_TOGGLE_QUICK_SETTINGS_PANEL";
            default:
                return Integer.toHexString(value);
        }
+7 −0
Original line number Diff line number Diff line
@@ -222,3 +222,10 @@ flag {
    description: "Enables per-app overrides compatibility for mouse to touch"
    bug: "413207127"
}

flag {
    name: "enable_quick_settings_panel_shortcut"
    namespace: "input"
    description: "Enables shortcut for quick settings panel"
    bug: "423899230"
}
+4 −0
Original line number Diff line number Diff line
@@ -549,6 +549,7 @@ object TestShortcuts {
            simpleShortcutCategory(System, "System apps", "Open settings"),
            simpleShortcutCategory(System, "System controls", "Lock screen"),
            simpleShortcutCategory(System, "System controls", "View notifications"),
            simpleShortcutCategory(System, "System controls", "View quick settings"),
            simpleShortcutCategory(System, "System controls", "Take screenshot"),
            simpleShortcutCategory(System, "System controls", "Go back"),
            simpleShortcutCategory(MultiTasking, "Split screen", "Use full screen"),
@@ -580,6 +581,9 @@ object TestShortcuts {
            simpleInputGestureData(
                keyGestureType = KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_NOTIFICATION_PANEL
            ),
            simpleInputGestureData(
                keyGestureType = KeyGestureEvent.KEY_GESTURE_TYPE_TOGGLE_QUICK_SETTINGS_PANEL
            ),
            simpleInputGestureData(
                keyGestureType = KeyGestureEvent.KEY_GESTURE_TYPE_TAKE_SCREENSHOT
            ),
+33 −6
Original line number Diff line number Diff line
@@ -21,13 +21,13 @@ import android.hardware.input.InputManager.KeyGestureEventHandler
import android.hardware.input.KeyGestureEvent
import android.hardware.input.KeyGestureEvent.KEY_GESTURE_TYPE_ALL_APPS
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.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.CommandQueue
import com.android.window.flags.Flags
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Rule
@@ -59,18 +59,28 @@ class SysUIKeyGestureEventInitializerTest : SysuiTestCase() {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_KEY_GESTURE_HANDLER_FOR_SYSUI)
    @EnableFlags(
        com.android.window.flags.Flags.FLAG_ENABLE_KEY_GESTURE_HANDLER_FOR_SYSUI,
        com.android.hardware.input.Flags.FLAG_ENABLE_QUICK_SETTINGS_PANEL_SHORTCUT,
    )
    fun start_flagEnabled_registerKeyGestureEvents() {
        underTest.start()

        verify(inputManager).registerKeyGestureEventHandler(keyGestureEventsCaptor.capture(), any())
        keyGestureEventsCaptor.value.let { keyGestureEvents ->
            assertThat(keyGestureEvents).containsExactly(KEY_GESTURE_TYPE_TOGGLE_NOTIFICATION_PANEL)
            assertThat(keyGestureEvents)
                .containsExactly(
                    KEY_GESTURE_TYPE_TOGGLE_NOTIFICATION_PANEL,
                    KEY_GESTURE_TYPE_TOGGLE_QUICK_SETTINGS_PANEL,
                )
        }
    }

    @Test
    @DisableFlags(Flags.FLAG_ENABLE_KEY_GESTURE_HANDLER_FOR_SYSUI)
    @DisableFlags(
        com.android.window.flags.Flags.FLAG_ENABLE_KEY_GESTURE_HANDLER_FOR_SYSUI,
        com.android.hardware.input.Flags.FLAG_ENABLE_QUICK_SETTINGS_PANEL_SHORTCUT,
    )
    fun start_flagDisabled_noRegisterKeyGestureEvents() {
        underTest.start()

@@ -78,7 +88,7 @@ class SysUIKeyGestureEventInitializerTest : SysuiTestCase() {
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_KEY_GESTURE_HANDLER_FOR_SYSUI)
    @EnableFlags(com.android.window.flags.Flags.FLAG_ENABLE_KEY_GESTURE_HANDLER_FOR_SYSUI)
    fun handleKeyGestureEvent_eventTypeToggleNotificationPanel_toggleNotificationPanel() {
        underTest.start()
        verify(inputManager)
@@ -95,7 +105,24 @@ class SysUIKeyGestureEventInitializerTest : SysuiTestCase() {
    }

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

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

        verify(commandQueue).toggleQuickSettingsPanel()
    }

    @Test
    @EnableFlags(com.android.window.flags.Flags.FLAG_ENABLE_KEY_GESTURE_HANDLER_FOR_SYSUI)
    fun handleKeyGestureEvent_otherEventTypeToggleNotificationPanel_noInteraction() {
        underTest.start()
        verify(inputManager)
+2 −0
Original line number Diff line number Diff line
@@ -2460,6 +2460,8 @@

    <!-- User visible title for the keyboard shortcut that triggers the notification shade. [CHAR LIMIT=70] -->
    <string name="group_system_access_notification_shade">View notifications</string>
    <!-- User visible title for the keyboard shortcut that triggers the quick settings panel. [CHAR LIMIT=70] -->
    <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 access list of system / apps shortcuts. [CHAR LIMIT=70] -->
Loading