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

Commit 4b984eba authored by William Xiao's avatar William Xiao Committed by Android (Google) Code Review
Browse files

Merge "When v2 flag disabled, hide status bar for Gone->Hub transition" into main

parents 2f33ac5d e885517b
Loading
Loading
Loading
Loading
+104 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.systemui.keyguard.shared.model.TransitionState.RUNNING
import com.android.systemui.keyguard.shared.model.TransitionState.STARTED
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.keyguard.ui.viewmodel.glanceableHubToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.goneToGlanceableHubTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.lockscreenToGlanceableHubTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.occludedToLockscreenTransitionViewModel
import com.android.systemui.kosmos.Kosmos
@@ -232,6 +233,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
            kosmos.communalSceneInteractor,
            kosmos.glanceableHubToLockscreenTransitionViewModel,
            kosmos.lockscreenToGlanceableHubTransitionViewModel,
            kosmos.goneToGlanceableHubTransitionViewModel,
            kosmos.occludedToLockscreenTransitionViewModel,
            kosmos.dreamViewModel,
            kosmos.keyguardInteractor,
@@ -899,6 +901,96 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
            }
        }

    @Test
    @DisableSceneContainer
    @DisableFlags(Flags.FLAG_GLANCEABLE_HUB_V2)
    fun statusBar_isHidden_goneToGlanceableHubV2Disabled() =
        testScope.runTest {
            try {
                controller.init()
                ViewUtils.attachView(keyguardStatusBarView)
                looper.processAllMessages()

                // Keyguard is showing and start transitioning to communal
                updateStateToKeyguard()
                kosmos.fakeCommunalSceneRepository.instantlyTransitionTo(CommunalScenes.Communal)
                runCurrent()

                val transitionSteps =
                    listOf(
                        goneToGlanceableHubTransitionStep(0.0f, STARTED),
                        goneToGlanceableHubTransitionStep(.1f),
                    )
                kosmos.fakeKeyguardTransitionRepository.sendTransitionSteps(
                    transitionSteps,
                    testScope,
                )

                // Verify status bar is not visible
                assertThat(keyguardStatusBarView.alpha).isEqualTo(0f)
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.INVISIBLE)

                kosmos.fakeKeyguardTransitionRepository.sendTransitionSteps(
                    listOf(
                        goneToGlanceableHubTransitionStep(1f),
                        goneToGlanceableHubTransitionStep(1f, FINISHED),
                    ),
                    testScope,
                )

                assertThat(keyguardStatusBarView.alpha).isEqualTo(0f)
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.INVISIBLE)
            } finally {
                ViewUtils.detachView(keyguardStatusBarView)
            }
        }

    @Test
    @DisableSceneContainer
    @EnableFlags(Flags.FLAG_GLANCEABLE_HUB_V2)
    fun statusBar_fullyVisible_goneToGlanceableHubV2Enabled() =
        testScope.runTest {
            try {
                controller.init()
                ViewUtils.attachView(keyguardStatusBarView)
                looper.processAllMessages()

                // Keyguard is showing and start transitioning to communal
                updateStateToKeyguard()
                kosmos.fakeCommunalSceneRepository.instantlyTransitionTo(CommunalScenes.Communal)
                runCurrent()

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

                kosmos.fakeKeyguardTransitionRepository.sendTransitionSteps(
                    listOf(
                        goneToGlanceableHubTransitionStep(0.0f, STARTED),
                        goneToGlanceableHubTransitionStep(.1f),
                    ),
                    testScope,
                )

                // The transition will not affect alpha and visibility
                assertThat(keyguardStatusBarView.alpha).isEqualTo(1f)
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)

                kosmos.fakeKeyguardTransitionRepository.sendTransitionSteps(
                    listOf(
                        goneToGlanceableHubTransitionStep(1f),
                        goneToGlanceableHubTransitionStep(1f, FINISHED),
                    ),
                    testScope,
                )

                assertThat(keyguardStatusBarView.alpha).isEqualTo(1f)
                assertThat(keyguardStatusBarView.visibility).isEqualTo(View.VISIBLE)
            } finally {
                ViewUtils.detachView(keyguardStatusBarView)
            }
        }

    @Test
    @DisableSceneContainer
    @DisableFlags(Flags.FLAG_GLANCEABLE_HUB_V2)
@@ -1223,4 +1315,16 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() {
            transitionState = transitionState,
            ownerName = "KeyguardStatusBarViewControllerTest",
        )

    private fun goneToGlanceableHubTransitionStep(
        value: Float,
        transitionState: TransitionState = RUNNING,
    ) =
        TransitionStep(
            from = KeyguardState.GONE,
            to = KeyguardState.GLANCEABLE_HUB,
            value = value,
            transitionState = transitionState,
            ownerName = "KeyguardStatusBarViewControllerTest",
        )
}
+10 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.keyguard.ui.viewmodel

import com.android.systemui.Flags
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.domain.interactor.FromGoneTransitionInteractor.Companion.TO_GLANCEABLE_HUB_DURATION
import com.android.systemui.keyguard.shared.model.Edge
@@ -26,6 +27,7 @@ import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.emptyFlow

@SysUISingleton
class GoneToGlanceableHubTransitionViewModel
@@ -44,4 +46,12 @@ constructor(animationFlow: KeyguardTransitionAnimationFlow) : DeviceEntryIconTra
            onCancel = { 1f },
            onFinish = { 1f },
        )

    val statusBarAlpha: Flow<Float> =
        if (!Flags.glanceableHubV2()) {
            // Only hide the keyguard status bar if hub v2 is not enabled
            transitionAnimation.immediatelyTransitionTo(0f)
        } else {
            emptyFlow()
        }
}
+6 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.ui.viewmodel.DreamViewModel;
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
import com.android.systemui.keyguard.ui.viewmodel.GlanceableHubToLockscreenTransitionViewModel;
import com.android.systemui.keyguard.ui.viewmodel.GoneToGlanceableHubTransitionViewModel;
import com.android.systemui.keyguard.ui.viewmodel.LockscreenToGlanceableHubTransitionViewModel;
import com.android.systemui.keyguard.ui.viewmodel.OccludedToLockscreenTransitionViewModel;
import com.android.systemui.log.core.LogLevel;
@@ -162,6 +163,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
    private final CommunalSceneInteractor mCommunalSceneInteractor;
    private final GlanceableHubToLockscreenTransitionViewModel mHubToLockscreenTransitionViewModel;
    private final LockscreenToGlanceableHubTransitionViewModel mLockscreenToHubTransitionViewModel;
    private final GoneToGlanceableHubTransitionViewModel mGoneToHubTransitionViewModel;
    private final OccludedToLockscreenTransitionViewModel mOccludedToLockscreenTransitionViewModel;
    private final DreamViewModel mDreamViewModel;
    private final KeyguardInteractor mKeyguardInteractor;
@@ -385,6 +387,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
                    glanceableHubToLockscreenTransitionViewModel,
            LockscreenToGlanceableHubTransitionViewModel
                    lockscreenToGlanceableHubTransitionViewModel,
            GoneToGlanceableHubTransitionViewModel goneToGlanceableHubTransitionViewModel,
            OccludedToLockscreenTransitionViewModel occludedToLockscreenTransitionViewModel,
            DreamViewModel dreamViewModel,
            KeyguardInteractor keyguardInteractor
@@ -420,6 +423,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
        mCommunalSceneInteractor = communalSceneInteractor;
        mHubToLockscreenTransitionViewModel = glanceableHubToLockscreenTransitionViewModel;
        mLockscreenToHubTransitionViewModel = lockscreenToGlanceableHubTransitionViewModel;
        mGoneToHubTransitionViewModel = goneToGlanceableHubTransitionViewModel;
        mOccludedToLockscreenTransitionViewModel = occludedToLockscreenTransitionViewModel;
        mDreamViewModel = dreamViewModel;
        mKeyguardInteractor = keyguardInteractor;
@@ -514,6 +518,8 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
                    mToGlanceableHubStatusBarAlphaConsumer, mCoroutineDispatcher);
            collectFlow(mView, mHubToLockscreenTransitionViewModel.getStatusBarAlpha(),
                    mFromGlanceableHubStatusBarAlphaConsumer, mCoroutineDispatcher);
            collectFlow(mView, mGoneToHubTransitionViewModel.getStatusBarAlpha(),
                    mToGlanceableHubStatusBarAlphaConsumer, mCoroutineDispatcher);
        }
        collectFlow(mView, mDreamViewModel.getStatusBarAlpha(),
                this::setAlpha, mCoroutineDispatcher);
+25 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.keyguard.ui.viewmodel

import com.android.systemui.keyguard.ui.keyguardTransitionAnimationFlow
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture

var Kosmos.goneToGlanceableHubTransitionViewModel by Fixture {
    GoneToGlanceableHubTransitionViewModel(animationFlow = keyguardTransitionAnimationFlow)
}