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

Commit b47b88de authored by Matt Pietal's avatar Matt Pietal Committed by Android (Google) Code Review
Browse files

Merge "Control all transition alpha with TransitionViewModels" into main

parents 39087e18 417a78d1
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -40,7 +40,6 @@ fun Modifier.burnInAware(
): Modifier {
    val translationX by viewModel.translationX(params).collectAsState(initial = 0f)
    val translationY by viewModel.translationY(params).collectAsState(initial = 0f)
    val alpha by viewModel.alpha.collectAsState(initial = 1f)
    val scaleViewModel by viewModel.scale(params).collectAsState(initial = BurnInScaleViewModel())

    return this.graphicsLayer {
+49 −3
Original line number Diff line number Diff line
@@ -27,7 +27,10 @@ import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.coroutines.collectLastValue
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.CameraLaunchSourceModel
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.kosmos.testScope
import com.android.systemui.power.domain.interactor.PowerInteractorFactory
import com.android.systemui.scene.domain.interactor.sceneInteractor
@@ -56,11 +59,10 @@ class KeyguardInteractorTest : SysuiTestCase() {
    private val testScope = kosmos.testScope
    private val repository by lazy { kosmos.fakeKeyguardRepository }
    private val sceneInteractor by lazy { kosmos.sceneInteractor }
    private val commandQueue by lazy {
        FakeCommandQueue()
    }
    private val commandQueue by lazy { FakeCommandQueue() }
    private val bouncerRepository = FakeKeyguardBouncerRepository()
    private val shadeRepository = FakeShadeRepository()
    private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
    private val transitionState: MutableStateFlow<ObservableTransitionState> =
        MutableStateFlow(ObservableTransitionState.Idle(SceneKey.Gone))

@@ -73,6 +75,7 @@ class KeyguardInteractorTest : SysuiTestCase() {
            bouncerRepository = bouncerRepository,
            configurationInteractor = ConfigurationInteractor(FakeConfigurationRepository()),
            shadeRepository = shadeRepository,
            keyguardTransitionInteractor = kosmos.keyguardTransitionInteractor,
            sceneInteractorProvider = { sceneInteractor },
        )
    }
@@ -187,6 +190,49 @@ class KeyguardInteractorTest : SysuiTestCase() {
            assertThat(secureCameraActive()).isFalse()
        }

    @Test
    fun dismissAlpha() =
        testScope.runTest {
            val dismissAlpha by collectLastValue(underTest.dismissAlpha)

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

            repository.setStatusBarState(StatusBarState.KEYGUARD)
            shadeRepository.setLegacyShadeExpansion(1f)

            // When not dismissable, no alpha value (null) should emit
            repository.setKeyguardDismissible(false)
            assertThat(dismissAlpha).isNull()

            repository.setKeyguardDismissible(true)
            assertThat(dismissAlpha).isGreaterThan(0.95f)
        }

    @Test
    fun dismissAlpha_whenShadeIsExpandedEmitsNull() =
        testScope.runTest {
            val dismissAlpha by collectLastValue(underTest.dismissAlpha)

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

            repository.setStatusBarState(StatusBarState.SHADE_LOCKED)
            shadeRepository.setQsExpansion(1f)

            repository.setKeyguardDismissible(false)
            assertThat(dismissAlpha).isNull()

            repository.setKeyguardDismissible(true)
            assertThat(dismissAlpha).isNull()
        }

    @Test
    fun animationDozingTransitions() =
        testScope.runTest {
+84 −26
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
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.testKosmos
import com.android.systemui.util.mockito.whenever
@@ -42,49 +44,69 @@ import org.mockito.MockitoAnnotations
@RunWith(AndroidJUnit4::class)
class AodAlphaViewModelTest : SysuiTestCase() {

    @Mock
    private lateinit var occludedToLockscreenTransitionViewModel:
        OccludedToLockscreenTransitionViewModel
    @Mock private lateinit var goneToAodTransitionViewModel: GoneToAodTransitionViewModel

    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
    private val keyguardRepository = kosmos.fakeKeyguardRepository
    private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
    private val occludedToLockscreenAlpha = MutableStateFlow(0f)

    private lateinit var underTest: AodAlphaViewModel

    private val enterFromTopAnimationAlpha = MutableStateFlow(0f)

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
        whenever(occludedToLockscreenTransitionViewModel.lockscreenAlpha)
            .thenReturn(occludedToLockscreenAlpha)
        kosmos.occludedToLockscreenTransitionViewModel = occludedToLockscreenTransitionViewModel
        whenever(goneToAodTransitionViewModel.enterFromTopAnimationAlpha)
            .thenReturn(enterFromTopAnimationAlpha)
        kosmos.goneToAodTransitionViewModel = goneToAodTransitionViewModel

        underTest = kosmos.aodAlphaViewModel
    }

    @Test
    fun alpha() =
    fun alpha_WhenGoneToAod() =
        testScope.runTest {
            val alpha by collectLastValue(underTest.alpha)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.OFF,
                to = KeyguardState.LOCKSCREEN,
                from = KeyguardState.AOD,
                to = KeyguardState.GONE,
                testScope = testScope,
            )
            assertThat(alpha).isEqualTo(0f)

            keyguardRepository.setKeyguardAlpha(0.1f)
            assertThat(alpha).isEqualTo(0.1f)
            keyguardRepository.setKeyguardAlpha(0.5f)
            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.GONE,
                to = KeyguardState.AOD,
                testScope = testScope,
            )
            enterFromTopAnimationAlpha.value = 0.5f
            assertThat(alpha).isEqualTo(0.5f)
            keyguardRepository.setKeyguardAlpha(0.2f)
            assertThat(alpha).isEqualTo(0.2f)
            keyguardRepository.setKeyguardAlpha(0f)

            enterFromTopAnimationAlpha.value = 1f
            assertThat(alpha).isEqualTo(1f)
        }

    @Test
    fun alpha_WhenGoneToDozing() =
        testScope.runTest {
            val alpha by collectLastValue(underTest.alpha)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.AOD,
                to = KeyguardState.GONE,
                testScope = testScope,
            )
            assertThat(alpha).isEqualTo(0f)
            occludedToLockscreenAlpha.value = 0.8f
            assertThat(alpha).isEqualTo(0.8f)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.GONE,
                to = KeyguardState.DOZING,
                testScope = testScope,
            )
            assertThat(alpha).isEqualTo(1f)
        }

    @Test
@@ -92,17 +114,53 @@ class AodAlphaViewModelTest : SysuiTestCase() {
        testScope.runTest {
            val alpha by collectLastValue(underTest.alpha)

            keyguardTransitionRepository.sendTransitionSteps(
            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    from = KeyguardState.LOCKSCREEN,
                    to = KeyguardState.GONE,
                testScope = testScope,
                    transitionState = TransitionState.STARTED,
                )
            )
            assertThat(alpha).isNull()

            keyguardRepository.setKeyguardAlpha(0.1f)
            assertThat(alpha).isEqualTo(0f)
            keyguardRepository.setKeyguardAlpha(0.5f)
            assertThat(alpha).isEqualTo(0f)
            keyguardRepository.setKeyguardAlpha(1f)
            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    from = KeyguardState.LOCKSCREEN,
                    to = KeyguardState.GONE,
                    transitionState = TransitionState.RUNNING,
                    value = 0.5f,
                )
            )
            assertThat(alpha).isNull()

            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    from = KeyguardState.LOCKSCREEN,
                    to = KeyguardState.GONE,
                    transitionState = TransitionState.RUNNING,
                    value = 1f,
                )
            )
            assertThat(alpha).isEqualTo(0f)
        }

    @Test
    fun enterFromTopAlpha() =
        testScope.runTest {
            val alpha by collectLastValue(underTest.alpha)

            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    from = KeyguardState.GONE,
                    to = KeyguardState.AOD,
                    transitionState = TransitionState.STARTED,
                )
            )

            enterFromTopAnimationAlpha.value = 0.2f
            assertThat(alpha).isEqualTo(0.2f)

            enterFromTopAnimationAlpha.value = 1f
            assertThat(alpha).isEqualTo(1f)
        }
}
+0 −15
Original line number Diff line number Diff line
@@ -65,7 +65,6 @@ class AodBurnInViewModelTest : SysuiTestCase() {
            clockControllerProvider = { clockController },
        )
    private val burnInFlow = MutableStateFlow(BurnInModel())
    private val enterFromTopAnimationAlpha = MutableStateFlow(0f)

    @Before
    fun setUp() {
@@ -74,8 +73,6 @@ class AodBurnInViewModelTest : SysuiTestCase() {
        MockitoAnnotations.initMocks(this)
        whenever(burnInInteractor.keyguardBurnIn).thenReturn(burnInFlow)
        kosmos.burnInInteractor = burnInInteractor
        whenever(goneToAodTransitionViewModel.enterFromTopAnimationAlpha)
            .thenReturn(enterFromTopAnimationAlpha)
        whenever(goneToAodTransitionViewModel.enterFromTopTranslationY(anyInt()))
            .thenReturn(emptyFlow())
        kosmos.goneToAodTransitionViewModel = goneToAodTransitionViewModel
@@ -278,16 +275,4 @@ class AodBurnInViewModelTest : SysuiTestCase() {
            assertThat(translationY).isEqualTo(0)
            assertThat(scale).isEqualTo(BurnInScaleViewModel(scale = 0.5f, scaleClockOnly = false))
        }

    @Test
    fun alpha() =
        testScope.runTest {
            val alpha by collectLastValue(underTest.alpha)

            enterFromTopAnimationAlpha.value = 0.2f
            assertThat(alpha).isEqualTo(0.2f)

            enterFromTopAnimationAlpha.value = 1f
            assertThat(alpha).isEqualTo(1f)
        }
}
+9 −2
Original line number Diff line number Diff line
@@ -255,14 +255,21 @@ class KeyguardRootViewModelTest : SysuiTestCase() {
        testScope.runTest {
            val alpha by collectLastValue(underTest.alpha(viewState))

            // Default value check
            assertThat(alpha).isEqualTo(1f)

            // Hub transition state is idle with hub open.
            communalRepository.setTransitionState(
                flowOf(ObservableCommunalTransitionState.Idle(CommunalSceneKey.Communal))
            )
            runCurrent()

            // Set keyguard alpha to 1.0f.
            keyguardInteractor.setAlpha(1.0f)
            // Run at least 1 transition to make sure value remains at 0
            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.AOD,
                to = KeyguardState.LOCKSCREEN,
                testScope,
            )

            // Alpha property remains 0 regardless.
            assertThat(alpha).isEqualTo(0f)
Loading