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
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:e885517b741b0b543f090dc85be0fe63ce239fd5)
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:83f4739926051033c373ebb5d66f11d5cbde7bd5)
Merged-In: Ief4048766a3047d50404383472798fb879b83309
Change-Id: Ief4048766a3047d50404383472798fb879b83309
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.kt
index 92ff8fd..0622de4 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewControllerTest.kt
@@ -52,6 +52,7 @@
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 @@
kosmos.communalSceneInteractor,
kosmos.glanceableHubToLockscreenTransitionViewModel,
kosmos.lockscreenToGlanceableHubTransitionViewModel,
+ kosmos.goneToGlanceableHubTransitionViewModel,
kosmos.occludedToLockscreenTransitionViewModel,
kosmos.dreamViewModel,
kosmos.keyguardInteractor,
@@ -902,6 +904,96 @@
@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)
fun dragDownShadeOverGlanceableHub_v2Disabled_alphaRemainsZero() =
testScope.runTest {
try {
@@ -1223,4 +1315,16 @@
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",
+ )
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModel.kt
index bbeab18..ebf5581 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModel.kt
@@ -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.dagger.GlanceableHubBlurComponent
import com.android.systemui.keyguard.domain.interactor.FromGoneTransitionInteractor.Companion.TO_GLANCEABLE_HUB_DURATION
@@ -28,6 +29,7 @@
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.emptyFlow
@SysUISingleton
class GoneToGlanceableHubTransitionViewModel
@@ -52,4 +54,12 @@
override val windowBlurRadius: Flow<Float> =
blurFactory.create(transitionAnimation).getBlurProvider().enterBlurRadius
+
+ val statusBarAlpha: Flow<Float> =
+ if (!Flags.glanceableHubV2()) {
+ // Only hide the keyguard status bar if hub v2 is not enabled
+ transitionAnimation.immediatelyTransitionTo(0f)
+ } else {
+ emptyFlow()
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java
index 5714bb4..609e656 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarViewController.java
@@ -58,6 +58,7 @@
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 @@
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 @@
glanceableHubToLockscreenTransitionViewModel,
LockscreenToGlanceableHubTransitionViewModel
lockscreenToGlanceableHubTransitionViewModel,
+ GoneToGlanceableHubTransitionViewModel goneToGlanceableHubTransitionViewModel,
OccludedToLockscreenTransitionViewModel occludedToLockscreenTransitionViewModel,
DreamViewModel dreamViewModel,
KeyguardInteractor keyguardInteractor
@@ -420,6 +423,7 @@
mCommunalSceneInteractor = communalSceneInteractor;
mHubToLockscreenTransitionViewModel = glanceableHubToLockscreenTransitionViewModel;
mLockscreenToHubTransitionViewModel = lockscreenToGlanceableHubTransitionViewModel;
+ mGoneToHubTransitionViewModel = goneToGlanceableHubTransitionViewModel;
mOccludedToLockscreenTransitionViewModel = occludedToLockscreenTransitionViewModel;
mDreamViewModel = dreamViewModel;
mKeyguardInteractor = keyguardInteractor;
@@ -514,6 +518,8 @@
mToGlanceableHubStatusBarAlphaConsumer, mCoroutineDispatcher);
collectFlow(mView, mHubToLockscreenTransitionViewModel.getStatusBarAlpha(),
mFromGlanceableHubStatusBarAlphaConsumer, mCoroutineDispatcher);
+ collectFlow(mView, mGoneToHubTransitionViewModel.getStatusBarAlpha(),
+ mToGlanceableHubStatusBarAlphaConsumer, mCoroutineDispatcher);
}
collectFlow(mView, mDreamViewModel.getStatusBarAlpha(),
this::setAlpha, mCoroutineDispatcher);
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModelKosmos.kt
new file mode 100644
index 0000000..1166b2c
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/GoneToGlanceableHubTransitionViewModelKosmos.kt
@@ -0,0 +1,29 @@
+/*
+ * 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.glanceableHubBlurComponentFactory
+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,
+ blurFactory = glanceableHubBlurComponentFactory,
+ )
+}