From 42b0395fee187c35560298668a62d334e91e7979 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Tue, 31 Aug 2021 10:41:36 -0700 Subject: [PATCH] Fix some taskbar stashing issues - Don't allow long press to stash between taskbar icons - Ensure taskbar_icon_touch_size is respected; previously it wasn't, because BubbleTextView@shouldIgnoreTouchDown() was returning true in the padding region. For taskbar, we want the whole icon size to be touchable. - Cancel long press when passing touch slop to avoid swipe down being detected as long press Test: long press on taskbar background, both between icons and not; swipe down on taskbar Fixes: 198305464 Change-Id: I36f1d792e91da9a3bf57a2bef1e974b299c4e25c --- .../com/android/launcher3/taskbar/TaskbarView.java | 14 +++++++++++++- .../launcher3/taskbar/TaskbarViewController.java | 8 +++++++- src/com/android/launcher3/BubbleTextView.java | 4 ++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java index 5144d9a5f5..59393d7b5b 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java @@ -243,7 +243,19 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar if (!mTouchEnabled) { return true; } - mControllerCallbacks.onTouchEvent(event); + if (mIconLayoutBounds.contains((int) event.getX(), (int) event.getY())) { + // Don't allow long pressing between icons. + return true; + } + if (mControllerCallbacks.onTouchEvent(event)) { + int oldAction = event.getAction(); + try { + event.setAction(MotionEvent.ACTION_CANCEL); + return super.onTouchEvent(event); + } finally { + event.setAction(oldAction); + } + } return super.onTouchEvent(event); } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java index 40b0e18d27..f1748afce3 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java @@ -223,7 +223,11 @@ public class TaskbarViewController { return view -> mControllers.taskbarStashController.updateAndAnimateIsStashedInApp(true); } - public void onTouchEvent(MotionEvent motionEvent) { + /** + * Get the first chance to handle TaskbarView#onTouchEvent, and return whether we want to + * consume the touch so TaskbarView treats it as an ACTION_CANCEL. + */ + public boolean onTouchEvent(MotionEvent motionEvent) { final float x = motionEvent.getRawX(); final float y = motionEvent.getRawY(); switch (motionEvent.getAction()) { @@ -239,6 +243,7 @@ public class TaskbarViewController { mControllers.taskbarStashController.startStashHint( /* animateForward= */ false); mCanceledStashHint = true; + return true; } break; case MotionEvent.ACTION_UP: @@ -249,6 +254,7 @@ public class TaskbarViewController { } break; } + return false; } } } diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 02ec5e8a8b..e52d1be18c 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -409,6 +409,10 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, * Returns true if the touch down at the provided position be ignored */ protected boolean shouldIgnoreTouchDown(float x, float y) { + if (mDisplay == DISPLAY_TASKBAR) { + // Allow touching within padding on taskbar, given icon sizes are smaller. + return false; + } return y < getPaddingTop() || x < getPaddingLeft() || y > getHeight() - getPaddingBottom()