Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.kt +104 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -232,6 +233,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() { kosmos.communalSceneInteractor, kosmos.glanceableHubToLockscreenTransitionViewModel, kosmos.lockscreenToGlanceableHubTransitionViewModel, kosmos.goneToGlanceableHubTransitionViewModel, kosmos.occludedToLockscreenTransitionViewModel, kosmos.dreamViewModel, kosmos.keyguardInteractor, Loading Loading @@ -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) Loading Loading @@ -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", ) } packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModel.kt +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() } } packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -385,6 +387,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat glanceableHubToLockscreenTransitionViewModel, LockscreenToGlanceableHubTransitionViewModel lockscreenToGlanceableHubTransitionViewModel, GoneToGlanceableHubTransitionViewModel goneToGlanceableHubTransitionViewModel, OccludedToLockscreenTransitionViewModel occludedToLockscreenTransitionViewModel, DreamViewModel dreamViewModel, KeyguardInteractor keyguardInteractor Loading Loading @@ -420,6 +423,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mCommunalSceneInteractor = communalSceneInteractor; mHubToLockscreenTransitionViewModel = glanceableHubToLockscreenTransitionViewModel; mLockscreenToHubTransitionViewModel = lockscreenToGlanceableHubTransitionViewModel; mGoneToHubTransitionViewModel = goneToGlanceableHubTransitionViewModel; mOccludedToLockscreenTransitionViewModel = occludedToLockscreenTransitionViewModel; mDreamViewModel = dreamViewModel; mKeyguardInteractor = keyguardInteractor; Loading Loading @@ -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); Loading packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModelKosmos.kt 0 → 100644 +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) } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.kt +104 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -232,6 +233,7 @@ class KeyguardStatusBarViewControllerTest : SysuiTestCase() { kosmos.communalSceneInteractor, kosmos.glanceableHubToLockscreenTransitionViewModel, kosmos.lockscreenToGlanceableHubTransitionViewModel, kosmos.goneToGlanceableHubTransitionViewModel, kosmos.occludedToLockscreenTransitionViewModel, kosmos.dreamViewModel, kosmos.keyguardInteractor, Loading Loading @@ -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) Loading Loading @@ -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", ) }
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModel.kt +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() } }
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java +6 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -385,6 +387,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat glanceableHubToLockscreenTransitionViewModel, LockscreenToGlanceableHubTransitionViewModel lockscreenToGlanceableHubTransitionViewModel, GoneToGlanceableHubTransitionViewModel goneToGlanceableHubTransitionViewModel, OccludedToLockscreenTransitionViewModel occludedToLockscreenTransitionViewModel, DreamViewModel dreamViewModel, KeyguardInteractor keyguardInteractor Loading Loading @@ -420,6 +423,7 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat mCommunalSceneInteractor = communalSceneInteractor; mHubToLockscreenTransitionViewModel = glanceableHubToLockscreenTransitionViewModel; mLockscreenToHubTransitionViewModel = lockscreenToGlanceableHubTransitionViewModel; mGoneToHubTransitionViewModel = goneToGlanceableHubTransitionViewModel; mOccludedToLockscreenTransitionViewModel = occludedToLockscreenTransitionViewModel; mDreamViewModel = dreamViewModel; mKeyguardInteractor = keyguardInteractor; Loading Loading @@ -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); Loading
packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModelKosmos.kt 0 → 100644 +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) }