Loading packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt +49 −9 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.bouncer.data.repository.keyguardBouncerRepository import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.keyguard.data.repository.fakeCommandQueue import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository Loading Loading @@ -191,6 +192,7 @@ class KeyguardInteractorTest : SysuiTestCase() { fun dismissAlpha() = testScope.runTest { val dismissAlpha by collectLastValue(underTest.dismissAlpha) assertThat(dismissAlpha).isEqualTo(1f) keyguardTransitionRepository.sendTransitionSteps( from = KeyguardState.AOD, Loading @@ -202,9 +204,9 @@ class KeyguardInteractorTest : SysuiTestCase() { // User begins to swipe up shadeRepository.setLegacyShadeExpansion(0.99f) // When not dismissable, no alpha value (null) should emit // When not dismissable, the last alpha value should still be present repository.setKeyguardDismissible(false) assertThat(dismissAlpha).isNull() assertThat(dismissAlpha).isEqualTo(1f) repository.setKeyguardDismissible(true) shadeRepository.setLegacyShadeExpansion(0.98f) Loading @@ -212,9 +214,11 @@ class KeyguardInteractorTest : SysuiTestCase() { } @Test fun dismissAlpha_whenShadeIsExpandedEmitsNull() = fun dismissAlpha_whenShadeResetsEmitsOne() = testScope.runTest { val dismissAlpha by collectLastValue(underTest.dismissAlpha) val dismissAlpha by collectValues(underTest.dismissAlpha) assertThat(dismissAlpha[0]).isEqualTo(1f) assertThat(dismissAlpha.size).isEqualTo(1) keyguardTransitionRepository.sendTransitionSteps( from = KeyguardState.AOD, Loading @@ -222,14 +226,50 @@ class KeyguardInteractorTest : SysuiTestCase() { testScope, ) repository.setStatusBarState(StatusBarState.SHADE_LOCKED) shadeRepository.setQsExpansion(1f) // User begins to swipe up repository.setStatusBarState(StatusBarState.KEYGUARD) repository.setKeyguardDismissible(true) shadeRepository.setLegacyShadeExpansion(0.98f) repository.setKeyguardDismissible(false) assertThat(dismissAlpha).isNull() assertThat(dismissAlpha[1]).isGreaterThan(0.5f) assertThat(dismissAlpha[1]).isLessThan(1f) assertThat(dismissAlpha.size).isEqualTo(2) // Now reset the shade shadeRepository.setLegacyShadeExpansion(1f) assertThat(dismissAlpha[2]).isEqualTo(1f) assertThat(dismissAlpha.size).isEqualTo(3) } @Test fun dismissAlpha_doesNotEmitWhileTransitioning() = testScope.runTest { val dismissAlpha by collectLastValue(underTest.dismissAlpha) assertThat(dismissAlpha).isEqualTo(1f) keyguardTransitionRepository.sendTransitionSteps( listOf( TransitionStep( from = KeyguardState.AOD, to = KeyguardState.GONE, value = 0f, transitionState = TransitionState.STARTED, ), TransitionStep( from = KeyguardState.AOD, to = KeyguardState.GONE, value = 0.1f, transitionState = TransitionState.RUNNING, ), ), testScope, ) repository.setKeyguardDismissible(true) assertThat(dismissAlpha).isNull() shadeRepository.setLegacyShadeExpansion(0.98f) // Should still be one assertThat(dismissAlpha).isEqualTo(1f) } @Test Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt +19 −11 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.statusbar.CommandQueue import com.android.systemui.statusbar.notification.NotificationUtils.interpolate import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine import com.android.systemui.util.kotlin.Utils.Companion.sampleFilter import com.android.systemui.util.kotlin.pairwise import com.android.systemui.util.kotlin.sample Loading Loading @@ -77,7 +78,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.stateIn import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine import kotlinx.coroutines.flow.transform /** * Encapsulates business-logic related to the keyguard but not to a more specific part within it. Loading Loading @@ -327,28 +328,35 @@ constructor( * This uses legacyShadeExpansion to process swipe up events. In the future, the touch input * signal should be sent directly to transitions. */ val dismissAlpha: Flow<Float?> = val dismissAlpha: Flow<Float> = shadeRepository.legacyShadeExpansion .filter { it < 1f } .sampleCombine( statusBarState, keyguardTransitionInteractor.currentKeyguardState, keyguardTransitionInteractor.transitionState, isKeyguardDismissible, ) .map { (legacyShadeExpansion, statusBarState, currentKeyguardState, isKeyguardDismissible) -> .filter { (_, _, _, step, _) -> !step.transitionState.isTransitioning() } .transform { ( legacyShadeExpansion, statusBarState, currentKeyguardState, step, isKeyguardDismissible) -> if ( statusBarState == StatusBarState.KEYGUARD && isKeyguardDismissible && currentKeyguardState == LOCKSCREEN currentKeyguardState == LOCKSCREEN && legacyShadeExpansion != 1f ) { MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, legacyShadeExpansion) } else { null emit(MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, legacyShadeExpansion)) } else if (legacyShadeExpansion == 0f || legacyShadeExpansion == 1f) { // Resets alpha state emit(1f) } } .onStart { emit(null) } .onStart { emit(1f) } .distinctUntilChanged() val keyguardTranslationY: Flow<Float> = Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt +1 −2 Original line number Diff line number Diff line Loading @@ -66,7 +66,6 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combineTransform import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onStart Loading Loading @@ -236,7 +235,7 @@ constructor( // value emitted by any of them. Do not add flows that cannot make this guarantee. merge( alphaOnShadeExpansion, keyguardInteractor.dismissAlpha.filterNotNull(), keyguardInteractor.dismissAlpha, alternateBouncerToGoneTransitionViewModel.lockscreenAlpha(viewState), aodToGoneTransitionViewModel.lockscreenAlpha(viewState), aodToLockscreenTransitionViewModel.lockscreenAlpha(viewState), Loading packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt +8 −14 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import com.android.systemui.keyguard.ui.viewmodel.GlanceableHubToLockscreenTrans import com.android.systemui.keyguard.ui.viewmodel.GoneToAodTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.GoneToDozingTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.GoneToDreamingTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.GoneToLockscreenTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenToDreamingTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenToGlanceableHubTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenToGoneTransitionViewModel Loading Loading @@ -120,6 +121,7 @@ constructor( private val goneToAodTransitionViewModel: GoneToAodTransitionViewModel, private val goneToDozingTransitionViewModel: GoneToDozingTransitionViewModel, private val goneToDreamingTransitionViewModel: GoneToDreamingTransitionViewModel, private val goneToLockscreenTransitionViewModel: GoneToLockscreenTransitionViewModel, private val lockscreenToDreamingTransitionViewModel: LockscreenToDreamingTransitionViewModel, private val lockscreenToGlanceableHubTransitionViewModel: LockscreenToGlanceableHubTransitionViewModel, Loading Loading @@ -472,6 +474,9 @@ constructor( // All transition view models are mututally exclusive, and safe to merge val alphaTransitions = merge( keyguardInteractor.dismissAlpha.dumpWhileCollecting( "keyguardInteractor.dismissAlpha" ), alternateBouncerToGoneTransitionViewModel.notificationAlpha(viewState), aodToGoneTransitionViewModel.notificationAlpha(viewState), aodToLockscreenTransitionViewModel.notificationAlpha, Loading @@ -482,6 +487,7 @@ constructor( goneToAodTransitionViewModel.notificationAlpha, goneToDreamingTransitionViewModel.lockscreenAlpha, goneToDozingTransitionViewModel.lockscreenAlpha, goneToLockscreenTransitionViewModel.lockscreenAlpha, lockscreenToDreamingTransitionViewModel.lockscreenAlpha, lockscreenToGoneTransitionViewModel.notificationAlpha(viewState), lockscreenToOccludedTransitionViewModel.lockscreenAlpha, Loading @@ -498,24 +504,12 @@ constructor( // These remaining cases handle alpha changes within an existing state, such as // shade expansion or swipe to dismiss combineTransform( isOnLockscreenWithoutShade, isTransitioningToHiddenKeyguard, shadeCollapseFadeIn, alphaForShadeAndQsExpansion, keyguardInteractor.dismissAlpha.dumpWhileCollecting( "keyguardInteractor.keyguardAlpha" ), ) { isOnLockscreenWithoutShade, isTransitioningToHiddenKeyguard, shadeCollapseFadeIn, alphaForShadeAndQsExpansion, dismissAlpha -> if (isOnLockscreenWithoutShade) { if (!shadeCollapseFadeIn && dismissAlpha != null) { emit(dismissAlpha) } } else if (!isTransitioningToHiddenKeyguard) { alphaForShadeAndQsExpansion -> if (!isTransitioningToHiddenKeyguard) { emit(alphaForShadeAndQsExpansion) } }, Loading packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorFactory.kt +4 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.keyguard.data.repository.FakeCommandQueue import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionStep import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.power.domain.interactor.PowerInteractorFactory import com.android.systemui.scene.domain.interactor.SceneInteractor Loading @@ -34,6 +35,7 @@ import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.TestScope /** Loading @@ -60,9 +62,11 @@ object KeyguardInteractorFactory { ): WithDependencies { // Mock these until they are replaced by kosmos val currentKeyguardStateFlow = MutableSharedFlow<KeyguardState>() val transitionStateFlow = MutableStateFlow(TransitionStep()) val keyguardTransitionInteractor = mock<KeyguardTransitionInteractor>().also { whenever(it.currentKeyguardState).thenReturn(currentKeyguardStateFlow) whenever(it.transitionState).thenReturn(transitionStateFlow) } val configurationDimensionFlow = MutableSharedFlow<ConfigurationBasedDimensions>() configurationDimensionFlow.tryEmit( Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorTest.kt +49 −9 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.bouncer.data.repository.keyguardBouncerRepository import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.keyguard.data.repository.fakeCommandQueue import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository Loading Loading @@ -191,6 +192,7 @@ class KeyguardInteractorTest : SysuiTestCase() { fun dismissAlpha() = testScope.runTest { val dismissAlpha by collectLastValue(underTest.dismissAlpha) assertThat(dismissAlpha).isEqualTo(1f) keyguardTransitionRepository.sendTransitionSteps( from = KeyguardState.AOD, Loading @@ -202,9 +204,9 @@ class KeyguardInteractorTest : SysuiTestCase() { // User begins to swipe up shadeRepository.setLegacyShadeExpansion(0.99f) // When not dismissable, no alpha value (null) should emit // When not dismissable, the last alpha value should still be present repository.setKeyguardDismissible(false) assertThat(dismissAlpha).isNull() assertThat(dismissAlpha).isEqualTo(1f) repository.setKeyguardDismissible(true) shadeRepository.setLegacyShadeExpansion(0.98f) Loading @@ -212,9 +214,11 @@ class KeyguardInteractorTest : SysuiTestCase() { } @Test fun dismissAlpha_whenShadeIsExpandedEmitsNull() = fun dismissAlpha_whenShadeResetsEmitsOne() = testScope.runTest { val dismissAlpha by collectLastValue(underTest.dismissAlpha) val dismissAlpha by collectValues(underTest.dismissAlpha) assertThat(dismissAlpha[0]).isEqualTo(1f) assertThat(dismissAlpha.size).isEqualTo(1) keyguardTransitionRepository.sendTransitionSteps( from = KeyguardState.AOD, Loading @@ -222,14 +226,50 @@ class KeyguardInteractorTest : SysuiTestCase() { testScope, ) repository.setStatusBarState(StatusBarState.SHADE_LOCKED) shadeRepository.setQsExpansion(1f) // User begins to swipe up repository.setStatusBarState(StatusBarState.KEYGUARD) repository.setKeyguardDismissible(true) shadeRepository.setLegacyShadeExpansion(0.98f) repository.setKeyguardDismissible(false) assertThat(dismissAlpha).isNull() assertThat(dismissAlpha[1]).isGreaterThan(0.5f) assertThat(dismissAlpha[1]).isLessThan(1f) assertThat(dismissAlpha.size).isEqualTo(2) // Now reset the shade shadeRepository.setLegacyShadeExpansion(1f) assertThat(dismissAlpha[2]).isEqualTo(1f) assertThat(dismissAlpha.size).isEqualTo(3) } @Test fun dismissAlpha_doesNotEmitWhileTransitioning() = testScope.runTest { val dismissAlpha by collectLastValue(underTest.dismissAlpha) assertThat(dismissAlpha).isEqualTo(1f) keyguardTransitionRepository.sendTransitionSteps( listOf( TransitionStep( from = KeyguardState.AOD, to = KeyguardState.GONE, value = 0f, transitionState = TransitionState.STARTED, ), TransitionStep( from = KeyguardState.AOD, to = KeyguardState.GONE, value = 0.1f, transitionState = TransitionState.RUNNING, ), ), testScope, ) repository.setKeyguardDismissible(true) assertThat(dismissAlpha).isNull() shadeRepository.setLegacyShadeExpansion(0.98f) // Should still be one assertThat(dismissAlpha).isEqualTo(1f) } @Test Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt +19 −11 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.statusbar.CommandQueue import com.android.systemui.statusbar.notification.NotificationUtils.interpolate import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine import com.android.systemui.util.kotlin.Utils.Companion.sampleFilter import com.android.systemui.util.kotlin.pairwise import com.android.systemui.util.kotlin.sample Loading Loading @@ -77,7 +78,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.stateIn import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine import kotlinx.coroutines.flow.transform /** * Encapsulates business-logic related to the keyguard but not to a more specific part within it. Loading Loading @@ -327,28 +328,35 @@ constructor( * This uses legacyShadeExpansion to process swipe up events. In the future, the touch input * signal should be sent directly to transitions. */ val dismissAlpha: Flow<Float?> = val dismissAlpha: Flow<Float> = shadeRepository.legacyShadeExpansion .filter { it < 1f } .sampleCombine( statusBarState, keyguardTransitionInteractor.currentKeyguardState, keyguardTransitionInteractor.transitionState, isKeyguardDismissible, ) .map { (legacyShadeExpansion, statusBarState, currentKeyguardState, isKeyguardDismissible) -> .filter { (_, _, _, step, _) -> !step.transitionState.isTransitioning() } .transform { ( legacyShadeExpansion, statusBarState, currentKeyguardState, step, isKeyguardDismissible) -> if ( statusBarState == StatusBarState.KEYGUARD && isKeyguardDismissible && currentKeyguardState == LOCKSCREEN currentKeyguardState == LOCKSCREEN && legacyShadeExpansion != 1f ) { MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, legacyShadeExpansion) } else { null emit(MathUtils.constrainedMap(0f, 1f, 0.95f, 1f, legacyShadeExpansion)) } else if (legacyShadeExpansion == 0f || legacyShadeExpansion == 1f) { // Resets alpha state emit(1f) } } .onStart { emit(null) } .onStart { emit(1f) } .distinctUntilChanged() val keyguardTranslationY: Flow<Float> = Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt +1 −2 Original line number Diff line number Diff line Loading @@ -66,7 +66,6 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combineTransform import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge import kotlinx.coroutines.flow.onStart Loading Loading @@ -236,7 +235,7 @@ constructor( // value emitted by any of them. Do not add flows that cannot make this guarantee. merge( alphaOnShadeExpansion, keyguardInteractor.dismissAlpha.filterNotNull(), keyguardInteractor.dismissAlpha, alternateBouncerToGoneTransitionViewModel.lockscreenAlpha(viewState), aodToGoneTransitionViewModel.lockscreenAlpha(viewState), aodToLockscreenTransitionViewModel.lockscreenAlpha(viewState), Loading
packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt +8 −14 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ import com.android.systemui.keyguard.ui.viewmodel.GlanceableHubToLockscreenTrans import com.android.systemui.keyguard.ui.viewmodel.GoneToAodTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.GoneToDozingTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.GoneToDreamingTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.GoneToLockscreenTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenToDreamingTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenToGlanceableHubTransitionViewModel import com.android.systemui.keyguard.ui.viewmodel.LockscreenToGoneTransitionViewModel Loading Loading @@ -120,6 +121,7 @@ constructor( private val goneToAodTransitionViewModel: GoneToAodTransitionViewModel, private val goneToDozingTransitionViewModel: GoneToDozingTransitionViewModel, private val goneToDreamingTransitionViewModel: GoneToDreamingTransitionViewModel, private val goneToLockscreenTransitionViewModel: GoneToLockscreenTransitionViewModel, private val lockscreenToDreamingTransitionViewModel: LockscreenToDreamingTransitionViewModel, private val lockscreenToGlanceableHubTransitionViewModel: LockscreenToGlanceableHubTransitionViewModel, Loading Loading @@ -472,6 +474,9 @@ constructor( // All transition view models are mututally exclusive, and safe to merge val alphaTransitions = merge( keyguardInteractor.dismissAlpha.dumpWhileCollecting( "keyguardInteractor.dismissAlpha" ), alternateBouncerToGoneTransitionViewModel.notificationAlpha(viewState), aodToGoneTransitionViewModel.notificationAlpha(viewState), aodToLockscreenTransitionViewModel.notificationAlpha, Loading @@ -482,6 +487,7 @@ constructor( goneToAodTransitionViewModel.notificationAlpha, goneToDreamingTransitionViewModel.lockscreenAlpha, goneToDozingTransitionViewModel.lockscreenAlpha, goneToLockscreenTransitionViewModel.lockscreenAlpha, lockscreenToDreamingTransitionViewModel.lockscreenAlpha, lockscreenToGoneTransitionViewModel.notificationAlpha(viewState), lockscreenToOccludedTransitionViewModel.lockscreenAlpha, Loading @@ -498,24 +504,12 @@ constructor( // These remaining cases handle alpha changes within an existing state, such as // shade expansion or swipe to dismiss combineTransform( isOnLockscreenWithoutShade, isTransitioningToHiddenKeyguard, shadeCollapseFadeIn, alphaForShadeAndQsExpansion, keyguardInteractor.dismissAlpha.dumpWhileCollecting( "keyguardInteractor.keyguardAlpha" ), ) { isOnLockscreenWithoutShade, isTransitioningToHiddenKeyguard, shadeCollapseFadeIn, alphaForShadeAndQsExpansion, dismissAlpha -> if (isOnLockscreenWithoutShade) { if (!shadeCollapseFadeIn && dismissAlpha != null) { emit(dismissAlpha) } } else if (!isTransitioningToHiddenKeyguard) { alphaForShadeAndQsExpansion -> if (!isTransitioningToHiddenKeyguard) { emit(alphaForShadeAndQsExpansion) } }, Loading
packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractorFactory.kt +4 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.keyguard.data.repository.FakeCommandQueue import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionStep import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.power.domain.interactor.PowerInteractorFactory import com.android.systemui.scene.domain.interactor.SceneInteractor Loading @@ -34,6 +35,7 @@ import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.TestScope /** Loading @@ -60,9 +62,11 @@ object KeyguardInteractorFactory { ): WithDependencies { // Mock these until they are replaced by kosmos val currentKeyguardStateFlow = MutableSharedFlow<KeyguardState>() val transitionStateFlow = MutableStateFlow(TransitionStep()) val keyguardTransitionInteractor = mock<KeyguardTransitionInteractor>().also { whenever(it.currentKeyguardState).thenReturn(currentKeyguardStateFlow) whenever(it.transitionState).thenReturn(transitionStateFlow) } val configurationDimensionFlow = MutableSharedFlow<ConfigurationBasedDimensions>() configurationDimensionFlow.tryEmit( Loading