Merge "[KTF integration] Fix AodAlphaViewModel" into main
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModelTest.kt
index d33c10e..be0d899 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModelTest.kt
@@ -23,12 +23,18 @@
 import com.android.systemui.Flags as AConfigFlags
 import com.android.systemui.SysuiTestCase
 import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.flags.DisableSceneContainer
+import com.android.systemui.flags.EnableSceneContainer
 import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
 import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
 import com.android.systemui.keyguard.shared.model.KeyguardState
 import com.android.systemui.keyguard.shared.model.TransitionState
 import com.android.systemui.keyguard.shared.model.TransitionStep
 import com.android.systemui.kosmos.testScope
+import com.android.systemui.scene.data.repository.Idle
+import com.android.systemui.scene.data.repository.Transition
+import com.android.systemui.scene.data.repository.setSceneTransition
+import com.android.systemui.scene.shared.model.Scenes
 import com.android.systemui.testKosmos
 import com.android.systemui.util.mockito.whenever
 import com.google.common.truth.Truth.assertThat
@@ -67,6 +73,7 @@
     }
 
     @Test
+    @DisableSceneContainer
     fun alpha_WhenNotGone_clockMigrationFlagIsOff_emitsKeyguardAlpha() =
         testScope.runTest {
             mSetFlagsRule.disableFlags(AConfigFlags.FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT)
@@ -86,6 +93,7 @@
         }
 
     @Test
+    @DisableSceneContainer
     fun alpha_WhenGoneToAod() =
         testScope.runTest {
             val alpha by collectLastValue(underTest.alpha)
@@ -110,6 +118,35 @@
         }
 
     @Test
+    @EnableSceneContainer
+    fun alpha_WhenGoneToAod_scene_container() =
+        testScope.runTest {
+            val alpha by collectLastValue(underTest.alpha)
+
+            kosmos.setSceneTransition(Transition(from = Scenes.Lockscreen, to = Scenes.Gone))
+            keyguardTransitionRepository.sendTransitionSteps(
+                from = KeyguardState.AOD,
+                to = KeyguardState.UNDEFINED,
+                testScope = testScope,
+            )
+            kosmos.setSceneTransition(Idle(Scenes.Gone))
+            assertThat(alpha).isEqualTo(0f)
+
+            kosmos.setSceneTransition(Transition(from = Scenes.Gone, to = Scenes.Lockscreen))
+            keyguardTransitionRepository.sendTransitionSteps(
+                from = KeyguardState.UNDEFINED,
+                to = KeyguardState.AOD,
+                testScope = testScope,
+            )
+            enterFromTopAnimationAlpha.value = 0.5f
+            assertThat(alpha).isEqualTo(0.5f)
+
+            enterFromTopAnimationAlpha.value = 1f
+            assertThat(alpha).isEqualTo(1f)
+        }
+
+    @Test
+    @DisableSceneContainer
     fun alpha_WhenGoneToDozing() =
         testScope.runTest {
             val alpha by collectLastValue(underTest.alpha)
@@ -130,6 +167,25 @@
         }
 
     @Test
+    @EnableSceneContainer
+    fun alpha_WhenGoneToDozing_scene_container() =
+        testScope.runTest {
+            val alpha by collectLastValue(underTest.alpha)
+
+            kosmos.setSceneTransition(Idle(Scenes.Gone))
+            assertThat(alpha).isEqualTo(0f)
+
+            kosmos.setSceneTransition(Transition(from = Scenes.Gone, to = Scenes.Lockscreen))
+            keyguardTransitionRepository.sendTransitionSteps(
+                from = KeyguardState.UNDEFINED,
+                to = KeyguardState.DOZING,
+                testScope = testScope,
+            )
+            assertThat(alpha).isEqualTo(1f)
+        }
+
+    @Test
+    @DisableSceneContainer
     fun alpha_whenGone_equalsZero() =
         testScope.runTest {
             mSetFlagsRule.enableFlags(AConfigFlags.FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT)
@@ -166,6 +222,7 @@
         }
 
     @Test
+    @DisableSceneContainer
     fun enterFromTopAlpha() =
         testScope.runTest {
             val alpha by collectLastValue(underTest.alpha)
@@ -184,4 +241,26 @@
             enterFromTopAnimationAlpha.value = 1f
             assertThat(alpha).isEqualTo(1f)
         }
+
+    @Test
+    @EnableSceneContainer
+    fun enterFromTopAlpha_scene_container() =
+        testScope.runTest {
+            val alpha by collectLastValue(underTest.alpha)
+
+            kosmos.setSceneTransition(Transition(from = Scenes.Gone, to = Scenes.Lockscreen))
+            keyguardTransitionRepository.sendTransitionStep(
+                TransitionStep(
+                    from = KeyguardState.UNDEFINED,
+                    to = KeyguardState.AOD,
+                    transitionState = TransitionState.STARTED,
+                )
+            )
+
+            enterFromTopAnimationAlpha.value = 0.2f
+            assertThat(alpha).isEqualTo(0.2f)
+
+            enterFromTopAnimationAlpha.value = 1f
+            assertThat(alpha).isEqualTo(1f)
+        }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModel.kt
index 1e5f5a7..acaa15e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModel.kt
@@ -25,6 +25,10 @@
 import com.android.systemui.keyguard.shared.model.KeyguardState.AOD
 import com.android.systemui.keyguard.shared.model.KeyguardState.DOZING
 import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
+import com.android.systemui.keyguard.shared.model.KeyguardState.UNDEFINED
+import com.android.systemui.scene.domain.interactor.SceneInteractor
+import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Scenes
 import javax.inject.Inject
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.flow.Flow
@@ -40,28 +44,57 @@
     goneToAodTransitionViewModel: GoneToAodTransitionViewModel,
     goneToDozingTransitionViewModel: GoneToDozingTransitionViewModel,
     keyguardInteractor: KeyguardInteractor,
+    sceneInteractor: SceneInteractor,
 ) {
 
     /** The alpha level for the entire lockscreen while in AOD. */
     val alpha: Flow<Float> =
-        combineTransform(
-            keyguardTransitionInteractor.transitions,
-            goneToAodTransitionViewModel.enterFromTopAnimationAlpha.onStart { emit(0f) },
-            goneToDozingTransitionViewModel.lockscreenAlpha.onStart { emit(0f) },
-            keyguardInteractor.keyguardAlpha.onStart { emit(1f) },
-        ) { step, goneToAodAlpha, goneToDozingAlpha, keyguardAlpha ->
-            if (step.to == GONE) {
-                // When transitioning to GONE, only emit a value when complete as other
-                // transitions may be controlling the alpha fade
-                if (step.value == 1f) {
+        if (SceneContainerFlag.isEnabled) {
+            combineTransform(
+                keyguardTransitionInteractor.transitions,
+                sceneInteractor.transitionState,
+                goneToAodTransitionViewModel.enterFromTopAnimationAlpha.onStart { emit(0f) },
+                goneToDozingTransitionViewModel.lockscreenAlpha.onStart { emit(0f) },
+                keyguardInteractor.keyguardAlpha.onStart { emit(1f) },
+            ) { step, sceneTransitionState, goneToAodAlpha, goneToDozingAlpha, keyguardAlpha ->
+                if (sceneTransitionState.isIdle(Scenes.Gone)) {
                     emit(0f)
+                } else if (
+                    step.from == UNDEFINED &&
+                        step.to == AOD &&
+                        sceneTransitionState.isTransitioning(Scenes.Gone, Scenes.Lockscreen)
+                ) {
+                    emit(goneToAodAlpha)
+                } else if (
+                    step.from == UNDEFINED &&
+                        step.to == DOZING &&
+                        sceneTransitionState.isTransitioning(Scenes.Gone, Scenes.Lockscreen)
+                ) {
+                    emit(goneToDozingAlpha)
+                } else if (!MigrateClocksToBlueprint.isEnabled) {
+                    emit(keyguardAlpha)
                 }
-            } else if (step.from == GONE && step.to == AOD) {
-                emit(goneToAodAlpha)
-            } else if (step.from == GONE && step.to == DOZING) {
-                emit(goneToDozingAlpha)
-            } else if (!MigrateClocksToBlueprint.isEnabled) {
-                emit(keyguardAlpha)
+            }
+        } else {
+            combineTransform(
+                keyguardTransitionInteractor.transitions,
+                goneToAodTransitionViewModel.enterFromTopAnimationAlpha.onStart { emit(0f) },
+                goneToDozingTransitionViewModel.lockscreenAlpha.onStart { emit(0f) },
+                keyguardInteractor.keyguardAlpha.onStart { emit(1f) },
+            ) { step, goneToAodAlpha, goneToDozingAlpha, keyguardAlpha ->
+                if (step.to == GONE) {
+                    // When transitioning to GONE, only emit a value when complete as other
+                    // transitions may be controlling the alpha fade
+                    if (step.value == 1f) {
+                        emit(0f)
+                    }
+                } else if (step.from == GONE && step.to == AOD) {
+                    emit(goneToAodAlpha)
+                } else if (step.from == GONE && step.to == DOZING) {
+                    emit(goneToDozingAlpha)
+                } else if (!MigrateClocksToBlueprint.isEnabled) {
+                    emit(keyguardAlpha)
+                }
             }
         }
 }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModelKosmos.kt
index f1784a8..24201d7 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/AodAlphaViewModelKosmos.kt
@@ -22,6 +22,7 @@
 import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
 import com.android.systemui.kosmos.Kosmos
 import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.scene.domain.interactor.sceneInteractor
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 
 val Kosmos.aodAlphaViewModel by Fixture {
@@ -30,5 +31,6 @@
         goneToAodTransitionViewModel = goneToAodTransitionViewModel,
         goneToDozingTransitionViewModel = goneToDozingTransitionViewModel,
         keyguardInteractor = keyguardInteractor,
+        sceneInteractor = sceneInteractor,
     )
 }