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

Commit 5a800ba4 authored by Beverly Tai's avatar Beverly Tai Committed by Android (Google) Code Review
Browse files

Merge "Make AlteBouncerWindowVM and AltBouncerVM rely on same transition" into main

parents 6b613fb4 8d9b0a72
Loading
Loading
Loading
Loading
+3 −35
Original line number Diff line number Diff line
@@ -18,61 +18,29 @@
package com.android.systemui.keyguard.ui.viewmodel

import android.graphics.Color
import com.android.systemui.keyguard.domain.interactor.FromAlternateBouncerTransitionInteractor.Companion.TRANSITION_DURATION_MS
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState.ALTERNATE_BOUNCER
import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import com.android.wm.shell.animation.Interpolators
import javax.inject.Inject
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge

@ExperimentalCoroutinesApi
class AlternateBouncerViewModel
@Inject
constructor(
    private val statusBarKeyguardViewManager: StatusBarKeyguardViewManager,
    animationFlow: KeyguardTransitionAnimationFlow,
    keyguardTransitionInteractor: KeyguardTransitionInteractor,
) {
    // When we're fully transitioned to the AlternateBouncer, the alpha of the scrim should be:
    private val alternateBouncerScrimAlpha = .66f
    private val toAlternateBouncerTransition =
        animationFlow
            .setup(
                duration = TRANSITION_DURATION_MS,
                from = null,
                to = ALTERNATE_BOUNCER,
            )
            .sharedFlow(
                duration = TRANSITION_DURATION_MS,
                onStep = { it },
                onFinish = { 1f },
                // Reset on cancel
                onCancel = { 0f },
                interpolator = Interpolators.FAST_OUT_SLOW_IN,
            )
    private val fromAlternateBouncerTransition =
        animationFlow
            .setup(
                TRANSITION_DURATION_MS,
                from = ALTERNATE_BOUNCER,
                to = null,
            )
            .sharedFlow(
                duration = TRANSITION_DURATION_MS,
                onStep = { 1f - it },
                // Reset on cancel
                onCancel = { 0f },
                interpolator = Interpolators.FAST_OUT_SLOW_IN,
            )

    /** Progress to a fully transitioned alternate bouncer. 1f represents fully transitioned. */
    val transitionToAlternateBouncerProgress =
        merge(fromAlternateBouncerTransition, toAlternateBouncerTransition)
        keyguardTransitionInteractor.transitionValue(ALTERNATE_BOUNCER)

    val forcePluginOpen: Flow<Boolean> =
        transitionToAlternateBouncerProgress.map { it > 0f }.distinctUntilChanged()
+4 −5
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import com.android.systemui.util.mockito.any
import com.google.common.collect.Range
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
@@ -67,7 +66,7 @@ class AlternateBouncerViewModelTest : SysuiTestCase() {
    fun transitionToAlternateBouncer_scrimAlphaUpdate() =
        testScope.runTest {
            val scrimAlphas by collectValues(underTest.scrimAlpha)
            runCurrent()
            assertThat(scrimAlphas.size).isEqualTo(1) // initial value is 0f

            transitionRepository.sendTransitionSteps(
                listOf(
@@ -79,7 +78,7 @@ class AlternateBouncerViewModelTest : SysuiTestCase() {
                testScope,
            )

            assertThat(scrimAlphas.size).isEqualTo(4)
            assertThat(scrimAlphas.size).isEqualTo(5)
            scrimAlphas.forEach { assertThat(it).isIn(Range.closed(0f, 1f)) }
        }

@@ -87,7 +86,7 @@ class AlternateBouncerViewModelTest : SysuiTestCase() {
    fun transitionFromAlternateBouncer_scrimAlphaUpdate() =
        testScope.runTest {
            val scrimAlphas by collectValues(underTest.scrimAlpha)
            runCurrent()
            assertThat(scrimAlphas.size).isEqualTo(1) // initial value is 0f

            transitionRepository.sendTransitionSteps(
                listOf(
@@ -98,7 +97,7 @@ class AlternateBouncerViewModelTest : SysuiTestCase() {
                ),
                testScope,
            )
            assertThat(scrimAlphas.size).isEqualTo(4)
            assertThat(scrimAlphas.size).isEqualTo(5)
            scrimAlphas.forEach { assertThat(it).isIn(Range.closed(0f, 1f)) }
        }

+2 −2
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@

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

import com.android.systemui.keyguard.ui.keyguardTransitionAnimationFlow
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.statusbar.phone.statusBarKeyguardViewManager
@@ -27,6 +27,6 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
val Kosmos.alternateBouncerViewModel by Fixture {
    AlternateBouncerViewModel(
        statusBarKeyguardViewManager = statusBarKeyguardViewManager,
        animationFlow = keyguardTransitionAnimationFlow,
        keyguardTransitionInteractor = keyguardTransitionInteractor,
    )
}