Merge "If we're going to overview we might need to unstash" into main

This commit is contained in:
Mady Mellor
2024-10-03 16:12:09 +00:00
committed by Android (Google) Code Review
6 changed files with 83 additions and 56 deletions
@@ -58,6 +58,7 @@ 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;
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.MultiPropertyFactory.MultiProperty;
@@ -479,8 +480,12 @@ public class TaskbarLauncherStateController {
boolean onOverview = mLauncherState == LauncherState.OVERVIEW;
boolean hotseatIconsVisible = isInLauncher && mLauncherState.areElementsVisible(
mLauncher, HOTSEAT_ICONS);
controllers.bubbleStashController.setBubblesShowingOnHome(hotseatIconsVisible);
controllers.bubbleStashController.setBubblesShowingOnOverview(onOverview);
BubbleLauncherState state = onOverview
? BubbleLauncherState.OVERVIEW
: hotseatIconsVisible
? BubbleLauncherState.HOME
: BubbleLauncherState.IN_APP;
controllers.bubbleStashController.setLauncherState(state);
});
TaskbarStashController stashController = mControllers.taskbarStashController;
@@ -56,14 +56,29 @@ interface BubbleStashController {
fun runAfterInit(action: Runnable)
}
/** Launcher states bubbles cares about */
enum class BubbleLauncherState {
/* When launcher is in overview */
OVERVIEW,
/* When launcher is on home */
HOME,
/* We're in an app */
IN_APP,
}
/** The current launcher state */
var launcherState: BubbleLauncherState
/** Whether bubble bar is currently stashed */
val isStashed: Boolean
/** Whether launcher enters or exits the home page. */
var isBubblesShowingOnHome: Boolean
val isBubblesShowingOnHome: Boolean
get() = launcherState == BubbleLauncherState.HOME
/** Whether launcher enters or exits the overview page. */
var isBubblesShowingOnOverview: Boolean
val isBubblesShowingOnOverview: Boolean
get() = launcherState == BubbleLauncherState.OVERVIEW
/** Updated when sysui locked state changes, when locked, bubble bar is not shown. */
var isSysuiLocked: Boolean
@@ -26,6 +26,7 @@ import com.android.launcher3.anim.AnimatedFloat
import com.android.launcher3.taskbar.TaskbarInsetsController
import com.android.launcher3.taskbar.bubbles.BubbleBarViewController
import com.android.launcher3.taskbar.bubbles.BubbleStashedHandleViewController
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.BubbleLauncherState
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.Companion.BAR_STASH_DURATION
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.Companion.BAR_TRANSLATION_DURATION
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.ControllersAfterInitAction
@@ -45,29 +46,21 @@ class PersistentBubbleStashController(
private lateinit var bubbleBarScaleAnimator: AnimatedFloat
private lateinit var controllersAfterInitAction: ControllersAfterInitAction
override var isBubblesShowingOnHome: Boolean = false
set(onHome) {
if (field == onHome) return
field = onHome
override var launcherState: BubbleLauncherState = BubbleLauncherState.IN_APP
set(state) {
if (field == state) return
val transitionFromHome = field == BubbleLauncherState.HOME
field = state
if (!bubbleBarViewController.hasBubbles()) {
// if there are no bubbles, there's nothing to show, so just return.
return
}
if (onHome) {
// When transition to home we should show collapse the bubble bar
updateExpandedState(expand = false)
}
animateBubbleBarY()
bubbleBarViewController.onBubbleBarConfigurationChanged(/* animate= */ true)
}
override var isBubblesShowingOnOverview: Boolean = false
set(onOverview) {
if (field == onOverview) return
field = onOverview
if (!onOverview) {
// When transition from overview we should show collapse the bubble bar
updateExpandedState(expand = false)
// If we're transitioning anywhere, bubble bar should be collapsed
updateExpandedState(expand = false)
if (transitionFromHome || field == BubbleLauncherState.HOME) {
// If we're transitioning to or from home, animate the Y because we're in hotseat
// on home but in persistent taskbar elsewhere so the position is different.
animateBubbleBarY()
}
bubbleBarViewController.onBubbleBarConfigurationChanged(/* animate= */ true)
}
@@ -36,6 +36,7 @@ import com.android.launcher3.taskbar.TaskbarStashController.TASKBAR_STASH_ALPHA_
import com.android.launcher3.taskbar.TaskbarStashController.TRANSIENT_TASKBAR_STASH_ALPHA_DURATION
import com.android.launcher3.taskbar.bubbles.BubbleBarViewController
import com.android.launcher3.taskbar.bubbles.BubbleStashedHandleViewController
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.BubbleLauncherState
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.Companion.BAR_STASH_DURATION
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.Companion.BAR_TRANSLATION_DURATION
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.ControllersAfterInitAction
@@ -81,36 +82,26 @@ class TransientBubbleStashController(
override var isStashed: Boolean = false
@VisibleForTesting set
override var isBubblesShowingOnHome: Boolean = false
set(onHome) {
if (field == onHome) return
field = onHome
override var launcherState: BubbleLauncherState = BubbleLauncherState.IN_APP
set(state) {
if (field == state) return
field = state
if (!bubbleBarViewController.hasBubbles()) {
// if there are no bubbles, there's nothing to show, so just return.
return
}
if (onHome) {
updateStashedAndExpandedState(stash = false, expand = false)
// When transitioning from app to home we need to animate the bubble bar
if (field == BubbleLauncherState.HOME) {
// When to home we need to animate the bubble bar
// here to align with hotseat center.
animateBubbleBarYToHotseat()
} else if (!bubbleBarViewController.isExpanded) {
updateStashedAndExpandedState(stash = true, expand = false)
}
bubbleBarViewController.onBubbleBarConfigurationChanged(/* animate= */ true)
}
override var isBubblesShowingOnOverview: Boolean = false
set(onOverview) {
if (field == onOverview) return
field = onOverview
if (onOverview) {
} else if (field == BubbleLauncherState.OVERVIEW) {
// When transitioning to overview we need to animate the bubble bar to align with
// the taskbar bottom.
animateBubbleBarYToTaskbar()
} else {
updateStashedAndExpandedState(stash = true, expand = false)
}
// Only stash if we're in an app, otherwise we're in home or overview where we should
// be un-stashed
updateStashedAndExpandedState(field == BubbleLauncherState.IN_APP, expand = false)
bubbleBarViewController.onBubbleBarConfigurationChanged(/* animate= */ true)
}