Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt +5 −1 Original line number Diff line number Diff line Loading @@ -265,7 +265,11 @@ constructor( !isKeyguardUnlocked && statusBarState == KEYGUARD ) { transitionId = startTransitionTo(KeyguardState.PRIMARY_BOUNCER) transitionId = startTransitionTo( toState = KeyguardState.PRIMARY_BOUNCER, animator = null, // transition will be manually controlled ) } } } Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt +58 −2 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import com.android.systemui.keyguard.shared.model.BiometricUnlockModel import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.DozeTransitionModel import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep Loading @@ -39,11 +40,12 @@ import com.android.systemui.keyguard.shared.model.WakeSleepReason import com.android.systemui.keyguard.shared.model.WakefulnessModel import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.shade.data.repository.FakeShadeRepository import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.shade.domain.model.ShadeModel import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.withArgCaptor import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.cancelChildren import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.advanceUntilIdle Loading @@ -56,6 +58,7 @@ import org.junit.runners.JUnit4 import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.never import org.mockito.Mockito.reset import org.mockito.Mockito.spy Loading @@ -66,6 +69,7 @@ import org.mockito.MockitoAnnotations * Class for testing user journeys through the interactors. They will all be activated during setup, * to ensure the expected transitions are still triggered. */ @ExperimentalCoroutinesApi @SmallTest @RunWith(JUnit4::class) class KeyguardTransitionScenariosTest : SysuiTestCase() { Loading @@ -74,7 +78,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { private lateinit var keyguardRepository: FakeKeyguardRepository private lateinit var bouncerRepository: FakeKeyguardBouncerRepository private lateinit var commandQueue: FakeCommandQueue private lateinit var shadeRepository: ShadeRepository private lateinit var shadeRepository: FakeShadeRepository private lateinit var transitionRepository: FakeKeyguardTransitionRepository private lateinit var transitionInteractor: KeyguardTransitionInteractor private lateinit var featureFlags: FakeFeatureFlags Loading Loading @@ -1213,6 +1217,58 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { coroutineContext.cancelChildren() } @Test fun lockscreenToPrimaryBouncerDragging() = testScope.runTest { // GIVEN a prior transition has run to LOCKSCREEN runTransition(KeyguardState.AOD, KeyguardState.LOCKSCREEN) runCurrent() // GIVEN the keyguard is showing locked keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) keyguardRepository.setKeyguardUnlocked(false) runCurrent() shadeRepository.setShadeModel( ShadeModel( expansionAmount = .9f, isUserDragging = true, ) ) runCurrent() // THEN a transition from LOCKSCREEN => PRIMARY_BOUNCER should occur val info = withArgCaptor<TransitionInfo> { verify(transitionRepository).startTransition(capture(), anyBoolean()) } assertThat(info.ownerName).isEqualTo("FromLockscreenTransitionInteractor") assertThat(info.from).isEqualTo(KeyguardState.LOCKSCREEN) assertThat(info.to).isEqualTo(KeyguardState.PRIMARY_BOUNCER) assertThat(info.animator).isNull() // dragging should be manually animated // WHEN the user stops dragging and shade is back to expanded clearInvocations(transitionRepository) runTransition(KeyguardState.LOCKSCREEN, KeyguardState.PRIMARY_BOUNCER) shadeRepository.setShadeModel( ShadeModel( expansionAmount = 1f, isUserDragging = false, ) ) runCurrent() // THEN a transition from PRIMARY_BOUNCER => LOCKSCREEN should occur val info2 = withArgCaptor<TransitionInfo> { verify(transitionRepository).startTransition(capture(), anyBoolean()) } assertThat(info2.from).isEqualTo(KeyguardState.PRIMARY_BOUNCER) assertThat(info2.to).isEqualTo(KeyguardState.LOCKSCREEN) assertThat(info2.animator).isNotNull() coroutineContext.cancelChildren() } private fun startingToWake() = WakefulnessModel( WakefulnessState.STARTING_TO_WAKE, Loading packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardTransitionRepository.kt +1 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ class FakeKeyguardTransitionRepository : KeyguardTransitionRepository { } override fun startTransition(info: TransitionInfo, resetIfCanceled: Boolean): UUID? { return null return if (info.animator == null) UUID.randomUUID() else null } override fun updateTransition( Loading Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt +5 −1 Original line number Diff line number Diff line Loading @@ -265,7 +265,11 @@ constructor( !isKeyguardUnlocked && statusBarState == KEYGUARD ) { transitionId = startTransitionTo(KeyguardState.PRIMARY_BOUNCER) transitionId = startTransitionTo( toState = KeyguardState.PRIMARY_BOUNCER, animator = null, // transition will be manually controlled ) } } } Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt +58 −2 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import com.android.systemui.keyguard.shared.model.BiometricUnlockModel import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.DozeTransitionModel import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.StatusBarState import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.TransitionStep Loading @@ -39,11 +40,12 @@ import com.android.systemui.keyguard.shared.model.WakeSleepReason import com.android.systemui.keyguard.shared.model.WakefulnessModel import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.shade.data.repository.FakeShadeRepository import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.shade.domain.model.ShadeModel import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.whenever import com.android.systemui.util.mockito.withArgCaptor import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.cancelChildren import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.advanceUntilIdle Loading @@ -56,6 +58,7 @@ import org.junit.runners.JUnit4 import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.never import org.mockito.Mockito.reset import org.mockito.Mockito.spy Loading @@ -66,6 +69,7 @@ import org.mockito.MockitoAnnotations * Class for testing user journeys through the interactors. They will all be activated during setup, * to ensure the expected transitions are still triggered. */ @ExperimentalCoroutinesApi @SmallTest @RunWith(JUnit4::class) class KeyguardTransitionScenariosTest : SysuiTestCase() { Loading @@ -74,7 +78,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { private lateinit var keyguardRepository: FakeKeyguardRepository private lateinit var bouncerRepository: FakeKeyguardBouncerRepository private lateinit var commandQueue: FakeCommandQueue private lateinit var shadeRepository: ShadeRepository private lateinit var shadeRepository: FakeShadeRepository private lateinit var transitionRepository: FakeKeyguardTransitionRepository private lateinit var transitionInteractor: KeyguardTransitionInteractor private lateinit var featureFlags: FakeFeatureFlags Loading Loading @@ -1213,6 +1217,58 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { coroutineContext.cancelChildren() } @Test fun lockscreenToPrimaryBouncerDragging() = testScope.runTest { // GIVEN a prior transition has run to LOCKSCREEN runTransition(KeyguardState.AOD, KeyguardState.LOCKSCREEN) runCurrent() // GIVEN the keyguard is showing locked keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD) keyguardRepository.setKeyguardUnlocked(false) runCurrent() shadeRepository.setShadeModel( ShadeModel( expansionAmount = .9f, isUserDragging = true, ) ) runCurrent() // THEN a transition from LOCKSCREEN => PRIMARY_BOUNCER should occur val info = withArgCaptor<TransitionInfo> { verify(transitionRepository).startTransition(capture(), anyBoolean()) } assertThat(info.ownerName).isEqualTo("FromLockscreenTransitionInteractor") assertThat(info.from).isEqualTo(KeyguardState.LOCKSCREEN) assertThat(info.to).isEqualTo(KeyguardState.PRIMARY_BOUNCER) assertThat(info.animator).isNull() // dragging should be manually animated // WHEN the user stops dragging and shade is back to expanded clearInvocations(transitionRepository) runTransition(KeyguardState.LOCKSCREEN, KeyguardState.PRIMARY_BOUNCER) shadeRepository.setShadeModel( ShadeModel( expansionAmount = 1f, isUserDragging = false, ) ) runCurrent() // THEN a transition from PRIMARY_BOUNCER => LOCKSCREEN should occur val info2 = withArgCaptor<TransitionInfo> { verify(transitionRepository).startTransition(capture(), anyBoolean()) } assertThat(info2.from).isEqualTo(KeyguardState.PRIMARY_BOUNCER) assertThat(info2.to).isEqualTo(KeyguardState.LOCKSCREEN) assertThat(info2.animator).isNotNull() coroutineContext.cancelChildren() } private fun startingToWake() = WakefulnessModel( WakefulnessState.STARTING_TO_WAKE, Loading
packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardTransitionRepository.kt +1 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ class FakeKeyguardTransitionRepository : KeyguardTransitionRepository { } override fun startTransition(info: TransitionInfo, resetIfCanceled: Boolean): UUID? { return null return if (info.animator == null) UUID.randomUUID() else null } override fun updateTransition( Loading