From fd39b428f90e6567324f58d4490cf2ed4217acc8 Mon Sep 17 00:00:00 2001 From: Toni Barzic Date: Tue, 18 Mar 2025 17:56:14 +0000 Subject: [PATCH] Avoid some unnecessary taskbar recreations Skips recreate taskbar calls for desktop taskbar on freeform display feature. When the feature is enabled, the taskbar will be consistent on freeform displays across different UI states. This means that changes in launcher visibility, and desktop mode will not expected to change the flavour of taskbar used on the display, making taskbar recreation unnecessary in those cases. Bug: 390665752 Flag: com.android.window.flags.enable_desktop_taskbar_on_freeform_displays Test: manual on desktop device. verify correct taskbar is shown on home screen, in overview, in desktop mode, with fullscreen app shown. Verify opening/launching apps from taskbar works as expected. Change-Id: Ib679aa27afc1087226f05d0e914bfe6ff67bd24b --- .../launcher3/taskbar/LauncherTaskbarUIController.java | 4 +++- .../com/android/launcher3/taskbar/TaskbarManager.java | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java index 206e9ccd28..e421009121 100644 --- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java @@ -224,8 +224,10 @@ public class LauncherTaskbarUIController extends TaskbarUIController { */ @Override public void onLauncherVisibilityChanged(boolean isVisible) { + final TaskbarActivityContext taskbarContext = mControllers.taskbarActivityContext; if (DesktopModeStatus.enterDesktopByDefaultOnFreeformDisplay(mLauncher) - && mControllers.taskbarActivityContext.isPrimaryDisplay()) { + && !taskbarContext.showDesktopTaskbarForFreeformDisplay() + && taskbarContext.isPrimaryDisplay()) { DisplayController.INSTANCE.get(mLauncher).notifyConfigChange(); } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java index dcd52cfe79..58cd37c54e 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java @@ -230,7 +230,8 @@ public class TaskbarManager implements DisplayDecorationListener { } // Only Handles Special Exit Cases for Desktop Mode Taskbar Recreation. if (((flags & CHANGE_TASKBAR_PINNING) != 0) || (taskbarActivityContext != null - && !taskbarActivityContext.showLockedTaskbarOnHome())) { + && !taskbarActivityContext.showLockedTaskbarOnHome() + && !taskbarActivityContext.showDesktopTaskbarForFreeformDisplay())) { recreateTaskbars(); } } else { @@ -324,7 +325,8 @@ public class TaskbarManager implements DisplayDecorationListener { TaskbarActivityContext taskbarActivityContext = getTaskbarForDisplay( displayId); if (taskbarActivityContext != null - && !taskbarActivityContext.isInOverview()) { + && !taskbarActivityContext.isInOverview() + && !taskbarActivityContext.showDesktopTaskbarForFreeformDisplay()) { mShouldIgnoreNextDesktopModeChangeFromDisplayController = true; AnimatorSet animatorSet = taskbarActivityContext.onDestroyAnimation( TASKBAR_DESTROY_DURATION); @@ -347,7 +349,8 @@ public class TaskbarManager implements DisplayDecorationListener { TaskbarActivityContext taskbarActivityContext = getTaskbarForDisplay( displayId); - if (taskbarActivityContext != null) { + if (taskbarActivityContext != null + && !taskbarActivityContext.showDesktopTaskbarForFreeformDisplay()) { mShouldIgnoreNextDesktopModeChangeFromDisplayController = true; AnimatorSet animatorSet = taskbarActivityContext.onDestroyAnimation( TASKBAR_DESTROY_DURATION);