summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Wickham <twickham@google.com>2016-08-09 16:27:57 -0700
committerTony Wickham <twickham@google.com>2016-08-15 14:02:08 -0700
commite04a07f6acecc1565d037f62b0b109e0b8a243d4 (patch)
tree5c5e5e8b7a086865e2a28d4afcc93ca617215961
parent37aba27bbcc89417588a638d61099288553387df (diff)
downloadandroid_packages_apps_Trebuchet-e04a07f6acecc1565d037f62b0b109e0b8a243d4.tar.gz
android_packages_apps_Trebuchet-e04a07f6acecc1565d037f62b0b109e0b8a243d4.tar.bz2
android_packages_apps_Trebuchet-e04a07f6acecc1565d037f62b0b109e0b8a243d4.zip
Ignore clicks on shortcuts' drag handles.
When touching down within the drag handle's bounds, we remove the onClickListener temporarily (restored when touching down outside of the drag handle's bounds). Long clicks still start the drag. Also increased drag threshold from 12dp to 16dp. Bug: 30816665 Change-Id: I0b33dc34bf95c0532376f2f7cf50865fa50093de
-rw-r--r--res/values/dimens.xml2
-rw-r--r--src/com/android/launcher3/shortcuts/DeepShortcutTextView.java37
2 files changed, 38 insertions, 1 deletions
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 3f2d18672..87ef78b2e 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 450d36da5..42086fcb5 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 class DeepShortcutTextView extends BubbleTextView {
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();
+ }
}