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

Commit eef964c8 authored by Ben Lin's avatar Ben Lin
Browse files

PIP: Ensure we move some slop before pilfering for touches for resize.

Bug: 157152862
Test: Tap "X" on the PIP window, no longer getting CANCEL event in
TouchHandler

Change-Id: Iaef431ed855f6943ee92d39e625cdcf7c00007bc
parent b7f81189
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.view.InputEvent;
import android.view.InputEventReceiver;
import android.view.InputMonitor;
import android.view.MotionEvent;
import android.view.ViewConfiguration;

import com.android.internal.policy.TaskResizingAlgorithm;
import com.android.systemui.R;
@@ -77,10 +78,12 @@ public class PipResizeGestureHandler {
    private final Runnable mUpdateMovementBoundsRunnable;

    private int mDelta;
    private float mTouchSlop;
    private boolean mAllowGesture;
    private boolean mIsAttached;
    private boolean mIsEnabled;
    private boolean mEnableUserResize;
    private boolean mThresholdCrossed;

    private InputMonitor mInputMonitor;
    private InputEventReceiver mInputEventReceiver;
@@ -100,6 +103,7 @@ public class PipResizeGestureHandler {
        mPipTaskOrganizer = pipTaskOrganizer;
        mMovementBoundsSupplier = movementBoundsSupplier;
        mUpdateMovementBoundsRunnable = updateMovementBoundsRunnable;

        context.getDisplay().getRealSize(mMaxSize);
        reloadResources();

@@ -126,6 +130,7 @@ public class PipResizeGestureHandler {
    private void reloadResources() {
        final Resources res = mContext.getResources();
        mDelta = res.getDimensionPixelSize(R.dimen.pip_resize_edge_size);
        mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
    }

    private void resetDragCorners() {
@@ -270,7 +275,12 @@ public class PipResizeGestureHandler {
                    break;
                case MotionEvent.ACTION_MOVE:
                    // Capture inputs
                    float dx = Math.abs(ev.getX() - mDownPoint.x);
                    float dy = Math.abs(ev.getY() - mDownPoint.y);
                    if (!mThresholdCrossed && dx > mTouchSlop && dy > mTouchSlop) {
                        mThresholdCrossed = true;
                        mInputMonitor.pilferPointers();
                    }
                    final Rect currentPipBounds = mMotionHelper.getBounds();
                    mLastResizeBounds.set(TaskResizingAlgorithm.resizeDrag(ev.getX(), ev.getY(),
                            mDownPoint.x, mDownPoint.y, currentPipBounds, mCtrlType, mMinSize.x,
@@ -288,6 +298,7 @@ public class PipResizeGestureHandler {
                            mUpdateMovementBoundsRunnable.run();
                            mCtrlType = CTRL_NONE;
                            mAllowGesture = false;
                            mThresholdCrossed = false;
                        });
                    });
                    break;