diff options
3 files changed, 130 insertions, 16 deletions
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 d33c10e7e663..be0d899fd946 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 androidx.test.filters.SmallTest 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 @@ class AodAlphaViewModelTest : SysuiTestCase() { } @Test + @DisableSceneContainer fun alpha_WhenNotGone_clockMigrationFlagIsOff_emitsKeyguardAlpha() = testScope.runTest { mSetFlagsRule.disableFlags(AConfigFlags.FLAG_MIGRATE_CLOCKS_TO_BLUEPRINT) @@ -86,6 +93,7 @@ class AodAlphaViewModelTest : SysuiTestCase() { } @Test + @DisableSceneContainer fun alpha_WhenGoneToAod() = testScope.runTest { val alpha by collectLastValue(underTest.alpha) @@ -110,6 +118,35 @@ class AodAlphaViewModelTest : SysuiTestCase() { } @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 @@ class AodAlphaViewModelTest : SysuiTestCase() { } @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 @@ class AodAlphaViewModelTest : SysuiTestCase() { } @Test + @DisableSceneContainer fun enterFromTopAlpha() = testScope.runTest { val alpha by collectLastValue(underTest.alpha) @@ -184,4 +241,26 @@ class AodAlphaViewModelTest : SysuiTestCase() { 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 1e5f5a70bac8..acaa15edde82 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.domain.interactor.KeyguardTransitionInterac 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 @@ constructor( 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 { + 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) } - } 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 f1784a8bc9f2..24201d75424e 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.keyguardInteractor 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 @@ val Kosmos.aodAlphaViewModel by Fixture { goneToAodTransitionViewModel = goneToAodTransitionViewModel, goneToDozingTransitionViewModel = goneToDozingTransitionViewModel, keyguardInteractor = keyguardInteractor, + sceneInteractor = sceneInteractor, ) } |