Merge "Ignore clicks on shortcuts' drag handles." into ub-launcher3-calgary
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 3f2d186..87ef78b 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -161,7 +161,7 @@
     <dimen name="deep_shortcuts_spacing">4dp</dimen>
     <dimen name="deep_shortcuts_drag_view_scale">6dp</dimen>
     <!-- an icon with shortcuts must be dragged this far before the container is removed. -->
-    <dimen name="deep_shortcuts_start_drag_threshold">12dp</dimen>
+    <dimen name="deep_shortcuts_start_drag_threshold">16dp</dimen>
     <dimen name="deep_shortcut_icon_size">36dp</dimen>
     <dimen name="deep_shortcut_padding_start">6dp</dimen>
     <dimen name="deep_shortcut_padding_end">16dp</dimen>
diff --git a/src/com/android/launcher3/shortcuts/DeepShortcutTextView.java b/src/com/android/launcher3/shortcuts/DeepShortcutTextView.java
index 450d36d..42086fc 100644
--- a/src/com/android/launcher3/shortcuts/DeepShortcutTextView.java
+++ b/src/com/android/launcher3/shortcuts/DeepShortcutTextView.java
@@ -17,15 +17,23 @@
 package com.android.launcher3.shortcuts;
 
 import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
+import android.view.MotionEvent;
 
 import com.android.launcher3.BubbleTextView;
+import com.android.launcher3.R;
+import com.android.launcher3.Utilities;
 
 /**
  * A {@link BubbleTextView} that has the shortcut icon on the left and drag handle on the right.
  */
 public class DeepShortcutTextView extends BubbleTextView {
+    private final Rect mDragHandleBounds = new Rect();
+    private final int mDragHandleWidth;
+    private boolean mShouldPerformClick = true;
 
     public DeepShortcutTextView(Context context) {
         this(context, null, 0);
@@ -37,10 +45,39 @@
 
     public DeepShortcutTextView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
+
+        Resources resources = getResources();
+        mDragHandleWidth = resources.getDimensionPixelSize(R.dimen.deep_shortcut_padding_end)
+                + resources.getDimensionPixelSize(R.dimen.deep_shortcut_drag_handle_size)
+                + resources.getDimensionPixelSize(R.dimen.deep_shortcut_drawable_padding) / 2;
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+        mDragHandleBounds.set(0, 0, mDragHandleWidth, getMeasuredHeight());
+        if (!Utilities.isRtl(getResources())) {
+            mDragHandleBounds.offset(getMeasuredWidth() - mDragHandleBounds.width(), 0);
+        }
     }
 
     @Override
     protected void applyCompoundDrawables(Drawable icon) {
         // The icon is drawn in a separate view.
     }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+            // Ignore clicks on the drag handle (long clicks still start the drag).
+            mShouldPerformClick = !mDragHandleBounds.contains((int) ev.getX(), (int) ev.getY());
+        }
+        return super.onTouchEvent(ev);
+    }
+
+    @Override
+    public boolean performClick() {
+        return mShouldPerformClick && super.performClick();
+    }
 }