From b831f59d6c8a16d9d772ec35ba288d02085bdeee Mon Sep 17 00:00:00 2001 From: Toni Barzic Date: Tue, 18 Mar 2025 17:56:14 +0000 Subject: [PATCH] Layout freeform display taskbar using actual icon sizes The taskbar shown on freeform display taskbar when enable_desktop_taskbar_on_freeform_displays feature is enabled is expected to remain in persistent taskbar state (and never transition to transient taskbar). Given that transitions to transient taskbar is not expected, use actual peristent taskbar sizing to layout the taskbar in this case (similar to three-button navigation taskbar). Bug: 390665752 Flag: com.android.window.flags.enable_desktop_taskbar_on_freeform_displays Test: manual on desktop device - keep opening apps in desktop mode, and verify that taskbar does not enter overflow based on transient taskbar icon dimensions (i.e. that taskbar keeps filling up until it hits intended horizontal margins) Change-Id: If6cdadccf0fe4da1462b437a13def78f6050e3bb --- .../com/android/launcher3/taskbar/TaskbarView.java | 13 +++++++++++-- .../launcher3/taskbar/TaskbarViewController.java | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java index b2989cd81a..93f615180e 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java @@ -160,7 +160,7 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar int actualMargin = resources.getDimensionPixelSize(R.dimen.taskbar_icon_spacing); int actualIconSize = mActivityContext.getDeviceProfile().taskbarIconSize; - if (enableTaskbarPinning() && !mActivityContext.isThreeButtonNav()) { + if (enableTaskbarPinning() && canTransitionToTransientTaskbar()) { DeviceProfile deviceProfile = mActivityContext.getTransientTaskbarDeviceProfile(); actualIconSize = deviceProfile.taskbarIconSize; } @@ -235,7 +235,7 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar // All apps icon takes less space compared to normal icon size, reserve space for the icon // separately. boolean forceTransientTaskbarSize = - enableTaskbarPinning() && !mActivityContext.isThreeButtonNav(); + enableTaskbarPinning() && canTransitionToTransientTaskbar(); availableWidth -= iconSize - (int) getResources().getDimension( mAllAppsButtonContainer.getAllAppsButtonTranslationXOffset( forceTransientTaskbarSize || mActivityContext.isTransientTaskbar())); @@ -244,6 +244,15 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar return Math.floorDiv(availableWidth, iconSize) + additionalIcons; } + /** + * Whether the taskbar in the state context supports transition to a transient taskbar (e.g. + * using a popup menu). + */ + boolean canTransitionToTransientTaskbar() { + return !mActivityContext.isThreeButtonNav() + && !mActivityContext.showDesktopTaskbarForFreeformDisplay(); + } + /** * Recalculates the max number of icons the taskbar view can show without entering overflow. * Returns whether the max number of icons changed and the change affects the number of icons diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java index ac9d2ba8bf..3cbce604ff 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java @@ -563,7 +563,7 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar sizeDiffTranslationRange *= -1; } - if (mActivity.isThreeButtonNav()) { + if (!mTaskbarView.canTransitionToTransientTaskbar()) { mTaskbarView.getAllAppsButtonContainer() .setTranslationXForTaskbarAllAppsIcon(allAppIconTranslateRange); return;