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

Commit cdcdd9e9 authored by Vaibhav Devmurari's avatar Vaibhav Devmurari
Browse files

Refactor InputGestureData Triggers to use AIDL backing objects

Use AIDL counterparts for trigger classes to reduce copying data
and make the "KeyTrigger" and "TouchpadTrigger" pure wrapper
classes to the AIDL counterparts.

Test: None
Bug: 358569822
Flag: EXEMPT refactor
Change-Id: I841134415c4a62dfbd9e48057d70d40610711e93
parent 259c4d27
Loading
Loading
Loading
Loading
+67 −54
Original line number Diff line number Diff line
@@ -48,27 +48,7 @@ public final class InputGestureData {

    /** Returns the trigger information for this input gesture */
    public Trigger getTrigger() {
        switch (mInputGestureData.trigger.getTag()) {
            case AidlInputGestureData.Trigger.Tag.key: {
                AidlInputGestureData.KeyTrigger trigger = mInputGestureData.trigger.getKey();
                if (trigger == null) {
                    throw new RuntimeException("InputGestureData is corrupted, null key trigger!");
                }
                return createKeyTrigger(trigger.keycode, trigger.modifierState);
            }
            case AidlInputGestureData.Trigger.Tag.touchpadGesture: {
                AidlInputGestureData.TouchpadGestureTrigger trigger =
                        mInputGestureData.trigger.getTouchpadGesture();
                if (trigger == null) {
                    throw new RuntimeException(
                            "InputGestureData is corrupted, null touchpad trigger!");
                }
                return createTouchpadTrigger(trigger.gestureType);
            }
            default:
                throw new RuntimeException("InputGestureData is corrupted, invalid trigger type!");

        }
        return createTriggerFromAidlTrigger(mInputGestureData.trigger);
    }

    /** Returns the action to perform for this input gesture */
@@ -147,18 +127,7 @@ public final class InputGestureData {
                        "No app launch data for system action launch application");
            }
            AidlInputGestureData data = new AidlInputGestureData();
            data.trigger = new AidlInputGestureData.Trigger();
            if (mTrigger instanceof KeyTrigger keyTrigger) {
                data.trigger.setKey(new AidlInputGestureData.KeyTrigger());
                data.trigger.getKey().keycode = keyTrigger.getKeycode();
                data.trigger.getKey().modifierState = keyTrigger.getModifierState();
            } else if (mTrigger instanceof TouchpadTrigger touchpadTrigger) {
                data.trigger.setTouchpadGesture(new AidlInputGestureData.TouchpadGestureTrigger());
                data.trigger.getTouchpadGesture().gestureType =
                        touchpadTrigger.getTouchpadGestureType();
            } else {
                throw new IllegalArgumentException("Invalid trigger type!");
            }
            data.trigger = mTrigger.getAidlTrigger();
            data.gestureType = mKeyGestureType;
            if (mAppLaunchData != null) {
                if (mAppLaunchData instanceof AppLaunchData.CategoryData categoryData) {
@@ -198,6 +167,7 @@ public final class InputGestureData {
    }

    public interface Trigger {
        AidlInputGestureData.Trigger getAidlTrigger();
    }

    /** Creates a input gesture trigger based on a key press */
@@ -210,85 +180,128 @@ public final class InputGestureData {
        return new TouchpadTrigger(touchpadGestureType);
    }

    public static Trigger createTriggerFromAidlTrigger(AidlInputGestureData.Trigger aidlTrigger) {
        switch (aidlTrigger.getTag()) {
            case AidlInputGestureData.Trigger.Tag.key: {
                AidlInputGestureData.KeyTrigger trigger = aidlTrigger.getKey();
                if (trigger == null) {
                    throw new RuntimeException("aidlTrigger is corrupted, null key trigger!");
                }
                return new KeyTrigger(trigger);
            }
            case AidlInputGestureData.Trigger.Tag.touchpadGesture: {
                AidlInputGestureData.TouchpadGestureTrigger trigger =
                        aidlTrigger.getTouchpadGesture();
                if (trigger == null) {
                    throw new RuntimeException(
                            "aidlTrigger is corrupted, null touchpad trigger!");
                }
                return new TouchpadTrigger(trigger);
            }
            default:
                throw new RuntimeException("aidlTrigger is corrupted, invalid trigger type!");

        }
    }

    /** Key based input gesture trigger */
    public static class KeyTrigger implements Trigger {
        private static final int SHORTCUT_META_MASK =
                KeyEvent.META_META_ON | KeyEvent.META_CTRL_ON | KeyEvent.META_ALT_ON
                        | KeyEvent.META_SHIFT_ON;
        private final int mKeycode;
        private final int mModifierState;

        AidlInputGestureData.KeyTrigger mAidlKeyTrigger;

        private KeyTrigger(@NonNull AidlInputGestureData.KeyTrigger aidlKeyTrigger) {
            mAidlKeyTrigger = aidlKeyTrigger;
        }

        private KeyTrigger(int keycode, int modifierState) {
            if (keycode <= KeyEvent.KEYCODE_UNKNOWN || keycode > KeyEvent.getMaxKeyCode()) {
                throw new IllegalArgumentException("Invalid keycode = " + keycode);
            }
            mKeycode = keycode;
            mModifierState = modifierState;
            mAidlKeyTrigger = new AidlInputGestureData.KeyTrigger();
            mAidlKeyTrigger.keycode = keycode;
            mAidlKeyTrigger.modifierState = modifierState;
        }

        public int getKeycode() {
            return mKeycode;
            return mAidlKeyTrigger.keycode;
        }

        public int getModifierState() {
            return mModifierState;
            return mAidlKeyTrigger.modifierState;
        }

        public AidlInputGestureData.Trigger getAidlTrigger() {
            AidlInputGestureData.Trigger trigger = new AidlInputGestureData.Trigger();
            trigger.setKey(mAidlKeyTrigger);
            return trigger;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof KeyTrigger that)) return false;
            return mKeycode == that.mKeycode && mModifierState == that.mModifierState;
            return Objects.equals(mAidlKeyTrigger, that.mAidlKeyTrigger);
        }

        @Override
        public int hashCode() {
            return Objects.hash(mKeycode, mModifierState);
            return mAidlKeyTrigger.hashCode();
        }

        @Override
        public String toString() {
            return "KeyTrigger{" +
                    "mKeycode=" + KeyEvent.keyCodeToString(mKeycode) +
                    ", mModifierState=" + mModifierState +
                    "mKeycode=" + KeyEvent.keyCodeToString(mAidlKeyTrigger.keycode) +
                    ", mModifierState=" + mAidlKeyTrigger.modifierState +
                    '}';
        }
    }

    /** Touchpad based input gesture trigger */
    public static class TouchpadTrigger implements Trigger {
        private final int mTouchpadGestureType;
        AidlInputGestureData.TouchpadGestureTrigger mAidlTouchpadTrigger;

        private TouchpadTrigger(
                @NonNull AidlInputGestureData.TouchpadGestureTrigger aidlTouchpadTrigger) {
            mAidlTouchpadTrigger = aidlTouchpadTrigger;
        }

        private TouchpadTrigger(int touchpadGestureType) {
            if (touchpadGestureType != TOUCHPAD_GESTURE_TYPE_THREE_FINGER_TAP) {
                throw new IllegalArgumentException(
                        "Invalid touchpadGestureType = " + touchpadGestureType);
            }
            mTouchpadGestureType = touchpadGestureType;
            mAidlTouchpadTrigger = new AidlInputGestureData.TouchpadGestureTrigger();
            mAidlTouchpadTrigger.gestureType = touchpadGestureType;
        }

        public int getTouchpadGestureType() {
            return mTouchpadGestureType;
            return mAidlTouchpadTrigger.gestureType;
        }

        public AidlInputGestureData.Trigger getAidlTrigger() {
            AidlInputGestureData.Trigger trigger = new AidlInputGestureData.Trigger();
            trigger.setTouchpadGesture(mAidlTouchpadTrigger);
            return trigger;
        }

        @Override
        public String toString() {
            return "TouchpadTrigger{" +
                    "mTouchpadGestureType=" + mTouchpadGestureType +
                    "mTouchpadGestureType=" + mAidlTouchpadTrigger.gestureType +
                    '}';
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            TouchpadTrigger that = (TouchpadTrigger) o;
            return mTouchpadGestureType == that.mTouchpadGestureType;
            if (!(o instanceof TouchpadTrigger that)) return false;
            return Objects.equals(mAidlTouchpadTrigger, that.mAidlTouchpadTrigger);
        }

        @Override
        public int hashCode() {
            return Objects.hashCode(mTouchpadGestureType);
            return mAidlTouchpadTrigger.hashCode();
        }
    }