From ef89f1a7ee0db122e42b72f6ae08e5caf3e5ae1b Mon Sep 17 00:00:00 2001 From: Brian Isganitis Date: Thu, 14 Sep 2023 22:45:11 +0000 Subject: [PATCH] Reapply "Have backup TouchController of Taskbar All Apps AFV." This reverts commit 73c695f04e2aff3ef90f89668ee563bcf1fc3a29. Change-Id: I21f560be9d340d1c343467c1704063ce85f63056 Fix: 299165179 Test: Manual + TaplTestsTaskbarSearch Flag: ENABLE_ALL_APPS_SEARCH_IN_TASKBAR --- .../allapps/TaskbarAllAppsController.java | 4 +++ .../allapps/TaskbarAllAppsSlideInView.java | 4 ++- .../overlay/TaskbarOverlayDragLayer.java | 25 ++++++++++++++++--- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java index e004acc83d..c54bb7e804 100644 --- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java +++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsController.java @@ -174,6 +174,9 @@ public final class TaskbarAllAppsController { mSlideInView = (TaskbarAllAppsSlideInView) mOverlayContext.getLayoutInflater().inflate( R.layout.taskbar_all_apps_sheet, mOverlayContext.getDragLayer(), false); + // Ensures All Apps gets touch events in case it is not the top floating view. Floating + // views above it may not be able to intercept the touch, so All Apps should try to. + mOverlayContext.getDragLayer().addTouchController(mSlideInView); mSlideInView.addOnCloseListener(() -> { mControllers.getSharedState().allAppsVisible = false; cleanUpOverlay(); @@ -212,6 +215,7 @@ public final class TaskbarAllAppsController { mSearchSessionController = null; } if (mOverlayContext != null) { + mOverlayContext.getDragLayer().removeTouchController(mSlideInView); mOverlayContext.setSearchSessionController(null); mOverlayContext = null; } diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java index 001c3bcfc0..c6c4f77e26 100644 --- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java +++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java @@ -220,7 +220,9 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView mTouchControllers = new ArrayList<>(); TaskbarOverlayDragLayer(Context context) { super(context, null, 1); @@ -93,10 +95,13 @@ public class TaskbarOverlayDragLayer extends @Override public void recreateControllers() { - mControllers = mOnClickListeners.isEmpty() - ? new TouchController[]{mActivity.getDragController()} - : new TouchController[] { - mActivity.getDragController(), mClickListenerTouchController}; + List controllers = new ArrayList<>(); + controllers.add(mActivity.getDragController()); + controllers.addAll(mTouchControllers); + if (!mOnClickListeners.isEmpty()) { + controllers.add(mClickListenerTouchController); + } + mControllers = controllers.toArray(new TouchController[0]); } @Override @@ -183,6 +188,18 @@ public class TaskbarOverlayDragLayer extends }); } + /** Adds a {@link TouchController} to this drag layer. */ + public void addTouchController(@NonNull TouchController touchController) { + mTouchControllers.add(touchController); + recreateControllers(); + } + + /** Removes a {@link TouchController} from this drag layer. */ + public void removeTouchController(@NonNull TouchController touchController) { + mTouchControllers.remove(touchController); + recreateControllers(); + } + /** * Taskbar automatically stashes when opening all apps, but we don't report the insets as * changing to avoid moving the underlying app. But internally, the apps view should still