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

Commit b26f7b43 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add new API to check if a custom gesture trigger is available" into main

parents 1d621cf1 af01f6df
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -263,6 +263,11 @@ interface IInputManager {
            + "android.Manifest.permission.MANAGE_KEY_GESTURES)")
    void unregisterKeyGestureHandler(IKeyGestureHandler handler);

    @PermissionManuallyEnforced
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = "
            + "android.Manifest.permission.MANAGE_KEY_GESTURES)")
    AidlInputGestureData getInputGesture(int userId, in AidlInputGestureData.Trigger trigger);

    @PermissionManuallyEnforced
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = "
            + "android.Manifest.permission.MANAGE_KEY_GESTURES)")
+24 −0
Original line number Diff line number Diff line
@@ -1480,6 +1480,30 @@ public final class InputManager {
        mGlobal.unregisterKeyGestureEventHandler(handler);
    }

    /**
     * Find an input gesture mapped to a particular trigger.
     *
     * @param trigger to find the input gesture for
     * @return input gesture mapped to the provided trigger, {@code null} if none found
     *
     * @hide
     */
    @RequiresPermission(Manifest.permission.MANAGE_KEY_GESTURES)
    @UserHandleAware
    @Nullable
    public InputGestureData getInputGesture(@NonNull InputGestureData.Trigger trigger) {
        try {
            AidlInputGestureData result = mIm.getInputGesture(mContext.getUserId(),
                    trigger.getAidlTrigger());
            if (result == null) {
                return null;
            }
            return new InputGestureData(result);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /** Adds a new custom input gesture
     *
     * @param inputGestureData gesture data to add as custom gesture
+6 −0
Original line number Diff line number Diff line
@@ -43,6 +43,9 @@ public final class KeyGestureEvent {
    private static final int LOG_EVENT_UNSPECIFIED =
            FrameworkStatsLog.KEYBOARD_SYSTEMS_EVENT_REPORTED__KEYBOARD_SYSTEM_EVENT__UNSPECIFIED;

    // Used as a placeholder to identify if a gesture is reserved for system
    public static final int KEY_GESTURE_TYPE_SYSTEM_RESERVED = -1;

    // These values should not change and values should not be re-used as this data is persisted to
    // long term storage and must be kept backwards compatible.
    public static final int KEY_GESTURE_TYPE_UNSPECIFIED = 0;
@@ -144,6 +147,7 @@ public final class KeyGestureEvent {
    public static final int ACTION_GESTURE_COMPLETE = 2;

    @IntDef(prefix = "KEY_GESTURE_TYPE_", value = {
            KEY_GESTURE_TYPE_SYSTEM_RESERVED,
            KEY_GESTURE_TYPE_UNSPECIFIED,
            KEY_GESTURE_TYPE_HOME,
            KEY_GESTURE_TYPE_RECENT_APPS,
@@ -665,6 +669,8 @@ public final class KeyGestureEvent {

    private static String keyGestureTypeToString(@KeyGestureType int value) {
        switch (value) {
            case KEY_GESTURE_TYPE_SYSTEM_RESERVED:
                return "KEY_GESTURE_TYPE_SYSTEM_RESERVED";
            case KEY_GESTURE_TYPE_UNSPECIFIED:
                return "KEY_GESTURE_TYPE_UNSPECIFIED";
            case KEY_GESTURE_TYPE_HOME:
+25 −0
Original line number Diff line number Diff line
@@ -316,6 +316,31 @@ final class InputGestureManager {
        }
    }

    @Nullable
    public InputGestureData getInputGesture(int userId, InputGestureData.Trigger trigger) {
        synchronized (mGestureLock) {
            if (mBlockListedTriggers.contains(trigger)) {
                return new InputGestureData.Builder().setTrigger(trigger).setKeyGestureType(
                        KeyGestureEvent.KEY_GESTURE_TYPE_SYSTEM_RESERVED).build();
            }
            if (trigger instanceof InputGestureData.KeyTrigger keyTrigger) {
                if (KeyEvent.isModifierKey(keyTrigger.getKeycode()) ||
                        KeyEvent.isSystemKey(keyTrigger.getKeycode())) {
                    return new InputGestureData.Builder().setTrigger(trigger).setKeyGestureType(
                            KeyGestureEvent.KEY_GESTURE_TYPE_SYSTEM_RESERVED).build();
                }
            }
            InputGestureData gestureData = mSystemShortcuts.get(trigger);
            if (gestureData != null) {
                return gestureData;
            }
            if (!mCustomInputGestures.contains(userId)) {
                return null;
            }
            return mCustomInputGestures.get(userId).get(trigger);
        }
    }

    @InputManager.CustomInputGestureResult
    public int addCustomInputGesture(int userId, InputGestureData newGesture) {
        synchronized (mGestureLock) {
+10 −0
Original line number Diff line number Diff line
@@ -3059,6 +3059,16 @@ public class InputManagerService extends IInputManager.Stub
        mKeyGestureController.unregisterKeyGestureHandler(handler, Binder.getCallingPid());
    }

    @Override
    @PermissionManuallyEnforced
    public AidlInputGestureData getInputGesture(@UserIdInt int userId,
            @NonNull AidlInputGestureData.Trigger trigger) {
        enforceManageKeyGesturePermission();

        Objects.requireNonNull(trigger);
        return mKeyGestureController.getInputGesture(userId, trigger);
    }

    @Override
    @PermissionManuallyEnforced
    public int addCustomInputGesture(@UserIdInt int userId,
Loading