Loading packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt +37 −4 Original line number Diff line number Diff line Loading @@ -224,6 +224,39 @@ class KeyguardInteractorTest : SysuiTestCase() { assertThat(dismissAlpha.size).isEqualTo(3) } @Test fun dismissAlpha_onGlanceableHub_doesNotEmitWhenShadeResets() = testScope.runTest { val dismissAlpha by collectValues(underTest.dismissAlpha) assertThat(dismissAlpha[0]).isEqualTo(1f) assertThat(dismissAlpha.size).isEqualTo(1) keyguardTransitionRepository.sendTransitionSteps( from = KeyguardState.AOD, to = KeyguardState.LOCKSCREEN, testScope, ) // User begins to swipe up repository.setStatusBarState(StatusBarState.KEYGUARD) repository.setKeyguardDismissible(true) shadeRepository.setLegacyShadeExpansion(0.98f) assertThat(dismissAlpha[1]).isGreaterThan(0.5f) assertThat(dismissAlpha[1]).isLessThan(1f) assertThat(dismissAlpha.size).isEqualTo(2) keyguardTransitionRepository.sendTransitionSteps( from = KeyguardState.LOCKSCREEN, to = KeyguardState.GLANCEABLE_HUB, testScope, ) // Now reset the shade and verify we don't emit any new values shadeRepository.setLegacyShadeExpansion(1f) assertThat(dismissAlpha.size).isEqualTo(2) } @Test fun dismissAlpha_doesNotEmitWhileTransitioning() = testScope.runTest { Loading Loading @@ -262,7 +295,7 @@ class KeyguardInteractorTest : SysuiTestCase() { configRepository.setDimensionPixelSize( R.dimen.keyguard_translate_distance_on_swipe_up, 100 100, ) configRepository.onAnyConfigurationChange() Loading @@ -284,7 +317,7 @@ class KeyguardInteractorTest : SysuiTestCase() { configRepository.setDimensionPixelSize( R.dimen.keyguard_translate_distance_on_swipe_up, 100 100, ) configRepository.onAnyConfigurationChange() Loading @@ -306,7 +339,7 @@ class KeyguardInteractorTest : SysuiTestCase() { configRepository.setDimensionPixelSize( R.dimen.keyguard_translate_distance_on_swipe_up, 100 100, ) configRepository.onAnyConfigurationChange() Loading @@ -328,7 +361,7 @@ class KeyguardInteractorTest : SysuiTestCase() { configRepository.setDimensionPixelSize( R.dimen.keyguard_translate_distance_on_swipe_up, 100 100, ) configRepository.onAnyConfigurationChange() Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt +13 −12 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.systemui.keyguard.shared.model.Edge import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.KeyguardState.AOD import com.android.systemui.keyguard.shared.model.KeyguardState.DOZING import com.android.systemui.keyguard.shared.model.KeyguardState.GLANCEABLE_HUB import com.android.systemui.keyguard.shared.model.KeyguardState.GONE import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN import com.android.systemui.keyguard.shared.model.KeyguardState.OCCLUDED Loading Loading @@ -167,10 +168,7 @@ constructor( * but not vice-versa. Also accounts for [isDreamingWithOverlay] */ val isDreaming: StateFlow<Boolean> = merge( repository.isDreaming, repository.isDreamingWithOverlay, ) merge(repository.isDreaming, repository.isDreamingWithOverlay) .stateIn( scope = applicationScope, started = SharingStarted.Eagerly, Loading Loading @@ -242,7 +240,7 @@ constructor( .map { it == 1f } .onStart { emit(false) } .distinctUntilChanged(), repository.topClippingBounds repository.topClippingBounds, ) { isGone, topClippingBounds -> if (!isGone) { emit(topClippingBounds) Loading Loading @@ -287,11 +285,10 @@ constructor( /** Whether camera is launched over keyguard. */ val isSecureCameraActive: Flow<Boolean> by lazy { combine( combine(isKeyguardVisible, primaryBouncerShowing, onCameraLaunchDetected) { isKeyguardVisible, primaryBouncerShowing, onCameraLaunchDetected, ) { isKeyguardVisible, isPrimaryBouncerShowing, cameraLaunchEvent -> isPrimaryBouncerShowing, cameraLaunchEvent -> when { isKeyguardVisible -> false isPrimaryBouncerShowing -> false Loading Loading @@ -328,15 +325,17 @@ constructor( keyguardTransitionInteractor.currentKeyguardState, keyguardTransitionInteractor.transitionState, isKeyguardDismissible, keyguardTransitionInteractor.isFinishedIn(Scenes.Communal, GLANCEABLE_HUB), ) .filter { (_, _, _, step, _) -> !step.transitionState.isTransitioning() } .filter { (_, _, _, step, _, _) -> !step.transitionState.isTransitioning() } .transform { ( legacyShadeExpansion, statusBarState, currentKeyguardState, step, isKeyguardDismissible) -> isKeyguardDismissible, onGlanceableHub) -> if ( statusBarState == StatusBarState.KEYGUARD && isKeyguardDismissible && Loading @@ -344,7 +343,9 @@ constructor( legacyShadeExpansion != 1f ) { emit(MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, legacyShadeExpansion)) } else if (legacyShadeExpansion == 0f || legacyShadeExpansion == 1f) { } else if ( (legacyShadeExpansion == 0f || legacyShadeExpansion == 1f) && !onGlanceableHub ) { // Resets alpha state emit(1f) } Loading packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorFactory.kt +2 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.TestScope import org.mockito.kotlin.any /** * Simply put, I got tired of adding a constructor argument and then having to tweak dozens of Loading Loading @@ -66,6 +67,7 @@ object KeyguardInteractorFactory { mock<KeyguardTransitionInteractor>().also { whenever(it.currentKeyguardState).thenReturn(currentKeyguardStateFlow) whenever(it.transitionState).thenReturn(transitionStateFlow) whenever(it.isFinishedIn(any(), any())).thenReturn(MutableStateFlow(false)) } val configurationDimensionFlow = MutableSharedFlow<ConfigurationBasedDimensions>() configurationDimensionFlow.tryEmit( Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt +37 −4 Original line number Diff line number Diff line Loading @@ -224,6 +224,39 @@ class KeyguardInteractorTest : SysuiTestCase() { assertThat(dismissAlpha.size).isEqualTo(3) } @Test fun dismissAlpha_onGlanceableHub_doesNotEmitWhenShadeResets() = testScope.runTest { val dismissAlpha by collectValues(underTest.dismissAlpha) assertThat(dismissAlpha[0]).isEqualTo(1f) assertThat(dismissAlpha.size).isEqualTo(1) keyguardTransitionRepository.sendTransitionSteps( from = KeyguardState.AOD, to = KeyguardState.LOCKSCREEN, testScope, ) // User begins to swipe up repository.setStatusBarState(StatusBarState.KEYGUARD) repository.setKeyguardDismissible(true) shadeRepository.setLegacyShadeExpansion(0.98f) assertThat(dismissAlpha[1]).isGreaterThan(0.5f) assertThat(dismissAlpha[1]).isLessThan(1f) assertThat(dismissAlpha.size).isEqualTo(2) keyguardTransitionRepository.sendTransitionSteps( from = KeyguardState.LOCKSCREEN, to = KeyguardState.GLANCEABLE_HUB, testScope, ) // Now reset the shade and verify we don't emit any new values shadeRepository.setLegacyShadeExpansion(1f) assertThat(dismissAlpha.size).isEqualTo(2) } @Test fun dismissAlpha_doesNotEmitWhileTransitioning() = testScope.runTest { Loading Loading @@ -262,7 +295,7 @@ class KeyguardInteractorTest : SysuiTestCase() { configRepository.setDimensionPixelSize( R.dimen.keyguard_translate_distance_on_swipe_up, 100 100, ) configRepository.onAnyConfigurationChange() Loading @@ -284,7 +317,7 @@ class KeyguardInteractorTest : SysuiTestCase() { configRepository.setDimensionPixelSize( R.dimen.keyguard_translate_distance_on_swipe_up, 100 100, ) configRepository.onAnyConfigurationChange() Loading @@ -306,7 +339,7 @@ class KeyguardInteractorTest : SysuiTestCase() { configRepository.setDimensionPixelSize( R.dimen.keyguard_translate_distance_on_swipe_up, 100 100, ) configRepository.onAnyConfigurationChange() Loading @@ -328,7 +361,7 @@ class KeyguardInteractorTest : SysuiTestCase() { configRepository.setDimensionPixelSize( R.dimen.keyguard_translate_distance_on_swipe_up, 100 100, ) configRepository.onAnyConfigurationChange() Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt +13 −12 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import com.android.systemui.keyguard.shared.model.Edge import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.KeyguardState.AOD import com.android.systemui.keyguard.shared.model.KeyguardState.DOZING import com.android.systemui.keyguard.shared.model.KeyguardState.GLANCEABLE_HUB import com.android.systemui.keyguard.shared.model.KeyguardState.GONE import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN import com.android.systemui.keyguard.shared.model.KeyguardState.OCCLUDED Loading Loading @@ -167,10 +168,7 @@ constructor( * but not vice-versa. Also accounts for [isDreamingWithOverlay] */ val isDreaming: StateFlow<Boolean> = merge( repository.isDreaming, repository.isDreamingWithOverlay, ) merge(repository.isDreaming, repository.isDreamingWithOverlay) .stateIn( scope = applicationScope, started = SharingStarted.Eagerly, Loading Loading @@ -242,7 +240,7 @@ constructor( .map { it == 1f } .onStart { emit(false) } .distinctUntilChanged(), repository.topClippingBounds repository.topClippingBounds, ) { isGone, topClippingBounds -> if (!isGone) { emit(topClippingBounds) Loading Loading @@ -287,11 +285,10 @@ constructor( /** Whether camera is launched over keyguard. */ val isSecureCameraActive: Flow<Boolean> by lazy { combine( combine(isKeyguardVisible, primaryBouncerShowing, onCameraLaunchDetected) { isKeyguardVisible, primaryBouncerShowing, onCameraLaunchDetected, ) { isKeyguardVisible, isPrimaryBouncerShowing, cameraLaunchEvent -> isPrimaryBouncerShowing, cameraLaunchEvent -> when { isKeyguardVisible -> false isPrimaryBouncerShowing -> false Loading Loading @@ -328,15 +325,17 @@ constructor( keyguardTransitionInteractor.currentKeyguardState, keyguardTransitionInteractor.transitionState, isKeyguardDismissible, keyguardTransitionInteractor.isFinishedIn(Scenes.Communal, GLANCEABLE_HUB), ) .filter { (_, _, _, step, _) -> !step.transitionState.isTransitioning() } .filter { (_, _, _, step, _, _) -> !step.transitionState.isTransitioning() } .transform { ( legacyShadeExpansion, statusBarState, currentKeyguardState, step, isKeyguardDismissible) -> isKeyguardDismissible, onGlanceableHub) -> if ( statusBarState == StatusBarState.KEYGUARD && isKeyguardDismissible && Loading @@ -344,7 +343,9 @@ constructor( legacyShadeExpansion != 1f ) { emit(MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, legacyShadeExpansion)) } else if (legacyShadeExpansion == 0f || legacyShadeExpansion == 1f) { } else if ( (legacyShadeExpansion == 0f || legacyShadeExpansion == 1f) && !onGlanceableHub ) { // Resets alpha state emit(1f) } Loading
packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorFactory.kt +2 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.TestScope import org.mockito.kotlin.any /** * Simply put, I got tired of adding a constructor argument and then having to tweak dozens of Loading Loading @@ -66,6 +67,7 @@ object KeyguardInteractorFactory { mock<KeyguardTransitionInteractor>().also { whenever(it.currentKeyguardState).thenReturn(currentKeyguardStateFlow) whenever(it.transitionState).thenReturn(transitionStateFlow) whenever(it.isFinishedIn(any(), any())).thenReturn(MutableStateFlow(false)) } val configurationDimensionFlow = MutableSharedFlow<ConfigurationBasedDimensions>() configurationDimensionFlow.tryEmit( Loading