Loading packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt +8 −40 Original line number Diff line number Diff line Loading @@ -45,9 +45,8 @@ import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test Loading @@ -73,9 +72,8 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { @Mock private lateinit var userTracker: UserTracker @Mock private lateinit var lockPatternUtils: LockPatternUtils @Captor private lateinit var updateCallbackCaptor: ArgumentCaptor<KeyguardUpdateMonitorCallback> private val mainDispatcher = StandardTestDispatcher() private val testDispatcher = StandardTestDispatcher() private val testScope = TestScope(testDispatcher) private val dispatcher = UnconfinedTestDispatcher() private val testScope = TestScope(dispatcher) private lateinit var systemClock: FakeSystemClock private lateinit var facePropertyRepository: FakeFacePropertyRepository Loading @@ -94,7 +92,7 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { dozeTransitionListener, authController, dreamOverlayCallbackController, mainDispatcher, dispatcher, testScope.backgroundScope, systemClock, facePropertyRepository, Loading Loading @@ -172,7 +170,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { var latest: Boolean? = null val job = underTest.isKeyguardShowing.onEach { latest = it }.launchIn(this) runCurrent() assertThat(latest).isFalse() assertThat(underTest.isKeyguardShowing()).isFalse() Loading @@ -181,13 +178,11 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { whenever(keyguardStateController.isShowing).thenReturn(true) captor.value.onKeyguardShowingChanged() runCurrent() assertThat(latest).isTrue() assertThat(underTest.isKeyguardShowing()).isTrue() whenever(keyguardStateController.isShowing).thenReturn(false) captor.value.onKeyguardShowingChanged() runCurrent() assertThat(latest).isFalse() assertThat(underTest.isKeyguardShowing()).isFalse() Loading @@ -201,7 +196,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { var latest: Boolean? = null val job = underTest.isKeyguardOccluded.onEach { latest = it }.launchIn(this) runCurrent() assertThat(latest).isFalse() val captor = argumentCaptor<KeyguardStateController.Callback>() Loading @@ -209,12 +203,10 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { whenever(keyguardStateController.isOccluded).thenReturn(true) captor.value.onKeyguardShowingChanged() runCurrent() assertThat(latest).isTrue() whenever(keyguardStateController.isOccluded).thenReturn(false) captor.value.onKeyguardShowingChanged() runCurrent() assertThat(latest).isFalse() job.cancel() Loading @@ -226,7 +218,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { whenever(keyguardStateController.isUnlocked).thenReturn(false) val isKeyguardUnlocked by collectLastValue(underTest.isKeyguardDismissible) runCurrent() assertThat(isKeyguardUnlocked).isFalse() val captor = argumentCaptor<KeyguardStateController.Callback>() Loading @@ -234,12 +225,10 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { whenever(keyguardStateController.isUnlocked).thenReturn(true) captor.value.onUnlockedChanged() runCurrent() assertThat(isKeyguardUnlocked).isTrue() whenever(keyguardStateController.isUnlocked).thenReturn(false) captor.value.onKeyguardShowingChanged() runCurrent() assertThat(isKeyguardUnlocked).isFalse() } Loading Loading @@ -277,12 +266,11 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { fun isKeyguardGoingAway() = testScope.runTest { val isGoingAway by collectLastValue(underTest.isKeyguardGoingAway) assertThat(isGoingAway).isFalse() underTest.isKeyguardGoingAway.value = true underTest.isKeyguardGoingAway.tryEmit(true) assertThat(isGoingAway).isTrue() underTest.isKeyguardGoingAway.value = false underTest.isKeyguardGoingAway.tryEmit(false) assertThat(isGoingAway).isFalse() } Loading @@ -306,7 +294,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { var latest: Boolean? = null val job = underTest.isDreamingWithOverlay.onEach { latest = it }.launchIn(this) runCurrent() assertThat(latest).isFalse() val listener = Loading @@ -315,11 +302,9 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { } listener.onStartDream() runCurrent() assertThat(latest).isTrue() listener.onWakeUp() runCurrent() assertThat(latest).isFalse() job.cancel() Loading @@ -335,7 +320,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { val values = mutableListOf<DozeTransitionModel>() val job = underTest.dozeTransitionModel.onEach(values::add).launchIn(this) runCurrent() val listener = withArgCaptor<DozeTransitionCallback> { verify(dozeTransitionListener).addCallback(capture()) Loading @@ -344,26 +328,20 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { // These don't have to reflect real transitions from the DozeMachine. Only that the // transitions are properly emitted listener.onDozeTransition(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE) runCurrent() listener.onDozeTransition(DozeMachine.State.DOZE, DozeMachine.State.DOZE_AOD) runCurrent() listener.onDozeTransition(DozeMachine.State.DOZE_AOD_DOCKED, DozeMachine.State.FINISH) runCurrent() listener.onDozeTransition( DozeMachine.State.DOZE_REQUEST_PULSE, DozeMachine.State.DOZE_PULSING, ) runCurrent() listener.onDozeTransition( DozeMachine.State.DOZE_SUSPEND_TRIGGERS, DozeMachine.State.DOZE_PULSE_DONE, ) runCurrent() listener.onDozeTransition( DozeMachine.State.DOZE_AOD_PAUSING, DozeMachine.State.DOZE_AOD_PAUSED, ) runCurrent() assertThat(values) .isEqualTo( Loading Loading @@ -392,7 +370,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { ) job.cancel() runCurrent() verify(dozeTransitionListener).removeCallback(listener) } Loading @@ -402,7 +379,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { val values = mutableListOf<Point?>() val job = underTest.fingerprintSensorLocation.onEach(values::add).launchIn(this) runCurrent() val captor = argumentCaptor<AuthController.Callback>() verify(authController).addCallback(captor.capture()) Loading @@ -416,7 +392,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { .onEach { whenever(authController.fingerprintSensorLocation).thenReturn(it) captor.value.onFingerprintLocationChanged() runCurrent() } .also { dispatchedSensorLocations -> assertThat(values).isEqualTo(listOf(null) + dispatchedSensorLocations) Loading @@ -430,7 +405,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { testScope.runTest { val values = mutableListOf<Point?>() val job = underTest.faceSensorLocation.onEach(values::add).launchIn(this) runCurrent() // An initial, null value should be initially emitted so that flows combined with this // one Loading @@ -439,10 +413,7 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { assertThat(values).isEqualTo(listOf(null)) listOf(Point(500, 500), Point(0, 0), null, Point(250, 250)) .onEach { facePropertyRepository.setSensorLocation(it) runCurrent() } .onEach { facePropertyRepository.setSensorLocation(it) } .also { dispatchedSensorLocations -> assertThat(values).isEqualTo(listOf(null) + dispatchedSensorLocations) } Loading @@ -456,8 +427,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { val values = mutableListOf<BiometricUnlockSource?>() val job = underTest.biometricUnlockState.onEach { values.add(it.source) }.launchIn(this) runCurrent() // An initial, null value should be initially emitted so that flows combined with this // one // emit values immediately. The biometric unlock source is expected to be nullable, so Loading @@ -476,7 +445,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { BiometricUnlockMode.NONE, BiometricUnlockSource.Companion.fromBiometricSourceType(biometricSourceType), ) runCurrent() } assertThat(values) Loading @@ -496,7 +464,7 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { @Test fun isEncryptedOrLockdown() = TestScope(mainDispatcher).runTest { testScope.runTest { whenever(userTracker.userId).thenReturn(0) whenever(keyguardUpdateMonitor.isEncryptedOrLockdown(0)).thenReturn(true) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractorTest.kt +0 −13 Original line number Diff line number Diff line Loading @@ -134,19 +134,6 @@ class FromDozingTransitionInteractorTest(flags: FlagsParameterization?) : SysuiT .startedTransition(from = KeyguardState.DOZING, to = KeyguardState.LOCKSCREEN) } @Test @DisableFlags(FLAG_KEYGUARD_WM_STATE_REFACTOR) fun testTransitionToGone_onWakeup_whenGoingAway() = kosmos.runTest { keyguardInteractor.setIsKeyguardGoingAway(true) powerInteractor.setAwakeForTest() testScope.advanceTimeBy(60L) assertThat(transitionRepository) .startedTransition(from = KeyguardState.DOZING, to = KeyguardState.GONE) } @Test fun testTransitionToDreaming() = kosmos.runTest { Loading packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt +9 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.keyguard.data.repository import android.annotation.SuppressLint import android.graphics.Point import com.android.app.tracing.coroutines.launchTraced as launch import com.android.internal.widget.LockPatternUtils Loading Loading @@ -49,6 +50,7 @@ import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow Loading Loading @@ -108,7 +110,7 @@ interface KeyguardRepository { "away' is isInTransitionToState(GONE), but consider using more specific flows " + "whenever possible." ) val isKeyguardGoingAway: MutableStateFlow<Boolean> val isKeyguardGoingAway: MutableSharedFlow<Boolean> /** * Whether the keyguard is enabled, per [KeyguardService]. If the keyguard is not enabled, the Loading Loading @@ -373,8 +375,12 @@ constructor( override val isKeyguardDismissible: MutableStateFlow<Boolean> = MutableStateFlow(keyguardStateController.isUnlocked) override val isKeyguardGoingAway: MutableStateFlow<Boolean> = MutableStateFlow(keyguardStateController.isKeyguardGoingAway) @SuppressLint("SharedFlowCreation") override val isKeyguardGoingAway: MutableSharedFlow<Boolean> = MutableSharedFlow<Boolean>( extraBufferCapacity = 3, onBufferOverflow = BufferOverflow.DROP_OLDEST, ) private val _isKeyguardEnabled = MutableStateFlow(!lockPatternUtils.isLockScreenDisabled(userTracker.userId)) Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt +2 −8 Original line number Diff line number Diff line Loading @@ -157,7 +157,6 @@ constructor( .collect { (detailedWakefulness, isCommunalAvailable, shouldShowCommunal) -> val isKeyguardOccludedLegacy = keyguardInteractor.isKeyguardOccluded.value val primaryBouncerShowing = keyguardInteractor.primaryBouncerShowing.value val isKeyguardGoingAway = keyguardInteractor.isKeyguardGoingAway.value if (!deviceEntryInteractor.isLockscreenEnabled()) { if (!SceneContainerFlag.isEnabled) { Loading @@ -166,16 +165,11 @@ constructor( ownerReason = "lockscreen not enabled", ) } } else if (canDismissLockscreen() || isKeyguardGoingAway) { } else if (canDismissLockscreen()) { if (!SceneContainerFlag.isEnabled) { startTransitionTo( KeyguardState.GONE, ownerReason = if (canDismissLockscreen()) { "canDismissLockscreen()" } else { "isKeyguardGoingAway" }, ownerReason = "canDismissLockscreen()", ) } } else if (primaryBouncerShowing) { Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt +4 −2 Original line number Diff line number Diff line Loading @@ -59,8 +59,10 @@ import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine Loading Loading @@ -238,7 +240,7 @@ constructor( /** Whether the keyguard is going away. */ @Deprecated("Use KeyguardTransitionInteractor + KeyguardState.GONE") val isKeyguardGoingAway: StateFlow<Boolean> = repository.isKeyguardGoingAway.asStateFlow() val isKeyguardGoingAway: SharedFlow<Boolean> = repository.isKeyguardGoingAway.asSharedFlow() /** Keyguard can be clipped at the top as the shade is dragged */ val topClippingBounds: Flow<Int?> by lazy { Loading Loading @@ -517,7 +519,7 @@ constructor( } fun setIsKeyguardGoingAway(isGoingAway: Boolean) { repository.isKeyguardGoingAway.value = isGoingAway repository.isKeyguardGoingAway.tryEmit(isGoingAway) } fun setNotificationStackAbsoluteBottom(bottom: Float) { Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/data/repository/KeyguardRepositoryImplTest.kt +8 −40 Original line number Diff line number Diff line Loading @@ -45,9 +45,8 @@ import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test Loading @@ -73,9 +72,8 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { @Mock private lateinit var userTracker: UserTracker @Mock private lateinit var lockPatternUtils: LockPatternUtils @Captor private lateinit var updateCallbackCaptor: ArgumentCaptor<KeyguardUpdateMonitorCallback> private val mainDispatcher = StandardTestDispatcher() private val testDispatcher = StandardTestDispatcher() private val testScope = TestScope(testDispatcher) private val dispatcher = UnconfinedTestDispatcher() private val testScope = TestScope(dispatcher) private lateinit var systemClock: FakeSystemClock private lateinit var facePropertyRepository: FakeFacePropertyRepository Loading @@ -94,7 +92,7 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { dozeTransitionListener, authController, dreamOverlayCallbackController, mainDispatcher, dispatcher, testScope.backgroundScope, systemClock, facePropertyRepository, Loading Loading @@ -172,7 +170,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { var latest: Boolean? = null val job = underTest.isKeyguardShowing.onEach { latest = it }.launchIn(this) runCurrent() assertThat(latest).isFalse() assertThat(underTest.isKeyguardShowing()).isFalse() Loading @@ -181,13 +178,11 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { whenever(keyguardStateController.isShowing).thenReturn(true) captor.value.onKeyguardShowingChanged() runCurrent() assertThat(latest).isTrue() assertThat(underTest.isKeyguardShowing()).isTrue() whenever(keyguardStateController.isShowing).thenReturn(false) captor.value.onKeyguardShowingChanged() runCurrent() assertThat(latest).isFalse() assertThat(underTest.isKeyguardShowing()).isFalse() Loading @@ -201,7 +196,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { var latest: Boolean? = null val job = underTest.isKeyguardOccluded.onEach { latest = it }.launchIn(this) runCurrent() assertThat(latest).isFalse() val captor = argumentCaptor<KeyguardStateController.Callback>() Loading @@ -209,12 +203,10 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { whenever(keyguardStateController.isOccluded).thenReturn(true) captor.value.onKeyguardShowingChanged() runCurrent() assertThat(latest).isTrue() whenever(keyguardStateController.isOccluded).thenReturn(false) captor.value.onKeyguardShowingChanged() runCurrent() assertThat(latest).isFalse() job.cancel() Loading @@ -226,7 +218,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { whenever(keyguardStateController.isUnlocked).thenReturn(false) val isKeyguardUnlocked by collectLastValue(underTest.isKeyguardDismissible) runCurrent() assertThat(isKeyguardUnlocked).isFalse() val captor = argumentCaptor<KeyguardStateController.Callback>() Loading @@ -234,12 +225,10 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { whenever(keyguardStateController.isUnlocked).thenReturn(true) captor.value.onUnlockedChanged() runCurrent() assertThat(isKeyguardUnlocked).isTrue() whenever(keyguardStateController.isUnlocked).thenReturn(false) captor.value.onKeyguardShowingChanged() runCurrent() assertThat(isKeyguardUnlocked).isFalse() } Loading Loading @@ -277,12 +266,11 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { fun isKeyguardGoingAway() = testScope.runTest { val isGoingAway by collectLastValue(underTest.isKeyguardGoingAway) assertThat(isGoingAway).isFalse() underTest.isKeyguardGoingAway.value = true underTest.isKeyguardGoingAway.tryEmit(true) assertThat(isGoingAway).isTrue() underTest.isKeyguardGoingAway.value = false underTest.isKeyguardGoingAway.tryEmit(false) assertThat(isGoingAway).isFalse() } Loading @@ -306,7 +294,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { var latest: Boolean? = null val job = underTest.isDreamingWithOverlay.onEach { latest = it }.launchIn(this) runCurrent() assertThat(latest).isFalse() val listener = Loading @@ -315,11 +302,9 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { } listener.onStartDream() runCurrent() assertThat(latest).isTrue() listener.onWakeUp() runCurrent() assertThat(latest).isFalse() job.cancel() Loading @@ -335,7 +320,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { val values = mutableListOf<DozeTransitionModel>() val job = underTest.dozeTransitionModel.onEach(values::add).launchIn(this) runCurrent() val listener = withArgCaptor<DozeTransitionCallback> { verify(dozeTransitionListener).addCallback(capture()) Loading @@ -344,26 +328,20 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { // These don't have to reflect real transitions from the DozeMachine. Only that the // transitions are properly emitted listener.onDozeTransition(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE) runCurrent() listener.onDozeTransition(DozeMachine.State.DOZE, DozeMachine.State.DOZE_AOD) runCurrent() listener.onDozeTransition(DozeMachine.State.DOZE_AOD_DOCKED, DozeMachine.State.FINISH) runCurrent() listener.onDozeTransition( DozeMachine.State.DOZE_REQUEST_PULSE, DozeMachine.State.DOZE_PULSING, ) runCurrent() listener.onDozeTransition( DozeMachine.State.DOZE_SUSPEND_TRIGGERS, DozeMachine.State.DOZE_PULSE_DONE, ) runCurrent() listener.onDozeTransition( DozeMachine.State.DOZE_AOD_PAUSING, DozeMachine.State.DOZE_AOD_PAUSED, ) runCurrent() assertThat(values) .isEqualTo( Loading Loading @@ -392,7 +370,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { ) job.cancel() runCurrent() verify(dozeTransitionListener).removeCallback(listener) } Loading @@ -402,7 +379,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { val values = mutableListOf<Point?>() val job = underTest.fingerprintSensorLocation.onEach(values::add).launchIn(this) runCurrent() val captor = argumentCaptor<AuthController.Callback>() verify(authController).addCallback(captor.capture()) Loading @@ -416,7 +392,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { .onEach { whenever(authController.fingerprintSensorLocation).thenReturn(it) captor.value.onFingerprintLocationChanged() runCurrent() } .also { dispatchedSensorLocations -> assertThat(values).isEqualTo(listOf(null) + dispatchedSensorLocations) Loading @@ -430,7 +405,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { testScope.runTest { val values = mutableListOf<Point?>() val job = underTest.faceSensorLocation.onEach(values::add).launchIn(this) runCurrent() // An initial, null value should be initially emitted so that flows combined with this // one Loading @@ -439,10 +413,7 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { assertThat(values).isEqualTo(listOf(null)) listOf(Point(500, 500), Point(0, 0), null, Point(250, 250)) .onEach { facePropertyRepository.setSensorLocation(it) runCurrent() } .onEach { facePropertyRepository.setSensorLocation(it) } .also { dispatchedSensorLocations -> assertThat(values).isEqualTo(listOf(null) + dispatchedSensorLocations) } Loading @@ -456,8 +427,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { val values = mutableListOf<BiometricUnlockSource?>() val job = underTest.biometricUnlockState.onEach { values.add(it.source) }.launchIn(this) runCurrent() // An initial, null value should be initially emitted so that flows combined with this // one // emit values immediately. The biometric unlock source is expected to be nullable, so Loading @@ -476,7 +445,6 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { BiometricUnlockMode.NONE, BiometricUnlockSource.Companion.fromBiometricSourceType(biometricSourceType), ) runCurrent() } assertThat(values) Loading @@ -496,7 +464,7 @@ class KeyguardRepositoryImplTest : SysuiTestCase() { @Test fun isEncryptedOrLockdown() = TestScope(mainDispatcher).runTest { testScope.runTest { whenever(userTracker.userId).thenReturn(0) whenever(keyguardUpdateMonitor.isEncryptedOrLockdown(0)).thenReturn(true) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractorTest.kt +0 −13 Original line number Diff line number Diff line Loading @@ -134,19 +134,6 @@ class FromDozingTransitionInteractorTest(flags: FlagsParameterization?) : SysuiT .startedTransition(from = KeyguardState.DOZING, to = KeyguardState.LOCKSCREEN) } @Test @DisableFlags(FLAG_KEYGUARD_WM_STATE_REFACTOR) fun testTransitionToGone_onWakeup_whenGoingAway() = kosmos.runTest { keyguardInteractor.setIsKeyguardGoingAway(true) powerInteractor.setAwakeForTest() testScope.advanceTimeBy(60L) assertThat(transitionRepository) .startedTransition(from = KeyguardState.DOZING, to = KeyguardState.GONE) } @Test fun testTransitionToDreaming() = kosmos.runTest { Loading
packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt +9 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.keyguard.data.repository import android.annotation.SuppressLint import android.graphics.Point import com.android.app.tracing.coroutines.launchTraced as launch import com.android.internal.widget.LockPatternUtils Loading Loading @@ -49,6 +50,7 @@ import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow Loading Loading @@ -108,7 +110,7 @@ interface KeyguardRepository { "away' is isInTransitionToState(GONE), but consider using more specific flows " + "whenever possible." ) val isKeyguardGoingAway: MutableStateFlow<Boolean> val isKeyguardGoingAway: MutableSharedFlow<Boolean> /** * Whether the keyguard is enabled, per [KeyguardService]. If the keyguard is not enabled, the Loading Loading @@ -373,8 +375,12 @@ constructor( override val isKeyguardDismissible: MutableStateFlow<Boolean> = MutableStateFlow(keyguardStateController.isUnlocked) override val isKeyguardGoingAway: MutableStateFlow<Boolean> = MutableStateFlow(keyguardStateController.isKeyguardGoingAway) @SuppressLint("SharedFlowCreation") override val isKeyguardGoingAway: MutableSharedFlow<Boolean> = MutableSharedFlow<Boolean>( extraBufferCapacity = 3, onBufferOverflow = BufferOverflow.DROP_OLDEST, ) private val _isKeyguardEnabled = MutableStateFlow(!lockPatternUtils.isLockScreenDisabled(userTracker.userId)) Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt +2 −8 Original line number Diff line number Diff line Loading @@ -157,7 +157,6 @@ constructor( .collect { (detailedWakefulness, isCommunalAvailable, shouldShowCommunal) -> val isKeyguardOccludedLegacy = keyguardInteractor.isKeyguardOccluded.value val primaryBouncerShowing = keyguardInteractor.primaryBouncerShowing.value val isKeyguardGoingAway = keyguardInteractor.isKeyguardGoingAway.value if (!deviceEntryInteractor.isLockscreenEnabled()) { if (!SceneContainerFlag.isEnabled) { Loading @@ -166,16 +165,11 @@ constructor( ownerReason = "lockscreen not enabled", ) } } else if (canDismissLockscreen() || isKeyguardGoingAway) { } else if (canDismissLockscreen()) { if (!SceneContainerFlag.isEnabled) { startTransitionTo( KeyguardState.GONE, ownerReason = if (canDismissLockscreen()) { "canDismissLockscreen()" } else { "isKeyguardGoingAway" }, ownerReason = "canDismissLockscreen()", ) } } else if (primaryBouncerShowing) { Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt +4 −2 Original line number Diff line number Diff line Loading @@ -59,8 +59,10 @@ import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine Loading Loading @@ -238,7 +240,7 @@ constructor( /** Whether the keyguard is going away. */ @Deprecated("Use KeyguardTransitionInteractor + KeyguardState.GONE") val isKeyguardGoingAway: StateFlow<Boolean> = repository.isKeyguardGoingAway.asStateFlow() val isKeyguardGoingAway: SharedFlow<Boolean> = repository.isKeyguardGoingAway.asSharedFlow() /** Keyguard can be clipped at the top as the shade is dragged */ val topClippingBounds: Flow<Int?> by lazy { Loading Loading @@ -517,7 +519,7 @@ constructor( } fun setIsKeyguardGoingAway(isGoingAway: Boolean) { repository.isKeyguardGoingAway.value = isGoingAway repository.isKeyguardGoingAway.tryEmit(isGoingAway) } fun setNotificationStackAbsoluteBottom(bottom: Float) { Loading