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

Commit 1a80f128 authored by Ben Lin's avatar Ben Lin
Browse files

Allow customization of touch handler.

Add #setTouchHandler to PipManager so that other devices (e.g. TV,
Chrome OS) may set its own touch handler to overwrite the default one.

Bug: 148407130
Test: Set a custom touch handler, note it being used instead of the
default one

Change-Id: Ice3a57a700926b474b29dec1e0b3a8503501477b
parent ce7f6e89
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -296,6 +296,13 @@ public class PipManager implements BasePipManager {
        mTouchHandler.showPictureInPictureMenu();
    }

    /**
     * Sets a customized touch gesture that replaces the default one.
     */
    public void setTouchGesture(PipTouchGesture gesture) {
        mTouchHandler.setTouchGesture(gesture);
    }

    /**
     * Sets both shelf visibility and its height.
     */
+3 −3
Original line number Diff line number Diff line
@@ -24,19 +24,19 @@ public abstract class PipTouchGesture {
    /**
     * Handle the touch down.
     */
    void onDown(PipTouchState touchState) {}
    public void onDown(PipTouchState touchState) {}

    /**
     * Handle the touch move, and return whether the event was consumed.
     */
    boolean onMove(PipTouchState touchState) {
    public boolean onMove(PipTouchState touchState) {
        return false;
    }

    /**
     * Handle the touch up, and return whether the gesture was consumed.
     */
    boolean onUp(PipTouchState touchState) {
    public boolean onUp(PipTouchState touchState) {
        return false;
    }
}
+13 −18
Original line number Diff line number Diff line
@@ -126,8 +126,8 @@ public class PipTouchHandler {
    // Touch state
    private final PipTouchState mTouchState;
    private final FlingAnimationUtils mFlingAnimationUtils;
    private final PipTouchGesture[] mGestures;
    private final PipMotionHelper mMotionHelper;
    private PipTouchGesture mGesture;

    // Temp vars
    private final Rect mTmpBounds = new Rect();
@@ -185,9 +185,7 @@ public class PipTouchHandler {
        mSnapAlgorithm = new PipSnapAlgorithm(mContext);
        mFlingAnimationUtils = new FlingAnimationUtils(context.getResources().getDisplayMetrics(),
                2.5f);
        mGestures = new PipTouchGesture[] {
                mDefaultMovementGesture
        };
        mGesture = new DefaultPipTouchGesture();
        mMotionHelper = new PipMotionHelper(mContext, mActivityManager, mActivityTaskManager,
                mMenuController, mSnapAlgorithm, mFlingAnimationUtils);
        mTouchState = new PipTouchState(mViewConfig, mHandler,
@@ -210,6 +208,10 @@ public class PipTouchHandler {
                this::onAccessibilityShowMenu, mHandler);
    }

    public void setTouchGesture(PipTouchGesture gesture) {
        mGesture = gesture;
    }

    public void setTouchEnabled(boolean enabled) {
        mTouchState.setAllowTouches(enabled);
    }
@@ -363,18 +365,13 @@ public class PipTouchHandler {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                mMotionHelper.synchronizePinnedStackBounds();

                for (PipTouchGesture gesture : mGestures) {
                    gesture.onDown(mTouchState);
                }
                mGesture.onDown(mTouchState);
                break;
            }
            case MotionEvent.ACTION_MOVE: {
                for (PipTouchGesture gesture : mGestures) {
                    if (gesture.onMove(mTouchState)) {
                if (mGesture.onMove(mTouchState)) {
                    break;
                }
                }

                shouldDeliverToMenu = !mTouchState.isDragging();
                break;
@@ -384,11 +381,9 @@ public class PipTouchHandler {
                // dragging (ie. when the IME shows)
                updateMovementBounds(mMenuState);

                for (PipTouchGesture gesture : mGestures) {
                    if (gesture.onUp(mTouchState)) {
                if (mGesture.onUp(mTouchState)) {
                    break;
                }
                }

                // Fall through to clean up
            }
@@ -591,7 +586,7 @@ public class PipTouchHandler {
    /**
     * Gesture controlling normal movement of the PIP.
     */
    private PipTouchGesture mDefaultMovementGesture = new PipTouchGesture() {
    private class DefaultPipTouchGesture extends PipTouchGesture {
        // Whether the PiP was on the left side of the screen at the start of the gesture
        private boolean mStartedOnLeft;
        private final Point mStartPosition = new Point();
@@ -623,7 +618,7 @@ public class PipTouchHandler {
        }

        @Override
        boolean onMove(PipTouchState touchState) {
        public boolean onMove(PipTouchState touchState) {
            if (!touchState.isUserInteracting()) {
                return false;
            }