Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModel.kt +3 −35 Original line number Diff line number Diff line Loading @@ -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() Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelTest.kt +4 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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( Loading @@ -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)) } } Loading @@ -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( Loading @@ -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)) } } Loading packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelKosmos.kt +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -27,6 +27,6 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi val Kosmos.alternateBouncerViewModel by Fixture { AlternateBouncerViewModel( statusBarKeyguardViewManager = statusBarKeyguardViewManager, animationFlow = keyguardTransitionAnimationFlow, keyguardTransitionInteractor = keyguardTransitionInteractor, ) } Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModel.kt +3 −35 Original line number Diff line number Diff line Loading @@ -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() Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelTest.kt +4 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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( Loading @@ -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)) } } Loading @@ -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( Loading @@ -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)) } } Loading
packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerViewModelKosmos.kt +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -27,6 +27,6 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi val Kosmos.alternateBouncerViewModel by Fixture { AlternateBouncerViewModel( statusBarKeyguardViewManager = statusBarKeyguardViewManager, animationFlow = keyguardTransitionAnimationFlow, keyguardTransitionInteractor = keyguardTransitionInteractor, ) }