From d158097cfdcda346080071d33d2e565e18c74a5f Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 9 Apr 2019 11:52:49 -0700 Subject: [PATCH] Do a full touch dispach when proxying touch > Workspace can no longer be scrolled when swipin on hotseat Bug: 130027168 Change-Id: Ie4621e5b7de8d7248227b25fb065249d0c252090 --- .../src/com/android/quickstep/OverviewInputConsumer.java | 8 ++------ src/com/android/launcher3/Hotseat.java | 7 +++++++ src/com/android/launcher3/Launcher.java | 1 - src/com/android/launcher3/Workspace.java | 7 ------- src/com/android/launcher3/views/BaseDragLayer.java | 8 ++++++-- 5 files changed, 15 insertions(+), 16 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/OverviewInputConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/OverviewInputConsumer.java index 7794d8d999..b803071cfc 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/OverviewInputConsumer.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/OverviewInputConsumer.java @@ -136,17 +136,13 @@ public class OverviewInputConsumer } private void sendEvent(MotionEvent ev) { - if (mInvalidated || !mTarget.verifyTouchDispatch(this, ev)) { - mInvalidated = true; + if (mInvalidated) { return; } int flags = ev.getEdgeFlags(); ev.setEdgeFlags(flags | Utilities.EDGE_NAV_BAR); ev.offsetLocation(-mLocationOnScreen[0], -mLocationOnScreen[1]); - if (ev.getAction() == ACTION_DOWN) { - mTarget.onInterceptTouchEvent(ev); - } - mTarget.onTouchEvent(ev); + mInvalidated = !mTarget.dispatchTouchEvent(this, ev); ev.offsetLocation(mLocationOnScreen[0], mLocationOnScreen[1]); ev.setEdgeFlags(flags); } diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index cbd3fc0348..4da7907b2f 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -20,6 +20,7 @@ import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; import android.view.Gravity; +import android.view.MotionEvent; import android.view.View; import android.view.ViewDebug; import android.view.ViewGroup; @@ -98,4 +99,10 @@ public class Hotseat extends CellLayout implements LogContainerProvider, Insetta setLayoutParams(lp); InsettableFrameLayout.dispatchInsets(this, insets); } + + @Override + public boolean onTouchEvent(MotionEvent event) { + // Don't let if follow through to workspace + return true; + } } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index f8d99595eb..c14512a7ec 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -974,7 +974,6 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, mDropTargetBar.setup(mDragController); mAllAppsController.setupViews(mAppsView); - mHotseat.setOnInterceptTouchListener(mWorkspace::onInterceptHotseatTouch); } /** diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index d24a5a619e..2ee537cfcf 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -475,13 +475,6 @@ public class Workspace extends PagedView super.onViewAdded(child); } - protected boolean onInterceptHotseatTouch(View v, MotionEvent ev) { - // We don't want any clicks to go through to the hotseat unless the workspace is in - // the normal state or an accessible drag is in progress. - return !workspaceIconsCanBeDragged() - && !mLauncher.getAccessibilityDelegate().isInAccessibleDrag(); - } - /** * Initializes and binds the first page * @param qsb an existing qsb to recycle or null. diff --git a/src/com/android/launcher3/views/BaseDragLayer.java b/src/com/android/launcher3/views/BaseDragLayer.java index bd6bfd6850..ab72bbe184 100644 --- a/src/com/android/launcher3/views/BaseDragLayer.java +++ b/src/com/android/launcher3/views/BaseDragLayer.java @@ -223,14 +223,18 @@ public abstract class BaseDragLayer @Override public boolean dispatchTouchEvent(MotionEvent ev) { - return verifyTouchDispatch(this, ev) && super.dispatchTouchEvent(ev); + return dispatchTouchEvent(this, ev); + } + + public boolean dispatchTouchEvent(Object caller, MotionEvent ev) { + return verifyTouchDispatch(caller, ev) && super.dispatchTouchEvent(ev); } /** * Returns true if the {@param caller} is allowed to dispatch {@param ev} on this view, * false otherwise. */ - public boolean verifyTouchDispatch(Object caller, MotionEvent ev) { + private boolean verifyTouchDispatch(Object caller, MotionEvent ev) { int action = ev.getAction(); if (action == ACTION_DOWN) { if (mCurrentTouchOwner != null) {