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