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,
+    )
+}