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

Commit 48e59be7 authored by William Xiao's avatar William Xiao Committed by Android (Google) Code Review
Browse files

Merge "Fade the bouncer when the dream starts" into main

parents f41c611a 3368f19b
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.communal.domain.interactor.setCommunalV2ConfigEnable
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.coroutines.collectValues
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepositorySpy
import com.android.systemui.keyguard.data.repository.keyguardOcclusionRepository
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
@@ -247,6 +248,31 @@ class FromPrimaryBouncerTransitionInteractorTest(flags: FlagsParameterization) :
                )
        }

    @Test
    fun testTransitionToDreaming() =
        kosmos.runTest {
            underTest.start()
            bouncerRepository.setPrimaryShow(true)
            transitionRepository.sendTransitionSteps(
                from = KeyguardState.LOCKSCREEN,
                to = KeyguardState.PRIMARY_BOUNCER,
                testScope,
            )

            reset(transitionRepository)

            // Dream shows up.
            fakeKeyguardRepository.setDreaming(true)
            runCurrent()

            // Dream transition starts.
            assertThat(transitionRepository)
                .startedTransition(
                    from = KeyguardState.PRIMARY_BOUNCER,
                    to = KeyguardState.DREAMING,
                )
        }

    @Test
    @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
    fun testTransitionToDozing_bouncerShowingOnTopOfGlanceableHub() =
+3 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.ui.viewmodel.GlanceableHubToPrimaryBouncerTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToDreamingTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel
import com.android.systemui.log.BouncerLogger
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
@@ -33,6 +34,7 @@ data class LegacyBouncerDependencies
constructor(
    @Main val mainDispatcher: CoroutineDispatcher,
    val viewModel: KeyguardBouncerViewModel,
    val primaryBouncerToDreamingTransitionViewModel: PrimaryBouncerToDreamingTransitionViewModel,
    val primaryBouncerToGoneTransitionViewModel: PrimaryBouncerToGoneTransitionViewModel,
    val glanceableHubToPrimaryBouncerTransitionViewModel:
        GlanceableHubToPrimaryBouncerTransitionViewModel,
@@ -88,6 +90,7 @@ constructor(
                deps.mainDispatcher,
                view,
                deps.viewModel,
                deps.primaryBouncerToDreamingTransitionViewModel,
                deps.primaryBouncerToGoneTransitionViewModel,
                deps.glanceableHubToPrimaryBouncerTransitionViewModel,
                deps.componentFactory,
+8 −3
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EX
import com.android.systemui.bouncer.ui.BouncerViewDelegate
import com.android.systemui.bouncer.ui.viewmodel.KeyguardBouncerViewModel
import com.android.systemui.keyguard.ui.viewmodel.GlanceableHubToPrimaryBouncerTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToDreamingTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.log.BouncerLogger
@@ -42,6 +43,7 @@ import com.android.systemui.plugins.AuthContextPlugin
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.flow.merge

/** Binds the bouncer container to its view model. */
object KeyguardBouncerViewBinder {
@@ -50,6 +52,7 @@ object KeyguardBouncerViewBinder {
        mainImmediateDispatcher: CoroutineDispatcher,
        view: ViewGroup,
        viewModel: KeyguardBouncerViewModel,
        primaryBouncerToDreamingTransitionViewModel: PrimaryBouncerToDreamingTransitionViewModel,
        primaryBouncerToGoneTransitionViewModel: PrimaryBouncerToGoneTransitionViewModel,
        glanceableHubToPrimaryBouncerTransitionViewModel:
            GlanceableHubToPrimaryBouncerTransitionViewModel,
@@ -131,9 +134,11 @@ object KeyguardBouncerViewBinder {
                }

                launch {
                    primaryBouncerToGoneTransitionViewModel.bouncerAlpha.collect { alpha ->
                        securityContainerController.setAlpha(alpha)
                    }
                    merge(
                            primaryBouncerToDreamingTransitionViewModel.bouncerAlpha,
                            primaryBouncerToGoneTransitionViewModel.bouncerAlpha,
                        )
                        .collect { alpha -> securityContainerController.setAlpha(alpha) }
                }

                launch {
+21 −0
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ constructor(
    ) {

    override fun start() {
        listenForBouncerToDreaming()
        listenForPrimaryBouncerToGone()
        listenForPrimaryBouncerToAsleep()
        listenForPrimaryBouncerNotShowing()
@@ -102,6 +103,26 @@ constructor(
        }
    }

    /**
     * The dream can start underneath the bouncer if the user presses the power button or the screen
     * times out while their "When to show" condition for dreams is active. Since the dream is an
     * activity that starts under the bouncer, we want to start the transition to dreaming
     * immediately so that we can fade the bouncer away as it starts.
     */
    private fun listenForBouncerToDreaming() {
        scope.launch {
            keyguardInteractor.isDreaming
                .filterRelevantKeyguardStateAnd { isDreaming -> isDreaming }
                .collect {
                    if (!communalSceneInteractor.isIdleOnCommunal.value) {
                        // If the widgets on lockscreen feature is showing underneath the bouncer,
                        // don't start the dream transition as the dream is not visible.
                        startTransitionTo(KeyguardState.DREAMING)
                    }
                }
        }
    }

    private fun listenForPrimaryBouncerNotShowing() {
        if (SceneContainerFlag.isEnabled) return
        if (KeyguardWmStateRefactor.isEnabled) {
+10 −0
Original line number Diff line number Diff line
@@ -42,6 +42,16 @@ constructor(blurConfig: BlurConfig, animationFlow: KeyguardTransitionAnimationFl
            )
            .setupWithoutSceneContainer(edge = Edge.create(from = PRIMARY_BOUNCER, to = DREAMING))

    /**
     * Bouncer container alpha. The dream starts underneath the bouncer so we want to fade the
     * bouncer away as the dream launches.
     */
    val bouncerAlpha: Flow<Float> =
        transitionAnimation.sharedFlow(
            duration = FromPrimaryBouncerTransitionInteractor.TO_DREAMING_DURATION,
            onStep = { 1f - it },
        )

    override val windowBlurRadius: Flow<Float> =
        transitionAnimation.sharedFlowWithShade(
            onStep = { progress, isShadeExpanded ->