diff options
| author | 2024-06-24 10:22:42 -0700 | |
|---|---|---|
| committer | 2024-06-24 18:04:26 -0700 | |
| commit | 4afe405e26ad5f46effcf99666b574c039808f8e (patch) | |
| tree | 86e4fbbeabe9b5cd84da0a2f342d20c675b50c64 | |
| parent | 45830862a00e4f42be19431b4cd5306cf425de18 (diff) | |
[flexiglass] Home family resolver considers keyguard enabledness
If the keyguard is disabled, the "home" family is resolved to Gone, not
Lockscreen.
Bug: 348644111
Test: added unit tests
Flag: com.android.systemui.scene_container
Change-Id: Ic3e6d4b7214056f03930c1f03dd01663abde750a
6 files changed, 84 insertions, 3 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModelTest.kt index cb4e2d377048..667050ae138f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModelTest.kt @@ -28,6 +28,7 @@ import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepositor import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.domain.interactor.keyguardEnabledInteractor import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope import com.android.systemui.scene.domain.interactor.sceneInteractor @@ -70,6 +71,17 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() { } @Test + fun upTransitionSceneKey_deviceLocked_keyguardDisabled_gone() = + testScope.runTest { + val destinationScenes by collectLastValue(underTest.destinationScenes) + lockDevice() + kosmos.keyguardEnabledInteractor.notifyKeyguardEnabled(false) + + assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home) + assertThat(kosmos.homeSceneFamilyResolver.resolvedScene.value).isEqualTo(Scenes.Gone) + } + + @Test fun upTransitionSceneKey_deviceUnlocked_gone() = testScope.runTest { val destinationScenes by collectLastValue(underTest.destinationScenes) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt index d43d50ab0dc4..920671a4b24c 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt @@ -32,6 +32,7 @@ import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.flags.Flags import com.android.systemui.flags.fakeFeatureFlagsClassic import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.domain.interactor.keyguardEnabledInteractor import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.data.repository.mediaFilterRepository @@ -160,6 +161,37 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { } @Test + fun destinations_whenNotCustomizing_withPreviousSceneLockscreen_butLockscreenDisabled() = + testScope.runTest { + overrideResource(R.bool.config_use_split_notification_shade, false) + qsFlexiglassAdapter.setCustomizing(false) + val destinations by collectLastValue(underTest.destinationScenes) + + val currentScene by collectLastValue(sceneInteractor.currentScene) + val backScene by collectLastValue(sceneBackInteractor.backScene) + val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene) + sceneInteractor.changeScene(Scenes.Lockscreen, "reason") + sceneInteractor.changeScene(Scenes.QuickSettings, "reason") + + kosmos.keyguardEnabledInteractor.notifyKeyguardEnabled(false) + + assertThat(currentScene).isEqualTo(Scenes.QuickSettings) + assertThat(backScene).isEqualTo(Scenes.Lockscreen) + assertThat(destinations) + .isEqualTo( + mapOf( + Back to UserActionResult(Scenes.Lockscreen), + Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Lockscreen), + Swipe( + fromSource = Edge.Bottom, + direction = SwipeDirection.Up, + ) to UserActionResult(SceneFamilies.Home) + ) + ) + assertThat(homeScene).isEqualTo(Scenes.Gone) + } + + @Test fun destinations_whenNotCustomizing_authMethodSwipe_lockscreenNotDismissed() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, false) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModelTest.kt index ac67ac8956be..02891e1ad8cf 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModelTest.kt @@ -28,6 +28,7 @@ import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepositor import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.domain.interactor.keyguardEnabledInteractor import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope import com.android.systemui.scene.domain.interactor.sceneInteractor @@ -70,6 +71,18 @@ class QuickSettingsShadeSceneViewModelTest : SysuiTestCase() { } @Test + fun upTransitionSceneKey_deviceLocked_keyguardDisabled_gone() = + testScope.runTest { + val destinationScenes by collectLastValue(underTest.destinationScenes) + val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene) + lockDevice() + kosmos.keyguardEnabledInteractor.notifyKeyguardEnabled(false) + + assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home) + assertThat(homeScene).isEqualTo(Scenes.Gone) + } + + @Test fun upTransitionSceneKey_deviceUnlocked_gone() = testScope.runTest { val destinationScenes by collectLastValue(underTest.destinationScenes) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt index c53cdf8cc44f..a0295c9f36b0 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt @@ -32,6 +32,7 @@ import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepositor import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor import com.android.systemui.flags.EnableSceneContainer import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository +import com.android.systemui.keyguard.domain.interactor.keyguardEnabledInteractor import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus import com.android.systemui.kosmos.testScope import com.android.systemui.media.controls.data.repository.mediaFilterRepository @@ -139,6 +140,21 @@ class ShadeSceneViewModelTest : SysuiTestCase() { } @Test + fun upTransitionSceneKey_keyguardDisabled_gone() = + testScope.runTest { + val destinationScenes by collectLastValue(underTest.destinationScenes) + val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene) + kosmos.fakeAuthenticationRepository.setAuthenticationMethod( + AuthenticationMethodModel.Pin + ) + kosmos.keyguardEnabledInteractor.notifyKeyguardEnabled(false) + + assertThat(destinationScenes?.get(Swipe(SwipeDirection.Up))?.toScene) + .isEqualTo(SceneFamilies.Home) + assertThat(homeScene).isEqualTo(Scenes.Gone) + } + + @Test fun upTransitionSceneKey_authMethodSwipe_lockscreenNotDismissed_goesToLockscreen() = testScope.runTest { val destinationScenes by collectLastValue(underTest.destinationScenes) diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/resolver/HomeSceneFamilyResolver.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/resolver/HomeSceneFamilyResolver.kt index 9e91b6604dfc..41a3c8aff6cf 100644 --- a/packages/SystemUI/src/com/android/systemui/scene/domain/resolver/HomeSceneFamilyResolver.kt +++ b/packages/SystemUI/src/com/android/systemui/scene/domain/resolver/HomeSceneFamilyResolver.kt @@ -22,6 +22,7 @@ import com.android.compose.animation.scene.SceneKey import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor +import com.android.systemui.keyguard.domain.interactor.KeyguardEnabledInteractor import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.scene.shared.model.Scenes import dagger.Binds @@ -45,11 +46,13 @@ class HomeSceneFamilyResolver constructor( @Application private val applicationScope: CoroutineScope, deviceEntryInteractor: DeviceEntryInteractor, + keyguardEnabledInteractor: KeyguardEnabledInteractor, ) : SceneResolver { override val targetFamily: SceneKey = SceneFamilies.Home override val resolvedScene: StateFlow<SceneKey> = combine( + keyguardEnabledInteractor.isKeyguardEnabled, deviceEntryInteractor.canSwipeToEnter, deviceEntryInteractor.isDeviceEntered, deviceEntryInteractor.isUnlocked, @@ -60,20 +63,23 @@ constructor( started = SharingStarted.Eagerly, initialValue = homeScene( - deviceEntryInteractor.canSwipeToEnter.value, - deviceEntryInteractor.isDeviceEntered.value, - deviceEntryInteractor.isUnlocked.value, + isKeyguardEnabled = keyguardEnabledInteractor.isKeyguardEnabled.value, + canSwipeToEnter = deviceEntryInteractor.canSwipeToEnter.value, + isDeviceEntered = deviceEntryInteractor.isDeviceEntered.value, + isUnlocked = deviceEntryInteractor.isUnlocked.value, ) ) override fun includesScene(scene: SceneKey): Boolean = scene in homeScenes private fun homeScene( + isKeyguardEnabled: Boolean, canSwipeToEnter: Boolean?, isDeviceEntered: Boolean, isUnlocked: Boolean, ): SceneKey = when { + !isKeyguardEnabled -> Scenes.Gone canSwipeToEnter == true -> Scenes.Lockscreen !isDeviceEntered -> Scenes.Lockscreen !isUnlocked -> Scenes.Lockscreen diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/resolver/SceneResolverKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/resolver/SceneResolverKosmos.kt index 6be19393ca2b..ae33aead67a7 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/resolver/SceneResolverKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/resolver/SceneResolverKosmos.kt @@ -20,6 +20,7 @@ package com.android.systemui.scene.domain.resolver import com.android.compose.animation.scene.SceneKey import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor +import com.android.systemui.keyguard.domain.interactor.keyguardEnabledInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.scene.shared.model.SceneFamilies @@ -39,6 +40,7 @@ val Kosmos.homeSceneFamilyResolver by HomeSceneFamilyResolver( applicationScope = applicationCoroutineScope, deviceEntryInteractor = deviceEntryInteractor, + keyguardEnabledInteractor = keyguardEnabledInteractor, ) } |