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

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

Merge "Add option to filter custom shortcuts" into main

parents 8f131105 3019e1cf
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -276,9 +276,9 @@ interface IInputManager {
    @PermissionManuallyEnforced
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(value = "
            + "android.Manifest.permission.MANAGE_KEY_GESTURES)")
    void removeAllCustomInputGestures(int userId);
    void removeAllCustomInputGestures(int userId, int tag);

    AidlInputGestureData[] getCustomInputGestures(int userId);
    AidlInputGestureData[] getCustomInputGestures(int userId, int tag);

    AidlInputGestureData[] getAppLaunchBookmarks();
}
+31 −0
Original line number Diff line number Diff line
@@ -296,4 +296,35 @@ public final class InputGestureData {
    public record Action(@KeyGestureEvent.KeyGestureType int keyGestureType,
                         @Nullable AppLaunchData appLaunchData) {
    }

    /** Filter definition for InputGestureData */
    public enum Filter {
        KEY(AidlInputGestureData.Trigger.Tag.key),
        TOUCHPAD(AidlInputGestureData.Trigger.Tag.touchpadGesture);

        @AidlInputGestureData.Trigger.Tag
        private final int mTag;

        Filter(@AidlInputGestureData.Trigger.Tag int tag) {
            mTag = tag;
        }

        @Nullable
        public static Filter of(@AidlInputGestureData.Trigger.Tag int tag) {
            return switch (tag) {
                case AidlInputGestureData.Trigger.Tag.key -> KEY;
                case AidlInputGestureData.Trigger.Tag.touchpadGesture -> TOUCHPAD;
                default -> null;
            };
        }

        @AidlInputGestureData.Trigger.Tag
        public int getTag() {
            return mTag;
        }

        public boolean matches(@NonNull InputGestureData inputGestureData) {
            return mTag == inputGestureData.mInputGestureData.trigger.getTag();
        }
    }
}
+12 −4
Original line number Diff line number Diff line
@@ -1525,34 +1525,42 @@ public final class InputManager {
    }

    /** Removes all custom input gestures
     *
     * @param filter for removing all gestures of a category. If {@code null}, all custom input
     *               gestures will be removed
     *
     * @hide
     */
    @RequiresPermission(Manifest.permission.MANAGE_KEY_GESTURES)
    @UserHandleAware
    public void removeAllCustomInputGestures() {
    public void removeAllCustomInputGestures(@Nullable InputGestureData.Filter filter) {
        if (!enableCustomizableInputGestures()) {
            return;
        }
        try {
            mIm.removeAllCustomInputGestures(mContext.getUserId());
            mIm.removeAllCustomInputGestures(mContext.getUserId(),
                    filter == null ? -1 : filter.getTag());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /** Get all custom input gestures
     *
     * @param filter for fetching all gestures of a category. If {@code null}, then will return
     *               all custom input gestures
     *
     * @hide
     */
    @UserHandleAware
    public List<InputGestureData> getCustomInputGestures() {
    public List<InputGestureData> getCustomInputGestures(@Nullable InputGestureData.Filter filter) {
        List<InputGestureData> result = new ArrayList<>();
        if (!enableCustomizableInputGestures()) {
            return result;
        }
        try {
            for (AidlInputGestureData data : mIm.getCustomInputGestures(mContext.getUserId())) {
            for (AidlInputGestureData data : mIm.getCustomInputGestures(mContext.getUserId(),
                    filter == null ? -1 : filter.getTag())) {
                result.add(new InputGestureData(data));
            }
        } catch (RemoteException e) {
+29 −5
Original line number Diff line number Diff line
@@ -323,26 +323,50 @@ final class InputGestureManager {
                return InputManager.CUSTOM_INPUT_GESTURE_RESULT_ERROR_DOES_NOT_EXIST;
            }
            customGestures.remove(data.getTrigger());
            if (customGestures.size() == 0) {
            if (customGestures.isEmpty()) {
                mCustomInputGestures.remove(userId);
            }
            return InputManager.CUSTOM_INPUT_GESTURE_RESULT_SUCCESS;
        }
    }

    public void removeAllCustomInputGestures(int userId) {
    public void removeAllCustomInputGestures(int userId, @Nullable InputGestureData.Filter filter) {
        synchronized (mGestureLock) {
            Map<InputGestureData.Trigger, InputGestureData> customGestures =
                    mCustomInputGestures.get(userId);
            if (customGestures == null) {
                return;
            }
            if (filter == null) {
                mCustomInputGestures.remove(userId);
                return;
            }
            customGestures.entrySet().removeIf(entry -> filter.matches(entry.getValue()));
            if (customGestures.isEmpty()) {
                mCustomInputGestures.remove(userId);
            }
        }
    }

    @NonNull
    public List<InputGestureData> getCustomInputGestures(int userId) {
    public List<InputGestureData> getCustomInputGestures(int userId,
            @Nullable InputGestureData.Filter filter) {
        synchronized (mGestureLock) {
            if (!mCustomInputGestures.contains(userId)) {
                return List.of();
            }
            return new ArrayList<>(mCustomInputGestures.get(userId).values());
            Map<InputGestureData.Trigger, InputGestureData> customGestures =
                    mCustomInputGestures.get(userId);
            if (filter == null) {
                return new ArrayList<>(customGestures.values());
            }
            List<InputGestureData> result = new ArrayList<>();
            for (InputGestureData customGesture : customGestures.values()) {
                if (filter.matches(customGesture)) {
                    result.add(customGesture);
                }
            }
            return result;
        }
    }

+5 −4
Original line number Diff line number Diff line
@@ -3017,15 +3017,16 @@ public class InputManagerService extends IInputManager.Stub

    @Override
    @PermissionManuallyEnforced
    public void removeAllCustomInputGestures(@UserIdInt int userId) {
    public void removeAllCustomInputGestures(@UserIdInt int userId, int tag) {
        enforceManageKeyGesturePermission();

        mKeyGestureController.removeAllCustomInputGestures(userId);
        mKeyGestureController.removeAllCustomInputGestures(userId, InputGestureData.Filter.of(tag));
    }

    @Override
    public AidlInputGestureData[] getCustomInputGestures(@UserIdInt int userId) {
        return mKeyGestureController.getCustomInputGestures(userId);
    public AidlInputGestureData[] getCustomInputGestures(@UserIdInt int userId, int tag) {
        return mKeyGestureController.getCustomInputGestures(userId,
                InputGestureData.Filter.of(tag));
    }

    @Override
Loading