From 768019357fbd2b94aa79cf5f0fdf66c30c00309c Mon Sep 17 00:00:00 2001 From: Mady Mellor Date: Thu, 6 Feb 2025 10:28:08 -0800 Subject: [PATCH] Allow bubble bar to show on phones if the flag is enabled * Check for bubble bar on phone being enabled in most places tiny taskbar was checking * Forces taskbar to always be stashed when bubble bar is enabled * There are a couple of visual issues with the flag enabled: - extra space in overview - the hotseat is a lil squished on home when bubbles are there Flag: com.android.wm.shell.enable_bubble_bar_on_phones Test: manual - enable bubble bar on phones observe that bubble bar is enabled and kind of works Bug: 394869612 Change-Id: I56d3045c78c6c31dcacf16744033b34c9aa5f6e0 --- .../taskbar/StashedHandleViewController.java | 3 ++- .../launcher3/taskbar/TaskbarActivityContext.java | 11 +++++++++-- .../launcher3/taskbar/TaskbarBackgroundRenderer.kt | 2 +- .../launcher3/taskbar/TaskbarStashController.java | 8 ++++++-- src/com/android/launcher3/DeviceProfile.java | 5 ++++- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java b/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java index b6b090c39b..2e5bebcb1b 100644 --- a/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java @@ -119,7 +119,8 @@ public class StashedHandleViewController implements TaskbarControllers.LoggableT mControllers = controllers; DeviceProfile deviceProfile = mActivity.getDeviceProfile(); Resources resources = mActivity.getResources(); - if (mActivity.isPhoneGestureNavMode() || mActivity.isTinyTaskbar()) { + if (mActivity.isPhoneGestureNavMode() || mActivity.isTinyTaskbar() + || mActivity.isBubbleBarOnPhone()) { mTaskbarSize = resources.getDimensionPixelSize(R.dimen.taskbar_phone_size); mStashedHandleWidth = resources.getDimensionPixelSize(R.dimen.taskbar_stashed_small_screen); diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 11cc22dfa9..f8821feb8a 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -47,6 +47,8 @@ import static com.android.quickstep.util.AnimUtils.completeRunnableListCallback; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_VISIBLE; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING; import static com.android.window.flags.Flags.enableStartLaunchTransitionFromTaskbarBugfix; +import static com.android.wm.shell.Flags.enableBubbleBar; +import static com.android.wm.shell.Flags.enableBubbleBarOnPhones; import static com.android.wm.shell.Flags.enableTinyTaskbar; import static java.lang.invoke.MethodHandles.Lookup.PROTECTED; @@ -298,9 +300,10 @@ public class TaskbarActivityContext extends BaseTaskbarContext { // If Bubble bar is present, TaskbarControllers depends on it so build it first. Optional bubbleControllersOptional = Optional.empty(); BubbleBarController.onTaskbarRecreated(); + final boolean deviceBubbleBarEnabled = enableBubbleBarOnPhones() + || (!mDeviceProfile.isPhone && !mDeviceProfile.isVerticalBarLayout()); if (BubbleBarController.isBubbleBarEnabled() - && !mDeviceProfile.isPhone - && !mDeviceProfile.isVerticalBarLayout() + && deviceBubbleBarEnabled && bubbleBarView != null ) { Optional bubbleHandleController = Optional.empty(); @@ -512,6 +515,10 @@ public class TaskbarActivityContext extends BaseTaskbarContext { return enableTinyTaskbar() && mDeviceProfile.isPhone && mDeviceProfile.isTaskbarPresent; } + public boolean isBubbleBarOnPhone() { + return enableBubbleBarOnPhones() && enableBubbleBar() && mDeviceProfile.isPhone; + } + /** * Returns {@code true} iff bubble bar is enabled (but not necessarily visible / * containing bubbles). diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt index e44bce1a07..6d238530a4 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt @@ -108,7 +108,7 @@ class TaskbarBackgroundRenderer(private val context: TaskbarActivityContext) { fun updateStashedHandleWidth(context: TaskbarActivityContext, res: Resources) { stashedHandleWidth = res.getDimensionPixelSize( - if (context.isPhoneMode || context.isTinyTaskbar) { + if (context.isPhoneMode || context.isTinyTaskbar || context.isBubbleBarOnPhone) { R.dimen.taskbar_stashed_small_screen } else { R.dimen.taskbar_stashed_handle_width diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java index 6016394c60..95724ad6d2 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java @@ -104,6 +104,8 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba private static final int FLAG_DELAY_TASKBAR_BG_TAG = 1 << 12; public static final int FLAG_STASHED_FOR_BUBBLES = 1 << 13; // show handle for stashed hotseat public static final int FLAG_TASKBAR_HIDDEN = 1 << 14; // taskbar hidden during dream, etc... + // taskbar should always be stashed for bubble bar on phone + public static final int FLAG_STASHED_BUBBLE_BAR_ON_PHONE = 1 << 15; // If any of these flags are enabled, isInApp should return true. private static final int FLAGS_IN_APP = FLAG_IN_APP | FLAG_IN_SETUP; @@ -126,7 +128,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba // If any of these flags are enabled, the taskbar must be stashed. private static final int FLAGS_FORCE_STASHED = FLAG_STASHED_SYSUI | FLAG_STASHED_DEVICE_LOCKED | FLAG_STASHED_IN_TASKBAR_ALL_APPS | FLAG_STASHED_SMALL_SCREEN - | FLAG_STASHED_FOR_BUBBLES; + | FLAG_STASHED_FOR_BUBBLES | FLAG_STASHED_BUBBLE_BAR_ON_PHONE; /** * How long to stash/unstash when manually invoked via long press. @@ -359,6 +361,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba // For now, assume we're in an app, since LauncherTaskbarUIController won't be able to tell // us that we're paused until a bit later. This avoids flickering upon recreating taskbar. updateStateForFlag(FLAG_IN_APP, true); + updateStateForFlag(FLAG_STASHED_BUBBLE_BAR_ON_PHONE, mActivity.isBubbleBarOnPhone()); applyState(/* duration = */ 0); @@ -574,7 +577,8 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba */ public void updateAndAnimateTransientTaskbar(boolean stash, boolean shouldBubblesFollow, boolean delayTaskbarBackground) { - if (!DisplayController.isTransientTaskbar(mActivity)) { + if (!DisplayController.isTransientTaskbar(mActivity) + || mActivity.isBubbleBarOnPhone()) { return; } diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index f34add8d3f..456150684a 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -31,6 +31,7 @@ import static com.android.launcher3.testing.shared.ResourceUtils.pxFromDp; import static com.android.launcher3.testing.shared.ResourceUtils.roundPxValueFromFloat; import static com.android.wm.shell.Flags.enableBubbleBar; import static com.android.wm.shell.Flags.enableTinyTaskbar; +import static com.android.wm.shell.Flags.enableBubbleBarOnPhones; import android.annotation.SuppressLint; import android.content.Context; @@ -420,7 +421,9 @@ public class DeviceProfile { isTablet = info.isTablet(windowBounds); isPhone = !isTablet; isTwoPanels = isTablet && isMultiDisplay; - isTaskbarPresent = (isTablet || (enableTinyTaskbar() && isGestureMode)) + boolean taskbarOrBubbleBarOnPhones = enableTinyTaskbar() + || (enableBubbleBar() && enableBubbleBarOnPhones()); + isTaskbarPresent = (isTablet || (taskbarOrBubbleBarOnPhones && isGestureMode)) && wmProxy.isTaskbarDrawnInProcess(); // Some more constants.