Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a50eb586 authored by Matt Pietal's avatar Matt Pietal
Browse files

Support OCCLUDED<->ALTERNATE_BOUNCER with animations

And support shade expanded LOCKSCREEN->OCCLUDED

They were not previously mapped, which would flash the clock
over OCCLUDED states.

Fixes: 369954100
Test: atest LockscreenToOccludedTransitionViewModelTest
Flag: com.android.systemui.migrate_clocks_to_blueprint
Change-Id: I3f615c9adeaba4bc361c3a9d609bd0cfcd456dc4
parent b543412b
Loading
Loading
Loading
Loading
+35 −8
Original line number Diff line number Diff line
@@ -89,9 +89,12 @@ class LockscreenToOccludedTransitionViewModelTest(flags: FlagsParameterization)
    }

    @Test
    fun lockscreenFadeOut() =
    fun lockscreenFadeOut_shadeNotExpanded() =
        testScope.runTest {
            val values by collectValues(underTest.lockscreenAlpha)
            shadeExpanded(false)
            runCurrent()

            repository.sendTransitionSteps(
                steps =
                    listOf(
@@ -104,10 +107,34 @@ class LockscreenToOccludedTransitionViewModelTest(flags: FlagsParameterization)
                    ),
                testScope = testScope,
            )
            // Only 5 values should be present, since the dream overlay runs for a small fraction
            // of the overall animation time
            assertThat(values.size).isEqualTo(5)
            values.forEach { assertThat(it).isIn(Range.closed(0f, 1f)) }
            assertThat(values[0]).isEqualTo(1f)
            assertThat(values[1]).isEqualTo(1f)
            assertThat(values[2]).isIn(Range.open(0f, 1f))
            assertThat(values[3]).isIn(Range.open(0f, 1f))
            assertThat(values[4]).isEqualTo(0f)
        }

    @Test
    fun lockscreenFadeOut_shadeExpanded() =
        testScope.runTest {
            val values by collectValues(underTest.lockscreenAlpha)
            shadeExpanded(true)
            runCurrent()

            repository.sendTransitionSteps(
                steps =
                    listOf(
                        step(0f, TransitionState.STARTED), // Should start running here...
                        step(0f),
                        step(.1f),
                        step(.4f),
                        step(.7f), // ...up to here
                        step(1f),
                    ),
                testScope = testScope,
            )
            values.forEach { assertThat(it).isEqualTo(0f) }
        }

    @Test
@@ -115,7 +142,7 @@ class LockscreenToOccludedTransitionViewModelTest(flags: FlagsParameterization)
        testScope.runTest {
            configurationRepository.setDimensionPixelSize(
                R.dimen.lockscreen_to_occluded_transition_lockscreen_translation_y,
                100
                100,
            )
            val values by collectValues(underTest.lockscreenTranslationY)
            repository.sendTransitionSteps(
@@ -138,7 +165,7 @@ class LockscreenToOccludedTransitionViewModelTest(flags: FlagsParameterization)
        testScope.runTest {
            configurationRepository.setDimensionPixelSize(
                R.dimen.lockscreen_to_occluded_transition_lockscreen_translation_y,
                100
                100,
            )
            val values by collectValues(underTest.lockscreenTranslationY)
            repository.sendTransitionSteps(
@@ -171,7 +198,7 @@ class LockscreenToOccludedTransitionViewModelTest(flags: FlagsParameterization)
                    listOf(
                        step(0f, TransitionState.STARTED),
                        step(.5f),
                        step(1f, TransitionState.FINISHED)
                        step(1f, TransitionState.FINISHED),
                    ),
                testScope = testScope,
            )
@@ -228,7 +255,7 @@ class LockscreenToOccludedTransitionViewModelTest(flags: FlagsParameterization)
            to = KeyguardState.OCCLUDED,
            value = value,
            transitionState = state,
            ownerName = "LockscreenToOccludedTransitionViewModelTest"
            ownerName = "LockscreenToOccludedTransitionViewModelTest",
        )
    }

+8 −6
Original line number Diff line number Diff line
@@ -106,7 +106,7 @@ constructor(
                        startTransitionToLockscreenOrHub(
                            isIdleOnCommunal,
                            showCommunalFromOccluded,
                            dreamFromOccluded
                            dreamFromOccluded,
                        )
                    }
            }
@@ -127,7 +127,7 @@ constructor(
                        startTransitionToLockscreenOrHub(
                            isIdleOnCommunal,
                            showCommunalFromOccluded,
                            dreamFromOccluded
                            dreamFromOccluded,
                        )
                    }
            }
@@ -147,7 +147,7 @@ constructor(
                communalSceneInteractor.changeScene(
                    newScene = CommunalScenes.Communal,
                    loggingReason = "occluded to hub",
                    transitionKey = CommunalTransitionKeys.SimpleFade
                    transitionKey = CommunalTransitionKeys.SimpleFade,
                )
            } else {
                startTransitionTo(KeyguardState.GLANCEABLE_HUB)
@@ -210,8 +210,9 @@ constructor(

            duration =
                when (toState) {
                    KeyguardState.LOCKSCREEN -> TO_LOCKSCREEN_DURATION
                    KeyguardState.ALTERNATE_BOUNCER -> TO_ALTERNATE_BOUNCER_DURATION
                    KeyguardState.GLANCEABLE_HUB -> TO_GLANCEABLE_HUB_DURATION
                    KeyguardState.LOCKSCREEN -> TO_LOCKSCREEN_DURATION
                    else -> DEFAULT_DURATION
                }.inWholeMilliseconds
        }
@@ -220,9 +221,10 @@ constructor(
    companion object {
        const val TAG = "FromOccludedTransitionInteractor"
        private val DEFAULT_DURATION = 500.milliseconds
        val TO_LOCKSCREEN_DURATION = 933.milliseconds
        val TO_GLANCEABLE_HUB_DURATION = 250.milliseconds
        val TO_ALTERNATE_BOUNCER_DURATION = DEFAULT_DURATION
        val TO_AOD_DURATION = DEFAULT_DURATION
        val TO_DOZING_DURATION = DEFAULT_DURATION
        val TO_GLANCEABLE_HUB_DURATION = 250.milliseconds
        val TO_LOCKSCREEN_DURATION = 933.milliseconds
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -28,22 +28,22 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow

/**
 * Breaks down ALTERNATE_BOUNCER->GONE transition into discrete steps for corresponding views to
 * Breaks down ALTERNATE_BOUNCER->OCCLUDED transition into discrete steps for corresponding views to
 * consume.
 */
@OptIn(ExperimentalCoroutinesApi::class)
@SysUISingleton
class AlternateBouncerToOccludedTransitionViewModel
@Inject
constructor(
    animationFlow: KeyguardTransitionAnimationFlow,
) : DeviceEntryIconTransition {
constructor(animationFlow: KeyguardTransitionAnimationFlow) : DeviceEntryIconTransition {
    private val transitionAnimation =
        animationFlow.setup(
            duration = TO_OCCLUDED_DURATION,
            edge = Edge.create(from = ALTERNATE_BOUNCER, to = OCCLUDED),
        )

    val lockscreenAlpha: Flow<Float> = transitionAnimation.immediatelyTransitionTo(0f)

    override val deviceEntryParentViewAlpha: Flow<Float> =
        transitionAnimation.immediatelyTransitionTo(0f)
}
+6 −0
Original line number Diff line number Diff line
@@ -88,6 +88,8 @@ constructor(
        AlternateBouncerToGoneTransitionViewModel,
    private val alternateBouncerToLockscreenTransitionViewModel:
        AlternateBouncerToLockscreenTransitionViewModel,
    private val alternateBouncerToOccludedTransitionViewModel:
        AlternateBouncerToOccludedTransitionViewModel,
    private val aodToGoneTransitionViewModel: AodToGoneTransitionViewModel,
    private val aodToLockscreenTransitionViewModel: AodToLockscreenTransitionViewModel,
    private val aodToOccludedTransitionViewModel: AodToOccludedTransitionViewModel,
@@ -112,6 +114,8 @@ constructor(
    private val lockscreenToOccludedTransitionViewModel: LockscreenToOccludedTransitionViewModel,
    private val lockscreenToPrimaryBouncerTransitionViewModel:
        LockscreenToPrimaryBouncerTransitionViewModel,
    private val occludedToAlternateBouncerTransitionViewModel:
        OccludedToAlternateBouncerTransitionViewModel,
    private val occludedToAodTransitionViewModel: OccludedToAodTransitionViewModel,
    private val occludedToDozingTransitionViewModel: OccludedToDozingTransitionViewModel,
    private val occludedToLockscreenTransitionViewModel: OccludedToLockscreenTransitionViewModel,
@@ -232,6 +236,7 @@ constructor(
                        alternateBouncerToAodTransitionViewModel.lockscreenAlpha(viewState),
                        alternateBouncerToGoneTransitionViewModel.lockscreenAlpha(viewState),
                        alternateBouncerToLockscreenTransitionViewModel.lockscreenAlpha(viewState),
                        alternateBouncerToOccludedTransitionViewModel.lockscreenAlpha,
                        aodToGoneTransitionViewModel.lockscreenAlpha(viewState),
                        aodToLockscreenTransitionViewModel.lockscreenAlpha(viewState),
                        aodToOccludedTransitionViewModel.lockscreenAlpha(viewState),
@@ -254,6 +259,7 @@ constructor(
                        lockscreenToGoneTransitionViewModel.lockscreenAlpha(viewState),
                        lockscreenToOccludedTransitionViewModel.lockscreenAlpha,
                        lockscreenToPrimaryBouncerTransitionViewModel.lockscreenAlpha,
                        occludedToAlternateBouncerTransitionViewModel.lockscreenAlpha,
                        occludedToAodTransitionViewModel.lockscreenAlpha,
                        occludedToDozingTransitionViewModel.lockscreenAlpha,
                        occludedToLockscreenTransitionViewModel.lockscreenAlpha,
+17 −9
Original line number Diff line number Diff line
@@ -52,18 +52,26 @@ constructor(

    /** Lockscreen views alpha */
    val lockscreenAlpha: Flow<Float> =
        shadeDependentFlows.transitionFlow(
            flowWhenShadeIsNotExpanded =
                transitionAnimation.sharedFlow(
                    duration = 250.milliseconds,
                    onStep = { 1f - it },
                    name = "LOCKSCREEN->OCCLUDED: lockscreenAlpha",
                ),
            flowWhenShadeIsExpanded = transitionAnimation.immediatelyTransitionTo(0f),
        )

    val shortcutsAlpha: Flow<Float> =
        shadeDependentFlows.transitionFlow(
            flowWhenShadeIsNotExpanded =
                transitionAnimation.sharedFlow(
                    duration = 250.milliseconds,
            onStep = { 1 - it },
                    onStep = { 1f - it },
                    onFinish = { 0f },
                    onCancel = { 1f },
                ),
            flowWhenShadeIsExpanded = transitionAnimation.immediatelyTransitionTo(0f),
        )

    /** Lockscreen views y-translation */
Loading