diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java index 3f3700bb04..2272d11c38 100644 --- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java @@ -467,10 +467,15 @@ public class LauncherTaskbarUIController extends TaskbarUIController { } @Override - protected boolean canToggleHomeAllApps() { - return mLauncher.isResumed() + protected void toggleAllApps(boolean focusSearch) { + boolean canToggleHomeAllApps = mLauncher.isResumed() && !mTaskbarLauncherStateController.isInOverviewUi() && !mLauncher.areDesktopTasksVisible(); + if (canToggleHomeAllApps) { + mLauncher.toggleAllApps(focusSearch); + return; + } + super.toggleAllApps(focusSearch); } @Override diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 57bcc14ff3..4dc212b956 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -608,16 +608,6 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(false); } - /** Toggles Taskbar All Apps overlay. */ - public void toggleAllApps() { - mControllers.taskbarAllAppsController.toggle(); - } - - /** Toggles Taskbar All Apps overlay with keyboard ready for search. */ - public void toggleAllAppsSearch() { - mControllers.taskbarAllAppsController.toggleSearch(); - } - @Override public DeviceProfile getDeviceProfile() { return mDeviceProfile; @@ -2075,10 +2065,6 @@ public class TaskbarActivityContext extends BaseTaskbarContext { mControllers.keyboardQuickSwitchController.closeQuickSwitchView(false); } - boolean canToggleHomeAllApps() { - return mControllers.uiController.canToggleHomeAllApps(); - } - boolean isIconAlignedWithHotseat() { return mControllers.uiController.isIconAlignedWithHotseat(); } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java index 943c44ed5c..70fa1ec1ab 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java @@ -511,14 +511,14 @@ public class TaskbarManager { /** * Toggles All Apps for Taskbar or Launcher depending on the current state. */ - public void toggleAllApps() { + public void toggleAllAppsSearch() { TaskbarActivityContext taskbar = getTaskbarForDisplay(getDefaultDisplayId()); - if (taskbar == null || taskbar.canToggleHomeAllApps()) { + if (taskbar == null) { // Home All Apps should be toggled from this class, because the controllers are not // initialized when Taskbar is disabled (i.e. TaskbarActivityContext is null). - if (mActivity instanceof Launcher l) l.toggleAllAppsSearch(); + if (mActivity instanceof Launcher l) l.toggleAllApps(true); } else { - taskbar.toggleAllAppsSearch(); + taskbar.getControllers().uiController.toggleAllApps(true); } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java index 89bcb41fc9..ea0b81eeea 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java @@ -207,9 +207,18 @@ public class TaskbarUIController implements BubbleBarController.BubbleBarLocatio return false; } - /** Returns {@code true} if Home All Apps available instead of Taskbar All Apps. */ - protected boolean canToggleHomeAllApps() { - return false; + + /** + * Toggles all apps UI. Default implementation opens Taskbar All Apps, but may be overridden to + * open different Alls Apps variant depending on the context. + * @param focusSearch indicates whether All Apps should be opened with search input focused. + */ + protected void toggleAllApps(boolean focusSearch) { + if (focusSearch) { + mControllers.taskbarAllAppsController.toggleSearch(); + } else { + mControllers.taskbarAllAppsController.toggle(); + } } @CallSuper diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewCallbacks.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewCallbacks.java index c7ef960a52..066d4df2f3 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewCallbacks.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewCallbacks.java @@ -66,7 +66,16 @@ public class TaskbarViewCallbacks { InteractionJankMonitorWrapper.begin(v, Cuj.CUJ_LAUNCHER_OPEN_ALL_APPS, /* tag= */ "TASKBAR_BUTTON"); mActivity.getStatsLogManager().logger().log(LAUNCHER_TASKBAR_ALLAPPS_BUTTON_TAP); - mControllers.taskbarAllAppsController.toggle(); + if (DisplayController.showLockedTaskbarOnHome(mActivity) + || DisplayController.showDesktopTaskbarForFreeformDisplay(mActivity)) { + // If the taskbar can be shown on the home screen, use mAllAppsToggler to toggle all + // apps, which will toggle the launcher activity all apps when on home screen. + // TODO(b/395913143): Reconsider this if a gap in taskbar all apps functionality that + // prevents users to drag items to workspace is addressed. + mControllers.uiController.toggleAllApps(false); + } else { + mControllers.taskbarAllAppsController.toggle(); + } } /** Trigger All Apps button long click action. */ diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index ba4c65a293..7c72af95c7 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -705,7 +705,7 @@ public class TouchInteractionService extends Service { public void send(int code, Intent intent, String resolvedType, IBinder allowlistToken, IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) { - MAIN_EXECUTOR.execute(() -> mTaskbarManager.toggleAllApps()); + MAIN_EXECUTOR.execute(() -> mTaskbarManager.toggleAllAppsSearch()); } }); } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 3edba990e7..64d61c126b 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1674,7 +1674,7 @@ public class Launcher extends StatefulActivity } else if (Intent.ACTION_ALL_APPS.equals(intent.getAction())) { showAllAppsFromIntent(alreadyOnHome); } else if (INTENT_ACTION_ALL_APPS_TOGGLE.equals(intent.getAction())) { - toggleAllAppsSearch(alreadyOnHome); + toggleAllApps(alreadyOnHome, true); } else if (Intent.ACTION_SHOW_WORK_APPS.equals(intent.getAction())) { showAllAppsWithSelectedTabFromIntent(alreadyOnHome, ActivityAllAppsContainerView.AdapterHolder.WORK); @@ -1688,12 +1688,15 @@ public class Launcher extends StatefulActivity // Overridden } - /** Toggles Launcher All Apps with keyboard ready for search. */ - public void toggleAllAppsSearch() { - toggleAllAppsSearch(/* alreadyOnHome= */ true); + /** + * Toggles Launcher All Apps. + * @param focusSearch Indicates whether to make All Apps keyboard ready for search. + */ + public void toggleAllApps(boolean focusSearch) { + toggleAllApps(/* alreadyOnHome= */ true, focusSearch); } - protected void toggleAllAppsSearch(boolean alreadyOnHome) { + private void toggleAllApps(boolean alreadyOnHome, boolean focusSearch) { if (getStateManager().isInStableState(ALL_APPS)) { getStateManager().goToState(NORMAL, alreadyOnHome); } else { @@ -1705,7 +1708,8 @@ public class Launcher extends StatefulActivity new AnimationSuccessListener() { @Override public void onAnimationSuccess(Animator animator) { - if (mAppsView.getSearchUiManager().getEditText() != null) { + if (focusSearch + && mAppsView.getSearchUiManager().getEditText() != null) { mAppsView.getSearchUiManager().getEditText().requestFocus(); } }