From 855b1b5fff5f6f03a641b3b6973780a24fd9641e Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Mon, 28 Mar 2016 16:56:30 -0700 Subject: Add distance threshold for dragged items before accepted by targets. With the new spring-loaded workspace, items are often very close to button drop targets (e.g. App Info) at the start of a drag. This threshold makes it less likely to accidentally drop on a target. Bug: 24099531 Change-Id: I4912ceeb0b63958816177c7bde073e825176d987 --- src/com/android/launcher3/ButtonDropTarget.java | 11 ++++++++--- src/com/android/launcher3/dragndrop/DragController.java | 7 +++++++ 2 files changed, 15 insertions(+), 3 deletions(-) (limited to 'src/com/android') diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java index af1ebde8f..43afbe59e 100644 --- a/src/com/android/launcher3/ButtonDropTarget.java +++ b/src/com/android/launcher3/ButtonDropTarget.java @@ -24,13 +24,13 @@ import android.animation.ValueAnimator.AnimatorUpdateListener; import android.annotation.TargetApi; import android.content.Context; import android.content.res.ColorStateList; +import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.graphics.drawable.InsetDrawable; import android.os.Build; import android.util.AttributeSet; import android.view.View; @@ -62,6 +62,8 @@ public abstract class ButtonDropTarget extends TextView /** Whether this drop target is active for the current drag */ protected boolean mActive; + /** An item must be dragged at least this many pixels before this drop target is enabled. */ + private final int mDragDistanceThreshold; /** The paint applied to the drag view on hover */ protected int mHoverColor = 0; @@ -78,12 +80,14 @@ public abstract class ButtonDropTarget extends TextView public ButtonDropTarget(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - mBottomDragPadding = getResources().getDimensionPixelSize(R.dimen.drop_target_drag_padding); + Resources resources = getResources(); + mBottomDragPadding = resources.getDimensionPixelSize(R.dimen.drop_target_drag_padding); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ButtonDropTarget, defStyle, 0); mHideParentOnDisable = a.getBoolean(R.styleable.ButtonDropTarget_hideParentOnDisable, false); a.recycle(); + mDragDistanceThreshold = resources.getDimensionPixelSize(R.dimen.drag_distanceThreshold); } @Override @@ -216,7 +220,8 @@ public abstract class ButtonDropTarget extends TextView @Override public boolean isDropEnabled() { - return mActive; + return mActive + && mLauncher.getDragController().getDistanceDragged() >= mDragDistanceThreshold; } @Override diff --git a/src/com/android/launcher3/dragndrop/DragController.java b/src/com/android/launcher3/dragndrop/DragController.java index 7524128d4..f4470f320 100644 --- a/src/com/android/launcher3/dragndrop/DragController.java +++ b/src/com/android/launcher3/dragndrop/DragController.java @@ -276,6 +276,9 @@ public class DragController implements DragDriver.EventListener { mLauncher.getDragLayer().performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); dragView.show(mMotionDownX, mMotionDownY); + mDistanceSinceScroll = 0; + mLastTouch[0] = mMotionDownX; + mLastTouch[1] = mMotionDownY; handleMoveEvent(mMotionDownX, mMotionDownY); return dragView; } @@ -536,6 +539,10 @@ public class DragController implements DragDriver.EventListener { checkScrollState(x, y); } + public float getDistanceDragged() { + return mDistanceSinceScroll; + } + public void forceTouchMove() { int[] dummyCoordinates = mCoordinatesTemp; DropTarget dropTarget = findDropTarget(mLastTouch[0], mLastTouch[1], dummyCoordinates); -- cgit v1.2.3