Loading packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToGoneTransitionViewModelTest.kt +58 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() = Loading @@ -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, Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToGoneTransitionViewModel.kt +8 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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> = Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -205,7 +205,7 @@ constructor( merge( alphaOnShadeExpansion, keyguardInteractor.dismissAlpha.filterNotNull(), alternateBouncerToGoneTransitionViewModel.lockscreenAlpha, alternateBouncerToGoneTransitionViewModel.lockscreenAlpha(viewState), aodToGoneTransitionViewModel.lockscreenAlpha(viewState), aodToLockscreenTransitionViewModel.lockscreenAlpha(viewState), aodToOccludedTransitionViewModel.lockscreenAlpha(viewState), Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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, Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToGoneTransitionViewModelTest.kt +58 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() = Loading @@ -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, Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToGoneTransitionViewModel.kt +8 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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> = Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -205,7 +205,7 @@ constructor( merge( alphaOnShadeExpansion, keyguardInteractor.dismissAlpha.filterNotNull(), alternateBouncerToGoneTransitionViewModel.lockscreenAlpha, alternateBouncerToGoneTransitionViewModel.lockscreenAlpha(viewState), aodToGoneTransitionViewModel.lockscreenAlpha(viewState), aodToLockscreenTransitionViewModel.lockscreenAlpha(viewState), aodToOccludedTransitionViewModel.lockscreenAlpha(viewState), Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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, Loading