diff --git a/quickstep/res/layout/transient_taskbar.xml b/quickstep/res/layout/transient_taskbar.xml index 62c69336e7..bf4b811bb3 100644 --- a/quickstep/res/layout/transient_taskbar.xml +++ b/quickstep/res/layout/transient_taskbar.xml @@ -38,6 +38,20 @@ android:layout_width="match_parent" android:layout_height="match_parent"/> + + + + \ No newline at end of file diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 6f40174e04..d94d8f7fe0 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -84,6 +84,12 @@ import com.android.launcher3.popup.PopupDataProvider; import com.android.launcher3.taskbar.TaskbarAutohideSuspendController.AutohideSuspendFlag; import com.android.launcher3.taskbar.TaskbarTranslationController.TransitionCallback; import com.android.launcher3.taskbar.allapps.TaskbarAllAppsController; +import com.android.launcher3.taskbar.bubbles.BubbleBarController; +import com.android.launcher3.taskbar.bubbles.BubbleBarView; +import com.android.launcher3.taskbar.bubbles.BubbleBarViewController; +import com.android.launcher3.taskbar.bubbles.BubbleControllers; +import com.android.launcher3.taskbar.bubbles.BubbleStashController; +import com.android.launcher3.taskbar.bubbles.BubbleStashedHandleViewController; import com.android.launcher3.taskbar.overlay.TaskbarOverlayController; import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.shared.TestProtocol; @@ -107,6 +113,7 @@ import com.android.systemui.unfold.updates.RotationChangeProvider; import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider; import java.io.PrintWriter; +import java.util.Optional; /** * The {@link ActivityContext} with which we inflate Taskbar-related Views. This allows UI elements @@ -196,11 +203,23 @@ public class TaskbarActivityContext extends BaseTaskbarContext { TaskbarScrimView taskbarScrimView = mDragLayer.findViewById(R.id.taskbar_scrim); FrameLayout navButtonsView = mDragLayer.findViewById(R.id.navbuttons_view); StashedHandleView stashedHandleView = mDragLayer.findViewById(R.id.stashed_handle); + BubbleBarView bubbleBarView = mDragLayer.findViewById(R.id.taskbar_bubbles); + StashedHandleView bubbleHandleView = mDragLayer.findViewById(R.id.stashed_bubble_handle); mAccessibilityDelegate = new TaskbarShortcutMenuAccessibilityDelegate(this); final boolean isDesktopMode = getPackageManager().hasSystemFeature(FEATURE_PC); + // If Bubble bar is present, TaskbarControllers depends on it so build it first. + Optional bubbleControllersOptional = Optional.empty(); + if (BubbleBarController.BUBBLE_BAR_ENABLED) { + bubbleControllersOptional = Optional.of(new BubbleControllers( + new BubbleBarController(this, bubbleBarView), + new BubbleBarViewController(this, bubbleBarView), + new BubbleStashController(this), + new BubbleStashedHandleViewController(this, bubbleHandleView))); + } + // Construct controllers. mControllers = new TaskbarControllers(this, new TaskbarDragController(this), @@ -240,7 +259,8 @@ public class TaskbarActivityContext extends BaseTaskbarContext { : TaskbarRecentAppsController.DEFAULT, new TaskbarEduTooltipController(this), new KeyboardQuickSwitchController(), - new TaskbarDividerPopupController(this)); + new TaskbarDividerPopupController(this), + bubbleControllersOptional); } public void init(@NonNull TaskbarSharedState sharedState) { diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java index 1cd6f50d33..66c2eb3314 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarControllers.java @@ -23,12 +23,14 @@ import androidx.annotation.VisibleForTesting; import com.android.launcher3.anim.AnimatedFloat; import com.android.launcher3.taskbar.allapps.TaskbarAllAppsController; +import com.android.launcher3.taskbar.bubbles.BubbleControllers; import com.android.launcher3.taskbar.overlay.TaskbarOverlayController; import com.android.systemui.shared.rotation.RotationButtonController; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import java.util.Optional; /** * Hosts various taskbar controllers to facilitate passing between one another. @@ -61,6 +63,7 @@ public class TaskbarControllers { public final TaskbarEduTooltipController taskbarEduTooltipController; public final KeyboardQuickSwitchController keyboardQuickSwitchController; public final TaskbarDividerPopupController taskbarPinningController; + public final Optional bubbleControllers; @Nullable private LoggableTaskbarController[] mControllersToLog = null; @Nullable private BackgroundRendererController[] mBackgroundRendererControllers = null; @@ -107,7 +110,8 @@ public class TaskbarControllers { TaskbarRecentAppsController taskbarRecentAppsController, TaskbarEduTooltipController taskbarEduTooltipController, KeyboardQuickSwitchController keyboardQuickSwitchController, - TaskbarDividerPopupController taskbarPinningController) { + TaskbarDividerPopupController taskbarPinningController, + Optional bubbleControllers) { this.taskbarActivityContext = taskbarActivityContext; this.taskbarDragController = taskbarDragController; this.navButtonController = navButtonController; @@ -133,6 +137,7 @@ public class TaskbarControllers { this.taskbarEduTooltipController = taskbarEduTooltipController; this.keyboardQuickSwitchController = keyboardQuickSwitchController; this.taskbarPinningController = taskbarPinningController; + this.bubbleControllers = bubbleControllers; } /** @@ -167,6 +172,7 @@ public class TaskbarControllers { taskbarEduTooltipController.init(this); keyboardQuickSwitchController.init(this); taskbarPinningController.init(this); + bubbleControllers.ifPresent(controllers -> controllers.init(this)); mControllersToLog = new LoggableTaskbarController[] { taskbarDragController, navButtonController, navbarButtonsViewController, @@ -226,6 +232,7 @@ public class TaskbarControllers { taskbarRecentAppsController.onDestroy(); keyboardQuickSwitchController.onDestroy(); taskbarStashController.onDestroy(); + bubbleControllers.ifPresent(controllers -> controllers.onDestroy()); mControllersToLog = null; mBackgroundRendererControllers = null; diff --git a/quickstep/tests/src/com/android/launcher3/taskbar/TaskbarBaseTestCase.kt b/quickstep/tests/src/com/android/launcher3/taskbar/TaskbarBaseTestCase.kt index 20466ad844..2c16c15caf 100644 --- a/quickstep/tests/src/com/android/launcher3/taskbar/TaskbarBaseTestCase.kt +++ b/quickstep/tests/src/com/android/launcher3/taskbar/TaskbarBaseTestCase.kt @@ -16,8 +16,10 @@ package com.android.launcher3.taskbar import com.android.launcher3.taskbar.allapps.TaskbarAllAppsController +import com.android.launcher3.taskbar.bubbles.BubbleControllers import com.android.launcher3.taskbar.overlay.TaskbarOverlayController import com.android.systemui.shared.rotation.RotationButtonController +import java.util.Optional import org.junit.Before import org.mockito.Mock import org.mockito.MockitoAnnotations @@ -54,6 +56,7 @@ abstract class TaskbarBaseTestCase { @Mock lateinit var taskbarEduTooltipController: TaskbarEduTooltipController @Mock lateinit var keyboardQuickSwitchController: KeyboardQuickSwitchController @Mock lateinit var taskbarPinningController: TaskbarDividerPopupController + @Mock lateinit var optionalBubbleControllers: Optional lateinit var taskbarControllers: TaskbarControllers @@ -94,6 +97,7 @@ abstract class TaskbarBaseTestCase { taskbarEduTooltipController, keyboardQuickSwitchController, taskbarPinningController, + optionalBubbleControllers, ) } }