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 a7704c09c7
)
This commit is contained in:
parent
b9ba427576
commit
848696ac1d
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue