From 26ad16592a56962fc197da55bcf028bed18c89bf Mon Sep 17 00:00:00 2001 From: Toni Barzic Date: Thu, 13 Feb 2025 17:50:08 +0000 Subject: [PATCH] Taskbar on home should open all apps that support drag to workspace If taskbar is shown on home screen, have the taskbar all apps button toggle the launcher activity version of all apps UI. This makes the behavior consistent with how all apps system action (keyboard shortcut) works, and addresses a gap in functionality where users are unable to drag apps from the taskbar all apps UI to the workspace. Bug: 392118517 Flag: com.android.window.flags.enter_desktop_by_default_on_freeform_displays Test: On desktop device, toggle all apps from taskbar on home screen, drag and app from all apps to workspace. Change-Id: Ida0f230bf38c6e1e35041556f33de1be85daf785 --- .../taskbar/LauncherTaskbarUIController.java | 9 +++++++-- .../taskbar/TaskbarActivityContext.java | 14 -------------- .../launcher3/taskbar/TaskbarManager.java | 8 ++++---- .../launcher3/taskbar/TaskbarUIController.java | 15 ++++++++++++--- .../launcher3/taskbar/TaskbarViewCallbacks.java | 11 ++++++++++- .../quickstep/TouchInteractionService.java | 2 +- src/com/android/launcher3/Launcher.java | 16 ++++++++++------ 7 files changed, 44 insertions(+), 31 deletions(-) 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(); } }