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

Commit 4367e33c authored by Darrell Shi's avatar Darrell Shi Committed by Android (Google) Code Review
Browse files

Merge "Hide status bar when glanceable hub is showing" into main

parents 87ae3cd5 97463f38
Loading
Loading
Loading
Loading
+123 −21
Original line number Diff line number Diff line
@@ -71,7 +71,6 @@ import com.android.systemui.user.data.repository.fakeUserRepository
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.settings.SecureSettings
import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.TestScope
@@ -181,6 +180,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
                        as KeyguardStatusBarView
                )
            whenever(keyguardStatusBarView.display).thenReturn(mContext.display)
            whenever(keyguardStatusBarView.isAttachedToWindow).thenReturn(true)
        }

        controller = createController()
@@ -392,33 +392,32 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {

        controller.updateTopClipping(notificationPanelTop)

        Truth.assertThat(keyguardStatusBarView.clipBounds.top)
            .isEqualTo(notificationPanelTop - viewTop)
        assertThat(keyguardStatusBarView.clipBounds.top).isEqualTo(notificationPanelTop - viewTop)
    }

    @Test
    fun setNotTopClipping_viewClippingUpdatedToZero() {
        // Start out with some amount of top clipping.
        controller.updateTopClipping(50)
        Truth.assertThat(keyguardStatusBarView.clipBounds.top).isGreaterThan(0)
        assertThat(keyguardStatusBarView.clipBounds.top).isGreaterThan(0)

        controller.setNoTopClipping()

        Truth.assertThat(keyguardStatusBarView.clipBounds.top).isEqualTo(0)
        assertThat(keyguardStatusBarView.clipBounds.top).isEqualTo(0)
    }

    @Test
    @DisableSceneContainer
    fun updateViewState_alphaAndVisibilityGiven_viewUpdated() {
        // Verify the initial values so we know the method triggers changes.
        Truth.assertThat(keyguardStatusBarView.alpha).isEqualTo(1f)
        assertThat(keyguardStatusBarView.alpha).isEqualTo(1f)
        assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)

        val newAlpha = 0.5f
        val newVisibility = View.INVISIBLE
        controller.updateViewState(newAlpha, newVisibility)

        Truth.assertThat(keyguardStatusBarView.alpha).isEqualTo(newAlpha)
        assertThat(keyguardStatusBarView.alpha).isEqualTo(newAlpha)
        assertThat(keyguardStatusBarView.visibility).isEqualTo(newVisibility)
    }

@@ -444,7 +443,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {

        controller.updateViewState()

        Truth.assertThat(keyguardStatusBarView.alpha).isEqualTo(oldAlpha)
        assertThat(keyguardStatusBarView.alpha).isEqualTo(oldAlpha)
    }

    @Test
@@ -506,6 +505,41 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
        assertThat(keyguardStatusBarView.visibility).isEqualTo(View.INVISIBLE)
    }

    @Test
    @DisableSceneContainer
    fun updateViewState_lockscreenShadeDrag40Percent_alphaIsAt20Percent() {
        controller.onViewAttached()
        updateStateToKeyguard()

        shadeViewStateProvider.lockscreenShadeDragProgress = .4f

        controller.updateViewState()

        assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
        assertThat(keyguardStatusBarView.alpha).isWithin(.01f).of(.2f)
    }

    @Test
    @DisableSceneContainer
    @EnableFlags(Flags.FLAG_GLANCEABLE_HUB_V2)
    fun updateViewState_lockscreenShadeDragOverHub40Percent_alphaIsAt20Percent() =
        testScope.runTest {
            controller.onViewAttached()
            updateStateToKeyguard()

            // Fully transition to communal, and verify status bar is fully visible
            kosmos.fakeCommunalSceneRepository.instantlyTransitionTo(CommunalScenes.Communal)
            runCurrent()
            assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
            assertThat(keyguardStatusBarView.alpha).isEqualTo(1f)

            // Start dragging down shade, and verify status bar alpha updates
            shadeViewStateProvider.lockscreenShadeDragProgress = .4f
            controller.updateViewState()
            assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
            assertThat(keyguardStatusBarView.alpha).isWithin(.01f).of(.2f)
        }

    @Test
    @DisableSceneContainer
    fun updateViewState_dragProgressOne_viewHidden() {
@@ -604,7 +638,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
        controller.updateViewState()

        assertThat(keyguardStatusBarView.visibility).isEqualTo(View.GONE)
        Truth.assertThat(keyguardStatusBarView.alpha).isEqualTo(0.456f)
        assertThat(keyguardStatusBarView.alpha).isEqualTo(0.456f)
    }

    @Test
@@ -620,7 +654,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
        controller.updateViewState(0.789f, View.VISIBLE)

        assertThat(keyguardStatusBarView.visibility).isEqualTo(View.GONE)
        Truth.assertThat(keyguardStatusBarView.alpha).isEqualTo(0.456f)
        assertThat(keyguardStatusBarView.alpha).isEqualTo(0.456f)
    }

    @Test
@@ -634,7 +668,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {

        controller.setAlpha(0.123f)

        Truth.assertThat(keyguardStatusBarView.alpha).isEqualTo(0.456f)
        assertThat(keyguardStatusBarView.alpha).isEqualTo(0.456f)
    }

    @Test
@@ -660,7 +694,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {

        controller.setAlpha(0.5f)

        Truth.assertThat(keyguardStatusBarView.alpha).isEqualTo(0.5f)
        assertThat(keyguardStatusBarView.alpha).isEqualTo(0.5f)
    }

    @Test
@@ -672,8 +706,8 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
        controller.setAlpha(0.5f)
        controller.setAlpha(-1f)

        Truth.assertThat(keyguardStatusBarView.alpha).isGreaterThan(0)
        Truth.assertThat(keyguardStatusBarView.alpha).isNotEqualTo(0.5f)
        assertThat(keyguardStatusBarView.alpha).isGreaterThan(0)
        assertThat(keyguardStatusBarView.alpha).isNotEqualTo(0.5f)
    }

    // TODO(b/195442899): Add more tests for #updateViewState once CLs are finalized.
@@ -716,7 +750,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
            controller = createController()

            // THEN keyguard status bar view avatar is disabled
            Truth.assertThat(keyguardStatusBarView.isKeyguardUserAvatarEnabled).isFalse()
            assertThat(keyguardStatusBarView.isKeyguardUserAvatarEnabled).isFalse()
        }

    @Test
@@ -728,7 +762,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
        controller = createController()

        // THEN keyguard status bar view avatar is enabled
        Truth.assertThat(keyguardStatusBarView.isKeyguardUserAvatarEnabled).isTrue()
        assertThat(keyguardStatusBarView.isKeyguardUserAvatarEnabled).isTrue()
    }

    @Test
@@ -797,7 +831,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {

    @Test
    @DisableFlags(Flags.FLAG_GLANCEABLE_HUB_V2)
    fun animateToGlanceableHub_affectsAlpha() =
    fun animateToGlanceableHub_v2Disabled_affectsAlpha() =
        testScope.runTest {
            try {
                controller.init()
@@ -809,6 +843,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
                kosmos.fakeCommunalSceneRepository.instantlyTransitionTo(CommunalScenes.Communal)
                runCurrent()
                controller.updateCommunalAlphaTransition(transitionAlphaAmount)
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
                assertThat(keyguardStatusBarView.alpha).isEqualTo(transitionAlphaAmount)
            } finally {
                ViewUtils.detachView(keyguardStatusBarView)
@@ -817,21 +852,88 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {

    @Test
    @DisableFlags(Flags.FLAG_GLANCEABLE_HUB_V2)
    fun animateToGlanceableHub_alphaResetOnCommunalNotShowing() =
    fun animateToGlanceableHub_v2Disabled_alphaResetOnCommunalNotShowing() =
        testScope.runTest {
            try {
                controller.init()
                val transitionAlphaAmount = .5f
                ViewUtils.attachView(keyguardStatusBarView)

                looper.processAllMessages()
                updateStateToKeyguard()

                // Verify status bar is fully visible on lockscreen
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
                assertThat(keyguardStatusBarView.alpha).isEqualTo(1f)

                // Start transitioning to communal, and verify status bar is half visible
                kosmos.fakeCommunalSceneRepository.instantlyTransitionTo(CommunalScenes.Communal)
                runCurrent()
                controller.updateCommunalAlphaTransition(transitionAlphaAmount)
                controller.updateCommunalAlphaTransition(.5f)
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
                assertThat(keyguardStatusBarView.alpha).isEqualTo(.5f)

                // Transition back to lockscreen, and verify status bar is set back to fully visible
                kosmos.fakeCommunalSceneRepository.instantlyTransitionTo(CommunalScenes.Blank)
                runCurrent()
                assertThat(keyguardStatusBarView.alpha).isNotEqualTo(transitionAlphaAmount)
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
                assertThat(keyguardStatusBarView.alpha).isNotEqualTo(.5f)
            } finally {
                ViewUtils.detachView(keyguardStatusBarView)
            }
        }

    @Test
    @DisableFlags(Flags.FLAG_GLANCEABLE_HUB_V2)
    fun dragDownShadeOverGlanceableHub_v2Disabled_alphaRemainsZero() =
        testScope.runTest {
            try {
                controller.init()
                ViewUtils.attachView(keyguardStatusBarView)

                looper.processAllMessages()
                updateStateToKeyguard()

                // Verify status bar is fully visible on lockscreen
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
                assertThat(keyguardStatusBarView.alpha).isEqualTo(1f)

                // Fully transition to communal, and verify status bar is invisible
                kosmos.fakeCommunalSceneRepository.instantlyTransitionTo(CommunalScenes.Communal)
                runCurrent()
                controller.updateCommunalAlphaTransition(0f)
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.INVISIBLE)
                assertThat(keyguardStatusBarView.alpha).isEqualTo(0f)

                // Start dragging down shade, and verify status bar remains invisible
                shadeViewStateProvider.lockscreenShadeDragProgress = .1f
                controller.updateViewState()
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.INVISIBLE)
                assertThat(keyguardStatusBarView.alpha).isEqualTo(0f)
            } finally {
                ViewUtils.detachView(keyguardStatusBarView)
            }
        }

    @Test
    @EnableFlags(Flags.FLAG_GLANCEABLE_HUB_V2)
    fun animateToGlanceableHub_v2Enabled_alphaDoesNotChange() =
        testScope.runTest {
            try {
                controller.init()
                ViewUtils.attachView(keyguardStatusBarView)

                looper.processAllMessages()
                updateStateToKeyguard()

                // Verify status bar is fully visible on lockscreen
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
                assertThat(keyguardStatusBarView.alpha).isEqualTo(1f)

                // Transition to communal halfway, and verify status bar remains fully visible
                kosmos.fakeCommunalSceneRepository.instantlyTransitionTo(CommunalScenes.Communal)
                runCurrent()
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
                assertThat(keyguardStatusBarView.alpha).isEqualTo(1f)
            } finally {
                ViewUtils.detachView(keyguardStatusBarView)
            }
+28 −11
Original line number Diff line number Diff line
@@ -276,9 +276,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat

    private boolean mCommunalShowing;

    private final Consumer<Boolean> mCommunalConsumer = (communalShowing) -> {
        updateCommunalShowing(communalShowing);
    };
    private final Consumer<Boolean> mCommunalConsumer = this::updateCommunalShowing;

    @VisibleForTesting
    void updateCommunalShowing(boolean communalShowing) {
@@ -287,7 +285,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
        // When communal is hidden (either by transition or state change), set alpha to fully
        // visible.
        if (!mCommunalShowing) {
            setAlpha(-1f);
            setAlphaByCommunal(-1f);
        }
        updateViewState();
    }
@@ -316,14 +314,14 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
    private boolean mShowingKeyguardHeadsUp;
    private StatusBarSystemEventDefaultAnimator mSystemEventAnimator;
    private float mSystemEventAnimatorAlpha = 1;
    private final Consumer<Float> mToGlanceableHubStatusBarAlphaConsumer = (alpha) ->
            updateCommunalAlphaTransition(alpha);
    private final Consumer<Float> mToGlanceableHubStatusBarAlphaConsumer =
            this::updateCommunalAlphaTransition;

    private final Consumer<Float> mFromGlanceableHubStatusBarAlphaConsumer = (alpha) ->
            updateCommunalAlphaTransition(alpha);
    private final Consumer<Float> mFromGlanceableHubStatusBarAlphaConsumer =
            this::updateCommunalAlphaTransition;

    @VisibleForTesting  void updateCommunalAlphaTransition(float alpha) {
        setAlpha(!mCommunalShowing || alpha == 0 ? -1 : alpha);
        setAlphaByCommunal(alpha);
    }

    /**
@@ -331,6 +329,12 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
     */
    private float mExplicitAlpha = -1f;

    /**
     * The alpha value to be set on the View requested by the glanceable hub. If -1, this value is
     * to be ignored. Otherwise, it takes precedence over mExplicitAlpha.
     */
    private float mExplicitAlphaByCommunal = -1f;

    @Inject
    public KeyguardStatusBarViewController(
            @Main CoroutineDispatcher dispatcher,
@@ -661,7 +665,9 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
                1, mShadeViewStateProvider.getLockscreenShadeDragProgress() * 2);

        float newAlpha;
        if (mExplicitAlpha != -1) {
        if (mExplicitAlphaByCommunal != -1) {
            newAlpha = mExplicitAlphaByCommunal;
        } else if (mExplicitAlpha != -1) {
            newAlpha = mExplicitAlpha;
        } else {
            newAlpha = Math.min(getKeyguardContentsAlpha(), alphaQsExpansion)
@@ -687,7 +693,6 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
                        && !mDozing
                        && !hideForBypass
                        && !mDisableStateTracker.isDisabled()
                        && (Flags.glanceableHubV2() || (!mCommunalShowing || mExplicitAlpha != -1))
                        ? View.VISIBLE : View.INVISIBLE;

        updateViewState(newAlpha, newVisibility);
@@ -842,6 +847,18 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
        updateViewState();
    }

    /**
     * Sets the alpha to be set on the view when glanceable hub is showing. This value takes
     * precedence over the value set by {@link #setAlpha(float)}.
     *
     * @param alpha a value between 0 and 1. -1 if the value is to be reset/ignored.
     */
    private void setAlphaByCommunal(float alpha) {
        // Only set explicit alpha when communal is showing
        mExplicitAlphaByCommunal = mCommunalShowing ? alpha : -1;
        updateViewState();
    }

    private boolean isMigrationEnabled() {
        return SceneContainerFlag.isEnabled();
    }