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

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

Keep notifs visible on LOCKSCREEN->GONE with shade expanded

This obeys the signal to keep the shade expanded. Fixes the
same involving ALTERNATE_BOUNCER.

Fixes: 331194055
Test: atest LockscreenToGoneTransitionViewModelTest
Flag: ACONFIG com.android.systemui.migrate_clocks_to_blueprint
TEAMFOOD

Change-Id: Iee0e737f5690d7165d3bb78f5a36ab1a38605614
parent 0bfc633b
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionState.RUNNING
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.kosmos.testScope
import com.android.systemui.statusbar.sysuiStatusBarStateController
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -51,6 +52,7 @@ class AlternateBouncerToGoneTransitionViewModelTest : SysuiTestCase() {
        }
    private val testScope = kosmos.testScope
    private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
    private val sysuiStatusBarStateController = kosmos.sysuiStatusBarStateController
    private val underTest by lazy { kosmos.alternateBouncerToGoneTransitionViewModel }

    @Test
@@ -111,6 +113,21 @@ class AlternateBouncerToGoneTransitionViewModelTest : SysuiTestCase() {
            assertThat(alpha).isEqualTo(0f)
        }

    @Test
    fun notificationAlpha_leaveShadeOpen() =
        testScope.runTest {
            val values by collectValues(underTest.notificationAlpha(ViewStateAccessor()))
            runCurrent()

            sysuiStatusBarStateController.setLeaveOpenOnKeyguardHide(true)

            keyguardTransitionRepository.sendTransitionStep(step(0f, TransitionState.STARTED))
            keyguardTransitionRepository.sendTransitionStep(step(1f))

            assertThat(values.size).isEqualTo(2)
            values.forEach { assertThat(it).isEqualTo(1f) }
        }

    @Test
    fun lockscreenAlpha_zeroInitialAlpha() =
        testScope.runTest {
+16 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ 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.statusbar.sysuiStatusBarStateController
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -40,6 +41,7 @@ class LockscreenToGoneTransitionViewModelTest : SysuiTestCase() {
    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
    private val repository = kosmos.fakeKeyguardTransitionRepository
    private val sysuiStatusBarStateController = kosmos.sysuiStatusBarStateController
    private val underTest = kosmos.lockscreenToGoneTransitionViewModel

    @Test
@@ -90,6 +92,20 @@ class LockscreenToGoneTransitionViewModelTest : SysuiTestCase() {
            assertThat(alpha).isEqualTo(0f)
        }

    @Test
    fun notificationAlpha_leaveShadeOpen() =
        testScope.runTest {
            val values by collectValues(underTest.notificationAlpha(ViewStateAccessor()))

            sysuiStatusBarStateController.setLeaveOpenOnKeyguardHide(true)

            repository.sendTransitionStep(step(0f, TransitionState.STARTED))
            repository.sendTransitionStep(step(1f))

            assertThat(values.size).isEqualTo(2)
            values.forEach { assertThat(it).isEqualTo(1f) }
        }

    private fun step(
        value: Float,
        state: TransitionState = TransitionState.RUNNING
+22 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.ALTERNATE_BOUNCE
import com.android.systemui.keyguard.shared.model.ScrimAlpha
import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.statusbar.SysuiStatusBarStateController
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -40,6 +41,7 @@ class AlternateBouncerToGoneTransitionViewModel
constructor(
    bouncerToGoneFlows: BouncerToGoneFlows,
    animationFlow: KeyguardTransitionAnimationFlow,
    private val statusBarStateController: SysuiStatusBarStateController,
) : DeviceEntryIconTransition {
    private val transitionAnimation =
        animationFlow.setup(
@@ -59,6 +61,26 @@ constructor(
        )
    }

    fun notificationAlpha(viewState: ViewStateAccessor): Flow<Float> {
        var startAlpha = 1f
        var leaveShadeOpen = false

        return transitionAnimation.sharedFlow(
            duration = 200.milliseconds,
            onStart = {
                leaveShadeOpen = statusBarStateController.leaveOpenOnKeyguardHide()
                startAlpha = viewState.alpha()
            },
            onStep = {
                if (leaveShadeOpen) {
                    1f
                } else {
                    MathUtils.lerp(startAlpha, 0f, it)
                }
            },
        )
    }

    /** Scrim alpha values */
    val scrimAlpha: Flow<ScrimAlpha> =
        bouncerToGoneFlows.scrimAlpha(TO_GONE_DURATION, ALTERNATE_BOUNCER)
+22 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow.FlowBuilder
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.statusbar.SysuiStatusBarStateController
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -37,6 +38,7 @@ class LockscreenToGoneTransitionViewModel
@Inject
constructor(
    animationFlow: KeyguardTransitionAnimationFlow,
    private val statusBarStateController: SysuiStatusBarStateController,
) : DeviceEntryIconTransition {

    private val transitionAnimation: FlowBuilder =
@@ -54,6 +56,26 @@ constructor(
            onCancel = { 1f },
        )

    fun notificationAlpha(viewState: ViewStateAccessor): Flow<Float> {
        var startAlpha = 1f
        var leaveShadeOpen = false

        return transitionAnimation.sharedFlow(
            duration = 200.milliseconds,
            onStart = {
                leaveShadeOpen = statusBarStateController.leaveOpenOnKeyguardHide()
                startAlpha = viewState.alpha()
            },
            onStep = {
                if (leaveShadeOpen) {
                    1f
                } else {
                    MathUtils.lerp(startAlpha, 0f, it)
                }
            },
        )
    }

    fun lockscreenAlpha(viewState: ViewStateAccessor): Flow<Float> {
        var startAlpha = 1f
        return transitionAnimation.sharedFlow(
+2 −2
Original line number Diff line number Diff line
@@ -445,7 +445,7 @@ constructor(
        // All transition view models are mututally exclusive, and safe to merge
        val alphaTransitions =
            merge(
                alternateBouncerToGoneTransitionViewModel.lockscreenAlpha(viewState),
                alternateBouncerToGoneTransitionViewModel.notificationAlpha(viewState),
                aodToLockscreenTransitionViewModel.notificationAlpha,
                aodToOccludedTransitionViewModel.lockscreenAlpha(viewState),
                dozingToLockscreenTransitionViewModel.lockscreenAlpha,
@@ -455,7 +455,7 @@ constructor(
                goneToDreamingTransitionViewModel.lockscreenAlpha,
                goneToDozingTransitionViewModel.lockscreenAlpha,
                lockscreenToDreamingTransitionViewModel.lockscreenAlpha,
                lockscreenToGoneTransitionViewModel.lockscreenAlpha(viewState),
                lockscreenToGoneTransitionViewModel.notificationAlpha(viewState),
                lockscreenToOccludedTransitionViewModel.lockscreenAlpha,
                lockscreenToPrimaryBouncerTransitionViewModel.lockscreenAlpha,
                occludedToAodTransitionViewModel.lockscreenAlpha,
Loading