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

Commit 848696ac authored by Tony Wickham's avatar Tony Wickham
Browse files

Increase drag distance threshold when drag starts from deep press

Also don't update distance dragged until drag actually starts
(otherwise we add a lot of motion before deep press triggers).

Bug: 146146413
Change-Id: I28bd23707a9be53c709d7a4e779e84b9a0be9ce2
(cherry picked from commit a7704c09)
parent b9ba4275
Loading
Loading
Loading
Loading
+23 −8
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.launcher3.dragndrop;
import static com.android.launcher3.AbstractFloatingView.TYPE_DISCOVERY_BOUNCE;
import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_EXIT_DELAY;
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.Utilities.ATLEAST_Q;

import android.animation.ValueAnimator;
import android.content.ComponentName;
@@ -56,6 +57,12 @@ import java.util.ArrayList;
public class DragController implements DragDriver.EventListener, TouchController {
    private static final boolean PROFILE_DRAWING_DURING_DRAG = false;

    /**
     * When a drag is started from a deep press, you need to drag this much farther than normal to
     * end a pre-drag. See {@link DragOptions.PreDragCondition#shouldStartDrag(double)}.
     */
    private static final int DEEP_PRESS_DISTANCE_FACTOR = 3;

    @Thunk Launcher mLauncher;
    private FlingToDeleteHelper mFlingToDeleteHelper;

@@ -91,9 +98,10 @@ public class DragController implements DragDriver.EventListener, TouchController

    private DropTarget mLastDropTarget;

    @Thunk int mLastTouch[] = new int[2];
    @Thunk long mLastTouchUpTime = -1;
    @Thunk int mDistanceSinceScroll = 0;
    private final int[] mLastTouch = new int[2];
    private long mLastTouchUpTime = -1;
    private int mLastTouchClassification;
    private int mDistanceSinceScroll = 0;

    private int mTmpPoint[] = new int[2];
    private Rect mDragLayerRect = new Rect();
@@ -204,7 +212,7 @@ public class DragController implements DragDriver.EventListener, TouchController
        }

        mLauncher.getDragLayer().performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
        dragView.show(mMotionDownX, mMotionDownY);
        dragView.show(mLastTouch[0], mLastTouch[1]);
        mDistanceSinceScroll = 0;

        if (!mIsInPreDrag) {
@@ -213,9 +221,7 @@ public class DragController implements DragDriver.EventListener, TouchController
            mOptions.preDragCondition.onPreDragStart(mDragObject);
        }

        mLastTouch[0] = mMotionDownX;
        mLastTouch[1] = mMotionDownY;
        handleMoveEvent(mMotionDownX, mMotionDownY);
        handleMoveEvent(mLastTouch[0], mLastTouch[1]);
        mLauncher.getUserEventDispatcher().resetActionDurationMillis();
        return dragView;
    }
@@ -430,6 +436,11 @@ public class DragController implements DragDriver.EventListener, TouchController
        final int[] dragLayerPos = getClampedDragLayerPos(ev.getX(), ev.getY());
        final int dragLayerX = dragLayerPos[0];
        final int dragLayerY = dragLayerPos[1];
        mLastTouch[0] = dragLayerX;
        mLastTouch[1] = dragLayerY;
        if (ATLEAST_Q) {
            mLastTouchClassification = ev.getClassification();
        }

        switch (action) {
            case MotionEvent.ACTION_DOWN:
@@ -488,8 +499,12 @@ public class DragController implements DragDriver.EventListener, TouchController
        mLastTouch[0] = x;
        mLastTouch[1] = y;

        int distanceDragged = mDistanceSinceScroll;
        if (ATLEAST_Q && mLastTouchClassification == MotionEvent.CLASSIFICATION_DEEP_PRESS) {
            distanceDragged /= DEEP_PRESS_DISTANCE_FACTOR;
        }
        if (mIsInPreDrag && mOptions.preDragCondition != null
                && mOptions.preDragCondition.shouldStartDrag(mDistanceSinceScroll)) {
                && mOptions.preDragCondition.shouldStartDrag(distanceDragged)) {
            callOnDragStart();
        }
    }