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

Commit 12ee30df authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[flexiglass] Hydrate dozeAmount with AOD and DOZE transitions" into main

parents f49ec247 683c371c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.doze.DozeMachine
import com.android.systemui.doze.DozeTransitionCallback
import com.android.systemui.doze.DozeTransitionListener
import com.android.systemui.dreams.DreamOverlayCallbackController
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.keyguard.shared.model.BiometricUnlockMode
import com.android.systemui.keyguard.shared.model.BiometricUnlockSource
import com.android.systemui.keyguard.shared.model.DozeStateModel
@@ -288,6 +289,7 @@ class KeyguardRepositoryImplTest : SysuiTestCase() {
        }

    @Test
    @DisableSceneContainer
    fun dozeAmount() =
        testScope.runTest {
            val values = mutableListOf<Float>()
+82 −18
Original line number Diff line number Diff line
@@ -29,15 +29,21 @@ import com.android.systemui.common.ui.data.repository.fakeConfigurationRepositor
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectValues
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeCommandQueue
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.keyguardRepository
import com.android.systemui.keyguard.shared.model.CameraLaunchType
import com.android.systemui.keyguard.shared.model.DozeStateModel
import com.android.systemui.keyguard.shared.model.DozeTransitionModel
import com.android.systemui.keyguard.shared.model.KeyguardState
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.LOCKSCREEN
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionState.FINISHED
import com.android.systemui.keyguard.shared.model.TransitionState.RUNNING
import com.android.systemui.keyguard.shared.model.TransitionState.STARTED
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.kosmos.testScope
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
@@ -67,12 +73,11 @@ class KeyguardInteractorTest : SysuiTestCase() {
    private val testScope = kosmos.testScope
    private val repository by lazy { kosmos.fakeKeyguardRepository }
    private val sceneInteractor by lazy { kosmos.sceneInteractor }
    private val fromGoneTransitionInteractor by lazy { kosmos.fromGoneTransitionInteractor }
    private val commandQueue by lazy { kosmos.fakeCommandQueue }
    private val configRepository by lazy { kosmos.fakeConfigurationRepository }
    private val bouncerRepository by lazy { kosmos.keyguardBouncerRepository }
    private val shadeRepository by lazy { kosmos.shadeRepository }
    private val powerInteractor by lazy { kosmos.powerInteractor }
    private val keyguardRepository by lazy { kosmos.keyguardRepository }
    private val keyguardTransitionRepository by lazy { kosmos.fakeKeyguardTransitionRepository }

    private val transitionState: MutableStateFlow<ObservableTransitionState> =
@@ -178,8 +183,8 @@ class KeyguardInteractorTest : SysuiTestCase() {
            assertThat(dismissAlpha).isEqualTo(1f)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.AOD,
                to = KeyguardState.LOCKSCREEN,
                from = AOD,
                to = LOCKSCREEN,
                testScope,
            )

@@ -204,8 +209,8 @@ class KeyguardInteractorTest : SysuiTestCase() {
            assertThat(dismissAlpha.size).isEqualTo(1)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.AOD,
                to = KeyguardState.LOCKSCREEN,
                from = AOD,
                to = LOCKSCREEN,
                testScope,
            )

@@ -266,13 +271,13 @@ class KeyguardInteractorTest : SysuiTestCase() {
            keyguardTransitionRepository.sendTransitionSteps(
                listOf(
                    TransitionStep(
                        from = KeyguardState.AOD,
                        from = AOD,
                        to = KeyguardState.GONE,
                        value = 0f,
                        transitionState = TransitionState.STARTED,
                        transitionState = STARTED,
                    ),
                    TransitionStep(
                        from = KeyguardState.AOD,
                        from = AOD,
                        to = KeyguardState.GONE,
                        value = 0.1f,
                        transitionState = TransitionState.RUNNING,
@@ -302,7 +307,7 @@ class KeyguardInteractorTest : SysuiTestCase() {
            shadeRepository.setLegacyShadeExpansion(0f)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.AOD,
                from = AOD,
                to = KeyguardState.GONE,
                testScope,
            )
@@ -324,8 +329,8 @@ class KeyguardInteractorTest : SysuiTestCase() {
            shadeRepository.setLegacyShadeExpansion(0f)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.AOD,
                to = KeyguardState.LOCKSCREEN,
                from = AOD,
                to = LOCKSCREEN,
                testScope,
            )

@@ -346,8 +351,8 @@ class KeyguardInteractorTest : SysuiTestCase() {
            shadeRepository.setLegacyShadeExpansion(1f)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.AOD,
                to = KeyguardState.LOCKSCREEN,
                from = AOD,
                to = LOCKSCREEN,
                testScope,
            )

@@ -370,13 +375,13 @@ class KeyguardInteractorTest : SysuiTestCase() {
            keyguardTransitionRepository.sendTransitionSteps(
                listOf(
                    TransitionStep(
                        from = KeyguardState.AOD,
                        from = AOD,
                        to = KeyguardState.GONE,
                        value = 0f,
                        transitionState = TransitionState.STARTED,
                        transitionState = STARTED,
                    ),
                    TransitionStep(
                        from = KeyguardState.AOD,
                        from = AOD,
                        to = KeyguardState.GONE,
                        value = 0.1f,
                        transitionState = TransitionState.RUNNING,
@@ -468,4 +473,63 @@ class KeyguardInteractorTest : SysuiTestCase() {
            runCurrent()
            assertThat(isAnimate).isFalse()
        }

    @Test
    @EnableSceneContainer
    fun dozeAmount_updatedByAodTransitionWhenAodEnabled() =
        testScope.runTest {
            val dozeAmount by collectLastValue(underTest.dozeAmount)

            keyguardRepository.setAodAvailable(true)

            sendTransitionStep(TransitionStep(to = AOD, value = 0f, transitionState = STARTED))
            assertThat(dozeAmount).isEqualTo(0f)

            sendTransitionStep(TransitionStep(to = AOD, value = 0.5f, transitionState = RUNNING))
            assertThat(dozeAmount).isEqualTo(0.5f)

            sendTransitionStep(TransitionStep(to = AOD, value = 1f, transitionState = FINISHED))
            assertThat(dozeAmount).isEqualTo(1f)

            sendTransitionStep(TransitionStep(AOD, LOCKSCREEN, 0f, STARTED))
            assertThat(dozeAmount).isEqualTo(1f)

            sendTransitionStep(TransitionStep(AOD, LOCKSCREEN, 0.5f, RUNNING))
            assertThat(dozeAmount).isEqualTo(0.5f)

            sendTransitionStep(TransitionStep(AOD, LOCKSCREEN, 1f, FINISHED))
            assertThat(dozeAmount).isEqualTo(0f)
        }

    @Test
    @EnableSceneContainer
    fun dozeAmount_updatedByDozeTransitionWhenAodDisabled() =
        testScope.runTest {
            val dozeAmount by collectLastValue(underTest.dozeAmount)

            keyguardRepository.setAodAvailable(false)

            sendTransitionStep(TransitionStep(to = DOZING, value = 0f, transitionState = STARTED))
            assertThat(dozeAmount).isEqualTo(0f)

            sendTransitionStep(TransitionStep(to = DOZING, value = 0.5f, transitionState = RUNNING))
            assertThat(dozeAmount).isEqualTo(0.5f)

            sendTransitionStep(TransitionStep(to = DOZING, value = 1f, transitionState = FINISHED))
            assertThat(dozeAmount).isEqualTo(1f)

            sendTransitionStep(TransitionStep(DOZING, LOCKSCREEN, 0f, STARTED))
            assertThat(dozeAmount).isEqualTo(1f)

            sendTransitionStep(TransitionStep(DOZING, LOCKSCREEN, 0.5f, RUNNING))
            assertThat(dozeAmount).isEqualTo(0.5f)

            sendTransitionStep(TransitionStep(DOZING, LOCKSCREEN, 1f, FINISHED))
            assertThat(dozeAmount).isEqualTo(0f)
        }

    private suspend fun sendTransitionStep(step: TransitionStep) {
        keyguardTransitionRepository.sendTransitionStep(step)
        testScope.runCurrent()
    }
}
+35 −5
Original line number Diff line number Diff line
@@ -27,11 +27,18 @@ import com.android.systemui.doze.util.BurnInHelperWrapper
import com.android.systemui.flags.andSceneContainer
import com.android.systemui.keyguard.data.repository.FakeCommandQueue
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState.DOZING
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.keyguard.shared.model.TransitionState.FINISHED
import com.android.systemui.keyguard.shared.model.TransitionState.RUNNING
import com.android.systemui.keyguard.shared.model.TransitionState.STARTED
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.kosmos.testScope
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
import com.android.systemui.power.domain.interactor.PowerInteractorFactory
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.shade.data.repository.fakeShadeRepository
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shade.domain.interactor.shadeLockscreenInteractor
@@ -62,6 +69,7 @@ class UdfpsKeyguardInteractorTest(flags: FlagsParameterization) : SysuiTestCase(
    val kosmos = testKosmos()
    val testScope = kosmos.testScope
    val keyguardRepository = kosmos.fakeKeyguardRepository
    val keyguardTransitionRepository by lazy { kosmos.fakeKeyguardTransitionRepository }
    val shadeRepository = kosmos.fakeShadeRepository
    val shadeTestUtil by lazy { kosmos.shadeTestUtil }

@@ -132,8 +140,15 @@ class UdfpsKeyguardInteractorTest(flags: FlagsParameterization) : SysuiTestCase(
            assertThat(burnInOffsets?.x).isEqualTo(0)

            // WHEN we're in the middle of the doze amount change
            if (SceneContainerFlag.isEnabled) {
                sendTransitionSteps(
                    TransitionStep(to = DOZING, value = 0.0f, transitionState = STARTED),
                    TransitionStep(to = DOZING, value = 0.5f, transitionState = RUNNING),
                )
            } else {
                keyguardRepository.setDozeAmount(.50f)
                runCurrent()
            }

            // THEN burn in is updated (between 0 and the full offset)
            assertThat(burnInOffsets?.progress).isGreaterThan(0f)
@@ -144,8 +159,14 @@ class UdfpsKeyguardInteractorTest(flags: FlagsParameterization) : SysuiTestCase(
            assertThat(burnInOffsets?.x).isLessThan(burnInXOffset)

            // WHEN we're fully dozing
            if (SceneContainerFlag.isEnabled) {
                sendTransitionSteps(
                    TransitionStep(to = DOZING, value = 1.0f, transitionState = FINISHED)
                )
            } else {
                keyguardRepository.setDozeAmount(1f)
                runCurrent()
            }

            // THEN burn in offsets are updated to final current values (for the given time)
            assertThat(burnInOffsets?.progress).isEqualTo(burnInProgress)
@@ -217,7 +238,9 @@ class UdfpsKeyguardInteractorTest(flags: FlagsParameterization) : SysuiTestCase(
    }

    private fun setAwake() {
        if (!SceneContainerFlag.isEnabled) {
            keyguardRepository.setDozeAmount(0f)
        }
        keyguardRepository.dozeTimeTick()

        bouncerRepository.setAlternateVisible(false)
@@ -225,4 +248,11 @@ class UdfpsKeyguardInteractorTest(flags: FlagsParameterization) : SysuiTestCase(
        bouncerRepository.setPrimaryShow(false)
        powerInteractor.setAwakeForTest()
    }

    private suspend fun sendTransitionSteps(vararg steps: TransitionStep) {
        steps.forEach { step ->
            keyguardTransitionRepository.sendTransitionStep(step)
            testScope.runCurrent()
        }
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.systemui.jank.interactionJankMonitor
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.domain.interactor.keyguardClockInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
@@ -107,6 +108,7 @@ class StatusBarStateControllerImplTest(flags: FlagsParameterization) : SysuiTest
                    uiEventLogger,
                    { kosmos.interactionJankMonitor },
                    JavaAdapter(testScope.backgroundScope),
                    { kosmos.keyguardInteractor },
                    { kosmos.keyguardTransitionInteractor },
                    { kosmos.shadeInteractor },
                    { kosmos.deviceUnlockedInteractor },
@@ -139,6 +141,7 @@ class StatusBarStateControllerImplTest(flags: FlagsParameterization) : SysuiTest
    }

    @Test
    @DisableSceneContainer
    fun testSetDozeAmountInternal_onlySetsOnce() {
        val listener = mock(StatusBarStateController.StateListener::class.java)
        underTest.addCallback(listener)
@@ -190,6 +193,7 @@ class StatusBarStateControllerImplTest(flags: FlagsParameterization) : SysuiTest
    }

    @Test
    @DisableSceneContainer
    fun testSetDozeAmount_immediatelyChangesDozeAmount_lockscreenTransitionFromAod() {
        // Put controller in AOD state
        underTest.setAndInstrumentDozeAmount(null, 1f, false)
+27 −11
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.mapLatest
@@ -486,7 +487,11 @@ constructor(

    override val isDreaming: MutableStateFlow<Boolean> = MutableStateFlow(false)

    override val linearDozeAmount: Flow<Float> = conflatedCallbackFlow {
    private val _preSceneLinearDozeAmount: Flow<Float> =
        if (SceneContainerFlag.isEnabled) {
            emptyFlow()
        } else {
            conflatedCallbackFlow {
                val callback =
                    object : StatusBarStateController.StateListener {
                        override fun onDozeAmountChanged(linear: Float, eased: Float) {
@@ -495,10 +500,21 @@ constructor(
                    }

                statusBarStateController.addCallback(callback)
        trySendWithFailureLogging(statusBarStateController.dozeAmount, TAG, "initial dozeAmount")
                trySendWithFailureLogging(
                    statusBarStateController.dozeAmount,
                    TAG,
                    "initial dozeAmount"
                )

                awaitClose { statusBarStateController.removeCallback(callback) }
            }
        }

    override val linearDozeAmount: Flow<Float>
        get() {
            SceneContainerFlag.assertInLegacyMode()
            return _preSceneLinearDozeAmount
        }

    override val dozeTransitionModel: Flow<DozeTransitionModel> = conflatedCallbackFlow {
        val callback =
Loading