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

Commit e885517b authored by Coco Duan's avatar Coco Duan
Browse files

When v2 flag disabled, hide status bar for Gone->Hub transition

The status bar is shown after exiting edit state. Fix is for Gone->Hub
transition, explicitly hide the keyguard status bar if the v2 flag is
not enabled.

Fixes: 427881009
Flag: com.android.systemui.glanceable_hub_v2
Test: atest KeyguardStatusBarViewControllerTest
Test: verify keyguard status bar not visible when returning to hub
from edit mode

Change-Id: Ief4048766a3047d50404383472798fb879b83309
parent 9bbaf778
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)
}