Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd6772ab authored by Mady Mellor's avatar Mady Mellor
Browse files

If we're going to overview we might need to unstash

Flag: com.android.wm.shell.enable_bubble_bar
Test: atest NexusLauncherTests:PersistentBubbleStashControllerTest
Test: atest NexusLauncherTests:TransientBubbleStashControllerTest
Test: manual - swipe up to overview from home & from in an app, ensure
               bubble bar is unstashed
             - switch between home / overview / in app in transient
               and persistent taskbar to make sure things work
Bug: 368364143
Change-Id: I34c22b000d1fcc75489ea6da497f14def9649a20
parent 2b1208e8
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -57,6 +57,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;
@@ -473,8 +474,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;
+17 −2
Original line number Diff line number Diff line
@@ -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
+12 −19
Original line number Diff line number Diff line
@@ -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
            // 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)
        }

    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)
            }
            bubbleBarViewController.onBubbleBarConfigurationChanged(/* animate= */ true)
        }
+11 −20
Original line number Diff line number Diff line
@@ -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)
        }

+10 −9
Original line number Diff line number Diff line
@@ -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)
Loading