mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-19 18:58:19 +00:00
Merge "If we're going to overview we might need to unstash" into main
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.android.launcher3.anim.AnimatedFloat
|
||||
import com.android.launcher3.taskbar.TaskbarInsetsController
|
||||
import com.android.launcher3.taskbar.bubbles.BubbleBarView
|
||||
import com.android.launcher3.taskbar.bubbles.BubbleBarViewController
|
||||
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.BubbleLauncherState
|
||||
import com.android.launcher3.util.MultiValueAlpha
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import org.junit.Before
|
||||
@@ -85,12 +86,12 @@ class PersistentBubbleStashControllerTest {
|
||||
fun setBubblesShowingOnHomeUpdatedToFalse_barPositionYUpdated_controllersNotified() {
|
||||
// Given bubble bar is on home and has bubbles
|
||||
whenever(bubbleBarViewController.hasBubbles()).thenReturn(false)
|
||||
persistentTaskBarStashController.isBubblesShowingOnHome = true
|
||||
persistentTaskBarStashController.launcherState = BubbleLauncherState.HOME
|
||||
whenever(bubbleBarViewController.hasBubbles()).thenReturn(true)
|
||||
|
||||
// When switch out of the home screen
|
||||
getInstrumentation().runOnMainSync {
|
||||
persistentTaskBarStashController.isBubblesShowingOnHome = false
|
||||
persistentTaskBarStashController.launcherState = BubbleLauncherState.IN_APP
|
||||
}
|
||||
|
||||
// Then translation Y is animating and the bubble bar controller is notified
|
||||
@@ -110,7 +111,7 @@ class PersistentBubbleStashControllerTest {
|
||||
|
||||
// When switch to home screen
|
||||
getInstrumentation().runOnMainSync {
|
||||
persistentTaskBarStashController.isBubblesShowingOnHome = true
|
||||
persistentTaskBarStashController.launcherState = BubbleLauncherState.HOME
|
||||
}
|
||||
|
||||
// Then translation Y is animating and the bubble bar controller is notified
|
||||
@@ -127,11 +128,11 @@ class PersistentBubbleStashControllerTest {
|
||||
@Test
|
||||
fun setBubblesShowingOnOverviewUpdatedToFalse_controllersNotified() {
|
||||
// Given bubble bar is on overview
|
||||
persistentTaskBarStashController.isBubblesShowingOnOverview = true
|
||||
persistentTaskBarStashController.launcherState = BubbleLauncherState.OVERVIEW
|
||||
clearInvocations(bubbleBarViewController)
|
||||
|
||||
// When switch out of the overview screen
|
||||
persistentTaskBarStashController.isBubblesShowingOnOverview = false
|
||||
persistentTaskBarStashController.launcherState = BubbleLauncherState.IN_APP
|
||||
|
||||
// Then bubble bar controller is notified
|
||||
verify(bubbleBarViewController).onBubbleBarConfigurationChanged(/* animate= */ true)
|
||||
@@ -140,7 +141,7 @@ class PersistentBubbleStashControllerTest {
|
||||
@Test
|
||||
fun setBubblesShowingOnOverviewUpdatedToTrue_controllersNotified() {
|
||||
// When switch to the overview screen
|
||||
persistentTaskBarStashController.isBubblesShowingOnOverview = true
|
||||
persistentTaskBarStashController.launcherState = BubbleLauncherState.OVERVIEW
|
||||
|
||||
// Then bubble bar controller is notified
|
||||
verify(bubbleBarViewController).onBubbleBarConfigurationChanged(/* animate= */ true)
|
||||
@@ -150,7 +151,7 @@ class PersistentBubbleStashControllerTest {
|
||||
fun isSysuiLockedSwitchedToFalseForOverview_unlockAnimationIsShown() {
|
||||
// Given screen is locked and bubble bar has bubbles
|
||||
persistentTaskBarStashController.isSysuiLocked = true
|
||||
persistentTaskBarStashController.isBubblesShowingOnOverview = true
|
||||
persistentTaskBarStashController.launcherState = BubbleLauncherState.OVERVIEW
|
||||
whenever(bubbleBarViewController.hasBubbles()).thenReturn(true)
|
||||
|
||||
// When switch to the overview screen
|
||||
@@ -211,14 +212,14 @@ class PersistentBubbleStashControllerTest {
|
||||
fun bubbleBarTranslationYForTaskbar() {
|
||||
// Give bubble bar is on home
|
||||
whenever(bubbleBarViewController.hasBubbles()).thenReturn(false)
|
||||
persistentTaskBarStashController.isBubblesShowingOnHome = true
|
||||
persistentTaskBarStashController.launcherState = BubbleLauncherState.HOME
|
||||
|
||||
// Then bubbleBarTranslationY would be HOTSEAT_TRANSLATION_Y
|
||||
assertThat(persistentTaskBarStashController.bubbleBarTranslationY)
|
||||
.isEqualTo(HOTSEAT_TRANSLATION_Y)
|
||||
|
||||
// Give bubble bar is not on home
|
||||
persistentTaskBarStashController.isBubblesShowingOnHome = false
|
||||
persistentTaskBarStashController.launcherState = BubbleLauncherState.IN_APP
|
||||
|
||||
// Then bubbleBarTranslationY would be TASK_BAR_TRANSLATION_Y
|
||||
assertThat(persistentTaskBarStashController.bubbleBarTranslationY)
|
||||
|
||||
@@ -34,6 +34,7 @@ import com.android.launcher3.taskbar.bubbles.BubbleBarView
|
||||
import com.android.launcher3.taskbar.bubbles.BubbleBarViewController
|
||||
import com.android.launcher3.taskbar.bubbles.BubbleStashedHandleViewController
|
||||
import com.android.launcher3.taskbar.bubbles.BubbleView
|
||||
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController.BubbleLauncherState
|
||||
import com.android.launcher3.util.MultiValueAlpha
|
||||
import com.android.wm.shell.shared.animation.PhysicsAnimator
|
||||
import com.android.wm.shell.shared.animation.PhysicsAnimatorTestUtils
|
||||
@@ -121,7 +122,7 @@ class TransientBubbleStashControllerTest {
|
||||
|
||||
// When switch out of the home screen
|
||||
getInstrumentation().runOnMainSync {
|
||||
mTransientBubbleStashController.isBubblesShowingOnHome = true
|
||||
mTransientBubbleStashController.launcherState = BubbleLauncherState.HOME
|
||||
}
|
||||
|
||||
// Then BubbleBarView is animating, BubbleBarViewController controller is notified
|
||||
@@ -139,12 +140,12 @@ class TransientBubbleStashControllerTest {
|
||||
|
||||
@Test
|
||||
fun setBubblesShowingOnOverviewUpdatedToTrue_barPositionYUpdated_controllersNotified() {
|
||||
// Given bubble bar is on home and has bubbles
|
||||
// Given bubble bar is on overview and has bubbles
|
||||
whenever(bubbleBarViewController.hasBubbles()).thenReturn(true)
|
||||
|
||||
// When switch out of the home screen
|
||||
getInstrumentation().runOnMainSync {
|
||||
mTransientBubbleStashController.isBubblesShowingOnOverview = true
|
||||
mTransientBubbleStashController.launcherState = BubbleLauncherState.OVERVIEW
|
||||
}
|
||||
|
||||
// Then BubbleBarView is animating, BubbleBarViewController controller is notified
|
||||
@@ -160,6 +161,27 @@ class TransientBubbleStashControllerTest {
|
||||
assertThat(bubbleBarView.translationY).isEqualTo(TASK_BAR_TRANSLATION_Y)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun setBubblesShowingOnOverviewUpdatedToTrue_unstashes() {
|
||||
// Given bubble bar is stashed with bubbles
|
||||
whenever(bubbleBarViewController.hasBubbles()).thenReturn(true)
|
||||
|
||||
getInstrumentation().runOnMainSync {
|
||||
mTransientBubbleStashController.updateStashedAndExpandedState(
|
||||
stash = true,
|
||||
expand = false,
|
||||
)
|
||||
}
|
||||
assertThat(mTransientBubbleStashController.isStashed).isTrue()
|
||||
|
||||
// Move to overview
|
||||
getInstrumentation().runOnMainSync {
|
||||
mTransientBubbleStashController.launcherState = BubbleLauncherState.OVERVIEW
|
||||
}
|
||||
// No longer stashed in overview
|
||||
assertThat(mTransientBubbleStashController.isStashed).isFalse()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun updateStashedAndExpandedState_stashAndCollapse_bubbleBarHidden_stashedHandleShown() {
|
||||
// Given bubble bar has bubbles and not stashed
|
||||
@@ -289,7 +311,7 @@ class TransientBubbleStashControllerTest {
|
||||
// Given screen is locked and bubble bar has bubbles
|
||||
getInstrumentation().runOnMainSync {
|
||||
mTransientBubbleStashController.isSysuiLocked = true
|
||||
mTransientBubbleStashController.isBubblesShowingOnOverview = true
|
||||
mTransientBubbleStashController.launcherState = BubbleLauncherState.OVERVIEW
|
||||
whenever(bubbleBarViewController.hasBubbles()).thenReturn(true)
|
||||
}
|
||||
advanceTimeBy(BubbleStashController.BAR_TRANSLATION_DURATION)
|
||||
|
||||
Reference in New Issue
Block a user