Use pinned taskbar with desktop tasks on freeform displays

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: I5c1e21799609c28ec44cc190bfc681934907199f
This commit is contained in:
Toni Barzic
2025-02-04 13:00:37 -08:00
parent 6c19792dcd
commit 860c4ee680
7 changed files with 128 additions and 5 deletions
@@ -50,8 +50,9 @@ class TaskbarDesktopModeController(
fun shouldShowDesktopTasksInTaskbar(): Boolean {
return desktopVisibilityController.areDesktopTasksVisible() ||
DisplayController.showLockedTaskbarOnHome(context) &&
taskbarControllers.taskbarStashController.isOnHome
DisplayController.showDesktopTaskbarForFreeformDisplay(context) ||
(DisplayController.showLockedTaskbarOnHome(context) &&
taskbarControllers.taskbarStashController.isOnHome)
}
fun getTaskbarCornerRoundness(doesAnyTaskRequireTaskbarRounding: Boolean): Float {
@@ -58,7 +58,6 @@ import com.android.launcher3.QuickstepTransitionManager;
import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimatedFloat;
import com.android.launcher3.anim.AnimatorListeners;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.BubbleLauncherState;
import com.android.launcher3.uioverrides.QuickstepLauncher;
@@ -714,6 +713,10 @@ public class TaskbarLauncherStateController {
private static boolean shouldShowTaskbar(Context context, boolean isInLauncher,
boolean isInOverview) {
if (DisplayController.showDesktopTaskbarForFreeformDisplay(context)) {
return true;
}
if (DisplayController.showLockedTaskbarOnHome(context) && isInLauncher) {
return true;
}
@@ -769,9 +772,14 @@ public class TaskbarLauncherStateController {
* This refers to the intended state - a transition to this state might be in progress.
*/
public boolean isTaskbarAlignedWithHotseat() {
if (DisplayController.showDesktopTaskbarForFreeformDisplay(mLauncher)) {
return false;
}
if (DisplayController.showLockedTaskbarOnHome(mLauncher) && isInLauncher()) {
return false;
}
return mLauncherState.isTaskbarAlignedWithHotseat(mLauncher);
}
@@ -301,7 +301,8 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
// TODO(b/390665752): Feature to "lock" pinned taskbar to home screen will be superseded by
// pinning, in other launcher states, at which point this variable can be removed.
mInAppStateAffectsDesktopTasksVisibilityInTaskbar =
DisplayController.showLockedTaskbarOnHome(mActivity);
!DisplayController.showDesktopTaskbarForFreeformDisplay(mActivity)
&& DisplayController.showLockedTaskbarOnHome(mActivity);
mTaskbarBackgroundDuration = activity.getResources().getInteger(
R.integer.taskbar_background_duration);
@@ -33,6 +33,7 @@ import com.android.launcher3.util.WindowBounds;
import com.android.launcher3.util.window.CachedDisplayInfo;
import com.android.launcher3.util.window.WindowManagerProxy;
import com.android.quickstep.SystemUiProxy;
import com.android.window.flags.Flags;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import java.util.List;
@@ -89,6 +90,25 @@ public class SystemWindowManagerProxy extends WindowManagerProxy {
return isFreeformDisplay;
}
@Override
public boolean showDesktopTaskbarForFreeformDisplay(Context displayInfoContext) {
if (!DesktopModeStatus.canEnterDesktopMode(displayInfoContext)) {
return false;
}
if (!DesktopModeStatus.enterDesktopByDefaultOnFreeformDisplay(displayInfoContext)) {
return false;
}
if (!Flags.enableDesktopTaskbarOnFreeformDisplays()) {
return false;
}
final boolean isFreeformDisplay = displayInfoContext.getResources().getConfiguration()
.windowConfiguration.getWindowingMode() == WINDOWING_MODE_FREEFORM;
return isFreeformDisplay;
}
@Override
public boolean isHomeVisible(Context context) {
return SystemUiProxy.INSTANCE.get(context).getHomeVisibilityState().isHomeVisible();