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

Commit c81df918 authored by Vaibhav Devmurari's avatar Vaibhav Devmurari Committed by Android (Google) Code Review
Browse files

Merge "Shift major shortcut handling from PWM to IMS" into main

parents 2ca3236b 5cca1f2a
Loading
Loading
Loading
Loading
+48 −33
Original line number Diff line number Diff line
@@ -65,31 +65,34 @@ public final class KeyGestureEvent {
    public static final int KEY_GESTURE_TYPE_ACCESSIBILITY_ALL_APPS = 23;
    public static final int KEY_GESTURE_TYPE_TOGGLE_CAPS_LOCK = 24;
    public static final int KEY_GESTURE_TYPE_SYSTEM_MUTE = 25;
    public static final int KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION = 26;
    public static final int KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS = 27;
    public static final int KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT = 28;
    public static final int KEY_GESTURE_TYPE_LOCK_SCREEN = 29;
    public static final int KEY_GESTURE_TYPE_OPEN_NOTES = 30;
    public static final int KEY_GESTURE_TYPE_TOGGLE_POWER = 31;
    public static final int KEY_GESTURE_TYPE_SYSTEM_NAVIGATION = 32;
    public static final int KEY_GESTURE_TYPE_SLEEP = 33;
    public static final int KEY_GESTURE_TYPE_WAKEUP = 34;
    public static final int KEY_GESTURE_TYPE_MEDIA_KEY = 35;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_BROWSER = 36;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_EMAIL = 37;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CONTACTS = 38;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CALENDAR = 39;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CALCULATOR = 40;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MUSIC = 41;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MAPS = 42;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MESSAGING = 43;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_GALLERY = 44;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_FILES = 45;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_WEATHER = 46;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_FITNESS = 47;
    public static final int KEY_GESTURE_TYPE_LAUNCH_APPLICATION_BY_PACKAGE_NAME = 48;
    public static final int KEY_GESTURE_TYPE_DESKTOP_MODE = 49;
    public static final int KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION = 50;
    public static final int KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_LEFT = 26;
    public static final int KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_RIGHT = 27;
    public static final int KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_LEFT = 28;
    public static final int KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_RIGHT = 29;
    public static final int KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT = 30;
    public static final int KEY_GESTURE_TYPE_LOCK_SCREEN = 31;
    public static final int KEY_GESTURE_TYPE_OPEN_NOTES = 32;
    public static final int KEY_GESTURE_TYPE_TOGGLE_POWER = 33;
    public static final int KEY_GESTURE_TYPE_SYSTEM_NAVIGATION = 34;
    public static final int KEY_GESTURE_TYPE_SLEEP = 35;
    public static final int KEY_GESTURE_TYPE_WAKEUP = 36;
    public static final int KEY_GESTURE_TYPE_MEDIA_KEY = 37;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_BROWSER = 38;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_EMAIL = 39;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CONTACTS = 40;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CALENDAR = 41;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_CALCULATOR = 42;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MUSIC = 43;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MAPS = 44;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_MESSAGING = 45;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_GALLERY = 46;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_FILES = 47;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_WEATHER = 48;
    public static final int KEY_GESTURE_TYPE_LAUNCH_DEFAULT_FITNESS = 49;
    public static final int KEY_GESTURE_TYPE_LAUNCH_APPLICATION_BY_PACKAGE_NAME = 50;
    public static final int KEY_GESTURE_TYPE_DESKTOP_MODE = 51;
    public static final int KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION = 52;
    public static final int KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER = 53;

    public static final int FLAG_CANCELLED = 1;

@@ -130,8 +133,10 @@ public final class KeyGestureEvent {
            KEY_GESTURE_TYPE_ACCESSIBILITY_ALL_APPS,
            KEY_GESTURE_TYPE_TOGGLE_CAPS_LOCK,
            KEY_GESTURE_TYPE_SYSTEM_MUTE,
            KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION,
            KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS,
            KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_LEFT,
            KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_RIGHT,
            KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_LEFT,
            KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_RIGHT,
            KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT,
            KEY_GESTURE_TYPE_LOCK_SCREEN,
            KEY_GESTURE_TYPE_OPEN_NOTES,
@@ -155,6 +160,7 @@ public final class KeyGestureEvent {
            KEY_GESTURE_TYPE_LAUNCH_APPLICATION_BY_PACKAGE_NAME,
            KEY_GESTURE_TYPE_DESKTOP_MODE,
            KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION,
            KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface KeyGestureType {
@@ -331,6 +337,7 @@ public final class KeyGestureEvent {
            case KEY_GESTURE_TYPE_HOME:
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__HOME;
            case KEY_GESTURE_TYPE_RECENT_APPS:
            case KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER:
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__RECENT_APPS;
            case KEY_GESTURE_TYPE_BACK:
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__BACK;
@@ -378,9 +385,11 @@ public final class KeyGestureEvent {
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__TOGGLE_CAPS_LOCK;
            case KEY_GESTURE_TYPE_SYSTEM_MUTE:
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__SYSTEM_MUTE;
            case KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION:
            case KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_LEFT:
            case KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_RIGHT:
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__SPLIT_SCREEN_NAVIGATION;
            case KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS:
            case KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_LEFT:
            case KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_RIGHT:
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__CHANGE_SPLITSCREEN_FOCUS;
            case KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT:
                return FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__TRIGGER_BUG_REPORT;
@@ -487,10 +496,14 @@ public final class KeyGestureEvent {
                return "KEY_GESTURE_TYPE_TOGGLE_CAPS_LOCK";
            case KEY_GESTURE_TYPE_SYSTEM_MUTE:
                return "KEY_GESTURE_TYPE_SYSTEM_MUTE";
            case KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION:
                return "KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION";
            case KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS:
                return "KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS";
            case KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_LEFT:
                return "KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_LEFT";
            case KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_RIGHT:
                return "KEY_GESTURE_TYPE_SPLIT_SCREEN_NAVIGATION_RIGHT";
            case KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_LEFT:
                return "KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_LEFT";
            case KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_RIGHT:
                return "KEY_GESTURE_TYPE_CHANGE_SPLITSCREEN_FOCUS_RIGHT";
            case KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT:
                return "KEY_GESTURE_TYPE_TRIGGER_BUG_REPORT";
            case KEY_GESTURE_TYPE_LOCK_SCREEN:
@@ -537,6 +550,8 @@ public final class KeyGestureEvent {
                return "KEY_GESTURE_TYPE_DESKTOP_MODE";
            case KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION:
                return "KEY_GESTURE_TYPE_MULTI_WINDOW_NAVIGATION";
            case KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER:
                return "KEY_GESTURE_TYPE_RECENT_APPS_SWITCHER";
            default:
                return Integer.toHexString(value);
        }
+7 −0
Original line number Diff line number Diff line
@@ -111,6 +111,13 @@ flag {
    }
}

flag {
    namespace: "input_native"
    name: "use_key_gesture_event_handler"
    description: "Use KeyGestureEvent handler APIs to control system shortcuts and key gestures"
    bug: "358569822"
}

flag {
  name: "keyboard_repeat_keys"
  namespace: "input_native"
+21 −12
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.view.KeyEvent.KEYCODE_UNKNOWN;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;

import static com.android.hardware.input.Flags.touchpadVisualizer;
import static com.android.hardware.input.Flags.useKeyGestureEventHandler;

import android.Manifest;
import android.annotation.EnforcePermission;
@@ -2116,6 +2117,7 @@ public class InputManagerService extends IInputManager.Stub
        mKeyboardBacklightController.dump(ipw);
        mKeyboardLedController.dump(ipw);
        mKeyboardGlyphManager.dump(ipw);
        mKeyGestureController.dump(ipw);
    }

    private void dumpAssociations(IndentingPrintWriter pw) {
@@ -2457,13 +2459,18 @@ public class InputManagerService extends IInputManager.Stub

    // Native callback.
    @SuppressWarnings("unused")
    private long interceptKeyBeforeDispatching(IBinder focus, KeyEvent event, int policyFlags) {
        // TODO(b/358569822): Move shortcut trigger logic from PWM to KeyGestureController
        long value = mKeyGestureController.interceptKeyBeforeDispatching(focus, event, policyFlags);
        if (value != 0) { // If key is consumed (i.e. non-zero value)
            return value;
    @VisibleForTesting
    long interceptKeyBeforeDispatching(IBinder focus, KeyEvent event, int policyFlags) {
        final long keyNotConsumed = 0;
        long value = keyNotConsumed;
        if (useKeyGestureEventHandler()) {
            value = mKeyGestureController.interceptKeyBeforeDispatching(focus, event, policyFlags);
        }
        if (value == keyNotConsumed) {
            value = mWindowManagerCallbacks.interceptKeyBeforeDispatching(focus, event,
                    policyFlags);
        }
        return mWindowManagerCallbacks.interceptKeyBeforeDispatching(focus, event, policyFlags);
        return value;
    }

    // Native callback.
@@ -2748,6 +2755,7 @@ public class InputManagerService extends IInputManager.Stub
    private void enforceManageKeyGesturePermission() {
        // TODO(b/361567988): Use @EnforcePermission to enforce permission once flag guarding the
        //  permission is rolled out
        if (mSystemReady) {
            String systemUIPackage = mContext.getString(R.string.config_systemUi);
            int systemUIAppId = UserHandle.getAppId(mPackageManagerInternal
                    .getPackageUid(systemUIPackage, PackageManager.MATCH_SYSTEM_ONLY,
@@ -2755,6 +2763,7 @@ public class InputManagerService extends IInputManager.Stub
            if (UserHandle.getCallingAppId() == systemUIAppId) {
                return;
            }
        }
        if (mContext.checkCallingOrSelfPermission(
                Manifest.permission.MANAGE_KEY_GESTURES) == PackageManager.PERMISSION_GRANTED) {
            return;
+524 −2

File changed.

Preview size limit exceeded, changes collapsed.

+308 −68

File changed.

Preview size limit exceeded, changes collapsed.

Loading