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

Commit 74b492cc authored by Tony Wickham's avatar Tony Wickham Committed by Android (Google) Code Review
Browse files

Merge "Increase drag distance threshold when drag starts from deep press" into ub-launcher3-master

parents 800aaa0d a7704c09
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();
        }
    }