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

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

Merge "Fix lock screen flash when transitioning from hub to edit mode" into main

parents 6bb87ff4 6f7e5a2e
Loading
Loading
Loading
Loading
+58 −3
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.keyguard.ui.viewmodel
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectValues
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
@@ -32,6 +33,7 @@ import com.android.systemui.kosmos.testScope
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
@@ -49,9 +51,7 @@ class AlternateBouncerToGoneTransitionViewModelTest : SysuiTestCase() {
        }
    private val testScope = kosmos.testScope
    private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
    private val underTest by lazy {
        kosmos.alternateBouncerToGoneTransitionViewModel
    }
    private val underTest by lazy { kosmos.alternateBouncerToGoneTransitionViewModel }

    @Test
    fun deviceEntryParentViewDisappear() =
@@ -73,6 +73,61 @@ class AlternateBouncerToGoneTransitionViewModelTest : SysuiTestCase() {
            values.forEach { assertThat(it).isEqualTo(0f) }
        }

    @Test
    fun lockscreenAlpha() =
        testScope.runTest {
            val startAlpha = 0.6f
            val viewState = ViewStateAccessor(alpha = { startAlpha })
            val alpha by collectLastValue(underTest.lockscreenAlpha(viewState))
            runCurrent()

            keyguardTransitionRepository.sendTransitionSteps(
                listOf(
                    step(0f, TransitionState.STARTED),
                    step(0.25f),
                    step(0.5f),
                    step(0.75f),
                    step(1f),
                ),
                testScope,
            )

            // Alpha starts at the starting value from ViewStateAccessor.
            keyguardTransitionRepository.sendTransitionStep(
                step(0f, state = TransitionState.STARTED)
            )
            runCurrent()
            assertThat(alpha).isEqualTo(startAlpha)

            // Alpha finishes in 200ms out of 500ms, check the alpha at the halfway point.
            val progress = 0.2f
            keyguardTransitionRepository.sendTransitionStep(step(progress))
            runCurrent()
            assertThat(alpha).isEqualTo(0.3f)

            // Alpha ends at 0.
            keyguardTransitionRepository.sendTransitionStep(step(1f))
            runCurrent()
            assertThat(alpha).isEqualTo(0f)
        }

    @Test
    fun lockscreenAlpha_zeroInitialAlpha() =
        testScope.runTest {
            // ViewState starts at 0 alpha.
            val viewState = ViewStateAccessor(alpha = { 0f })
            val alpha by collectValues(underTest.lockscreenAlpha(viewState))

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.ALTERNATE_BOUNCER,
                to = GONE,
                testScope
            )

            // Alpha starts and ends at 0.
            alpha.forEach { assertThat(it).isEqualTo(0f) }
        }

    private fun step(value: Float, state: TransitionState = RUNNING): TransitionStep {
        return TransitionStep(
            from = KeyguardState.ALTERNATE_BOUNCER,
+8 −4
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.keyguard.ui.viewmodel

import android.util.MathUtils
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.domain.interactor.FromAlternateBouncerTransitionInteractor.Companion.TO_GONE_DURATION
import com.android.systemui.keyguard.shared.model.KeyguardState
@@ -47,13 +48,16 @@ constructor(
            to = KeyguardState.GONE,
        )

    val lockscreenAlpha: Flow<Float> =
        transitionAnimation.sharedFlow(
    fun lockscreenAlpha(viewState: ViewStateAccessor): Flow<Float> {
        var startAlpha = 1f
        return transitionAnimation.sharedFlow(
            duration = 200.milliseconds,
            onStep = { 1 - it },
            onStart = { startAlpha = viewState.alpha() },
            onStep = { MathUtils.lerp(startAlpha, 0f, it) },
            onFinish = { 0f },
            onCancel = { 1f },
            onCancel = { startAlpha },
        )
    }

    /** Scrim alpha values */
    val scrimAlpha: Flow<ScrimAlpha> =
+1 −1
Original line number Diff line number Diff line
@@ -205,7 +205,7 @@ constructor(
                merge(
                        alphaOnShadeExpansion,
                        keyguardInteractor.dismissAlpha.filterNotNull(),
                        alternateBouncerToGoneTransitionViewModel.lockscreenAlpha,
                        alternateBouncerToGoneTransitionViewModel.lockscreenAlpha(viewState),
                        aodToGoneTransitionViewModel.lockscreenAlpha(viewState),
                        aodToLockscreenTransitionViewModel.lockscreenAlpha(viewState),
                        aodToOccludedTransitionViewModel.lockscreenAlpha(viewState),
+1 −1
Original line number Diff line number Diff line
@@ -386,7 +386,7 @@ constructor(
        // All transition view models are mututally exclusive, and safe to merge
        val alphaTransitions =
            merge(
                alternateBouncerToGoneTransitionViewModel.lockscreenAlpha,
                alternateBouncerToGoneTransitionViewModel.lockscreenAlpha(viewState),
                aodToLockscreenTransitionViewModel.notificationAlpha,
                aodToOccludedTransitionViewModel.lockscreenAlpha(viewState),
                dozingToLockscreenTransitionViewModel.lockscreenAlpha,