From fee2b25b9c0df85190fe01d870c84392d210964a Mon Sep 17 00:00:00 2001 From: Sreyas Date: Thu, 27 Aug 2020 15:48:00 -0700 Subject: [PATCH] Implementing TouchDelegate to make full chip clickable. Bug: 166376182 Tested: Manual Change-Id: I36b2559908fbf7ab6a863fb6e550a88b5374aefa --- .../android/quickstep/views/RecentsView.java | 10 ++---- .../com/android/quickstep/views/TaskView.java | 36 +++++++++++++++++-- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index 1d17f5af70..7111b69dba 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -79,7 +79,6 @@ import android.view.HapticFeedbackConstants; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; -import android.view.TouchDelegate; import android.view.View; import android.view.ViewDebug; import android.view.ViewGroup; @@ -700,12 +699,9 @@ public abstract class RecentsView extends PagedView super.onTouchEvent(ev); TaskView taskView = getCurrentPageTaskView(); - if (taskView != null) { - TouchDelegate mChildTouchDelegate = taskView.getIconTouchDelegate(ev); - if (mChildTouchDelegate != null && mChildTouchDelegate.onTouchEvent(ev)) { - // Keep consuming events to pass to delegate - return true; - } + if (taskView != null && taskView.offerTouchToChildren(ev)) { + // Keep consuming events to pass to delegate + return true; } final int x = (int) ev.getX(); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java index 2058a7f375..65cadd6350 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java @@ -135,6 +135,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { * delegated bounds only to be updated. */ private TransformingTouchDelegate mIconTouchDelegate; + private TransformingTouchDelegate mChipTouchDelegate; private static final List SYSTEM_GESTURE_EXCLUSION_RECT = Collections.singletonList(new Rect()); @@ -200,6 +201,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { private View mContextualChipWrapper; private View mContextualChip; private final float[] mIconCenterCoords = new float[2]; + private final float[] mChipCenterCoords = new float[2]; public TaskView(Context context) { this(context, null); @@ -263,11 +265,22 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { mIconTouchDelegate = new TransformingTouchDelegate(mIconView); } - public TouchDelegate getIconTouchDelegate(MotionEvent event) { + /** + * Whether the taskview should take the touch event from parent. Events passed to children + * that might require special handling. + */ + public boolean offerTouchToChildren(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { computeAndSetIconTouchDelegate(); + computeAndSetChipTouchDelegate(); } - return mIconTouchDelegate; + if (mIconTouchDelegate != null && mIconTouchDelegate.onTouchEvent(event)) { + return true; + } + if (mChipTouchDelegate != null && mChipTouchDelegate.onTouchEvent(event)) { + return true; + } + return false; } private void computeAndSetIconTouchDelegate() { @@ -282,6 +295,23 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { (int) (mIconCenterCoords[1] + iconHalfSize)); } + private void computeAndSetChipTouchDelegate() { + if (mContextualChipWrapper != null) { + float chipHalfWidth = mContextualChipWrapper.getWidth() / 2f; + float chipHalfHeight = mContextualChipWrapper.getHeight() / 2f; + mChipCenterCoords[0] = chipHalfWidth; + mChipCenterCoords[1] = chipHalfHeight; + getDescendantCoordRelativeToAncestor(mContextualChipWrapper, mActivity.getDragLayer(), + mChipCenterCoords, + false); + mChipTouchDelegate.setBounds( + (int) (mChipCenterCoords[0] - chipHalfWidth), + (int) (mChipCenterCoords[1] - chipHalfHeight), + (int) (mChipCenterCoords[0] + chipHalfWidth), + (int) (mChipCenterCoords[1] + chipHalfHeight)); + } + } + /** * The modalness of this view is how it should be displayed when it is shown on its own in the * modal state of overview. @@ -725,6 +755,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { mContextualChip.animate().scaleX(1f).scaleY(1f).setDuration(50); } if (mContextualChipWrapper != null) { + mChipTouchDelegate = new TransformingTouchDelegate(mContextualChipWrapper); mContextualChipWrapper.animate().alpha(1f).setDuration(50); } } @@ -746,6 +777,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { View oldContextualChipWrapper = mContextualChipWrapper; mContextualChipWrapper = null; mContextualChip = null; + mChipTouchDelegate = null; return oldContextualChipWrapper; }