Loading packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModelTest.kt +30 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.resolver.homeSceneFamilyResolver import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.data.repository.fakeShadeRepository import com.android.systemui.shade.ui.viewmodel.notificationsShadeSceneViewModel import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat Loading @@ -56,7 +57,7 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() { private val sceneInteractor by lazy { kosmos.sceneInteractor } private val deviceUnlockedInteractor by lazy { kosmos.deviceUnlockedInteractor } private val underTest = kosmos.notificationsShadeSceneViewModel private val underTest by lazy { kosmos.notificationsShadeSceneViewModel } @Test fun upTransitionSceneKey_deviceLocked_lockscreen() = Loading @@ -65,6 +66,7 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() { lockDevice() assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Down)).isNull() assertThat(kosmos.homeSceneFamilyResolver.resolvedScene.value) .isEqualTo(Scenes.Lockscreen) } Loading @@ -77,6 +79,33 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() { unlockDevice() assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Down)).isNull() assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Gone) } @Test fun downTransitionSceneKey_deviceLocked_bottomAligned_lockscreen() = testScope.runTest { kosmos.fakeShadeRepository.setDualShadeAlignedToBottom(true) val destinationScenes by collectLastValue(underTest.destinationScenes) lockDevice() assertThat(destinationScenes?.get(Swipe.Down)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Up)).isNull() assertThat(kosmos.homeSceneFamilyResolver.resolvedScene.value) .isEqualTo(Scenes.Lockscreen) } @Test fun downTransitionSceneKey_deviceUnlocked_bottomAligned_gone() = testScope.runTest { kosmos.fakeShadeRepository.setDualShadeAlignedToBottom(true) val destinationScenes by collectLastValue(underTest.destinationScenes) lockDevice() unlockDevice() assertThat(destinationScenes?.get(Swipe.Down)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Up)).isNull() assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Gone) } Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModelTest.kt +31 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.resolver.homeSceneFamilyResolver import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.data.repository.fakeShadeRepository import com.android.systemui.shade.ui.viewmodel.quickSettingsShadeSceneViewModel import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat Loading @@ -56,7 +57,7 @@ class QuickSettingsShadeSceneViewModelTest : SysuiTestCase() { private val sceneInteractor = kosmos.sceneInteractor private val deviceUnlockedInteractor = kosmos.deviceUnlockedInteractor private val underTest = kosmos.quickSettingsShadeSceneViewModel private val underTest by lazy { kosmos.quickSettingsShadeSceneViewModel } @Test fun upTransitionSceneKey_deviceLocked_lockscreen() = Loading @@ -66,6 +67,7 @@ class QuickSettingsShadeSceneViewModelTest : SysuiTestCase() { lockDevice() assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Down)).isNull() assertThat(homeScene).isEqualTo(Scenes.Lockscreen) } Loading @@ -78,6 +80,34 @@ class QuickSettingsShadeSceneViewModelTest : SysuiTestCase() { unlockDevice() assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Down)).isNull() assertThat(homeScene).isEqualTo(Scenes.Gone) } @Test fun downTransitionSceneKey_deviceLocked_bottomAligned_lockscreen() = testScope.runTest { kosmos.fakeShadeRepository.setDualShadeAlignedToBottom(true) val destinationScenes by collectLastValue(underTest.destinationScenes) val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene) lockDevice() assertThat(destinationScenes?.get(Swipe.Down)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Up)).isNull() assertThat(homeScene).isEqualTo(Scenes.Lockscreen) } @Test fun downTransitionSceneKey_deviceUnlocked_bottomAligned_gone() = testScope.runTest { kosmos.fakeShadeRepository.setDualShadeAlignedToBottom(true) val destinationScenes by collectLastValue(underTest.destinationScenes) val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene) lockDevice() unlockDevice() assertThat(destinationScenes?.get(Swipe.Down)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Up)).isNull() assertThat(homeScene).isEqualTo(Scenes.Gone) } Loading packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModel.kt +12 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import com.android.compose.animation.scene.UserAction import com.android.compose.animation.scene.UserActionResult import com.android.systemui.dagger.SysUISingleton import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.model.ShadeAlignment import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow Loading @@ -29,11 +31,19 @@ import kotlinx.coroutines.flow.asStateFlow /** Models UI state and handles user input for the Notifications Shade scene. */ @SysUISingleton class NotificationsShadeSceneViewModel @Inject constructor() { class NotificationsShadeSceneViewModel @Inject constructor( shadeInteractor: ShadeInteractor, ) { val destinationScenes: StateFlow<Map<UserAction, UserActionResult>> = MutableStateFlow( mapOf( Swipe.Up to SceneFamilies.Home, if (shadeInteractor.shadeAlignment == ShadeAlignment.Top) { Swipe.Up } else { Swipe.Down } to SceneFamilies.Home, Back to SceneFamilies.Home, ) ) Loading packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModel.kt +8 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import com.android.systemui.qs.panels.ui.viewmodel.EditModeViewModel import com.android.systemui.qs.panels.ui.viewmodel.TileGridViewModel import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.model.ShadeAlignment import com.android.systemui.shade.ui.viewmodel.OverlayShadeViewModel import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow Loading @@ -37,6 +39,7 @@ import kotlinx.coroutines.flow.asStateFlow class QuickSettingsShadeSceneViewModel @Inject constructor( shadeInteractor: ShadeInteractor, val overlayShadeViewModel: OverlayShadeViewModel, val brightnessSliderViewModel: BrightnessSliderViewModel, val tileGridViewModel: TileGridViewModel, Loading @@ -46,7 +49,11 @@ constructor( val destinationScenes: StateFlow<Map<UserAction, UserActionResult>> = MutableStateFlow( mapOf( Swipe.Up to SceneFamilies.Home, if (shadeInteractor.shadeAlignment == ShadeAlignment.Top) { Swipe.Up } else { Swipe.Down } to SceneFamilies.Home, Back to SceneFamilies.Home, ) ) Loading packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt +11 −4 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import kotlinx.coroutines.flow.asStateFlow @SysUISingleton class FakeShadeRepository @Inject constructor() : ShadeRepository { private val _qsExpansion = MutableStateFlow(0f) override val qsExpansion = _qsExpansion @Deprecated("Use ShadeInteractor.qsExpansion instead") override val qsExpansion = _qsExpansion private val _udfpsTransitionToFullShadeProgress = MutableStateFlow(0f) override val udfpsTransitionToFullShadeProgress = _udfpsTransitionToFullShadeProgress Loading Loading @@ -59,12 +59,15 @@ class FakeShadeRepository @Inject constructor() : ShadeRepository { private val _legacyIsQsExpanded = MutableStateFlow(false) @Deprecated("Use ShadeInteractor instead") override val legacyIsQsExpanded = _legacyIsQsExpanded @Deprecated("Use ShadeInteractor.isUserInteractingWithShade instead") override val legacyLockscreenShadeTracking = MutableStateFlow(false) private val _shadeMode = MutableStateFlow<ShadeMode>(ShadeMode.Single) override val shadeMode: StateFlow<ShadeMode> = _shadeMode.asStateFlow() override val isDualShadeAlignedToBottom = false private var _isDualShadeAlignedToBottom = false override val isDualShadeAlignedToBottom get() = _isDualShadeAlignedToBottom @Deprecated("Use ShadeInteractor instead") override fun setLegacyIsQsExpanded(legacyIsQsExpanded: Boolean) { Loading Loading @@ -139,8 +142,12 @@ class FakeShadeRepository @Inject constructor() : ShadeRepository { _legacyShadeExpansion.value = expandedFraction } override fun setShadeMode(shadeMode: ShadeMode) { _shadeMode.value = shadeMode override fun setShadeMode(mode: ShadeMode) { _shadeMode.value = mode } fun setDualShadeAlignedToBottom(isAlignedToBottom: Boolean) { _isDualShadeAlignedToBottom = isAlignedToBottom } } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModelTest.kt +30 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.resolver.homeSceneFamilyResolver import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.data.repository.fakeShadeRepository import com.android.systemui.shade.ui.viewmodel.notificationsShadeSceneViewModel import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat Loading @@ -56,7 +57,7 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() { private val sceneInteractor by lazy { kosmos.sceneInteractor } private val deviceUnlockedInteractor by lazy { kosmos.deviceUnlockedInteractor } private val underTest = kosmos.notificationsShadeSceneViewModel private val underTest by lazy { kosmos.notificationsShadeSceneViewModel } @Test fun upTransitionSceneKey_deviceLocked_lockscreen() = Loading @@ -65,6 +66,7 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() { lockDevice() assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Down)).isNull() assertThat(kosmos.homeSceneFamilyResolver.resolvedScene.value) .isEqualTo(Scenes.Lockscreen) } Loading @@ -77,6 +79,33 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() { unlockDevice() assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Down)).isNull() assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Gone) } @Test fun downTransitionSceneKey_deviceLocked_bottomAligned_lockscreen() = testScope.runTest { kosmos.fakeShadeRepository.setDualShadeAlignedToBottom(true) val destinationScenes by collectLastValue(underTest.destinationScenes) lockDevice() assertThat(destinationScenes?.get(Swipe.Down)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Up)).isNull() assertThat(kosmos.homeSceneFamilyResolver.resolvedScene.value) .isEqualTo(Scenes.Lockscreen) } @Test fun downTransitionSceneKey_deviceUnlocked_bottomAligned_gone() = testScope.runTest { kosmos.fakeShadeRepository.setDualShadeAlignedToBottom(true) val destinationScenes by collectLastValue(underTest.destinationScenes) lockDevice() unlockDevice() assertThat(destinationScenes?.get(Swipe.Down)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Up)).isNull() assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Gone) } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModelTest.kt +31 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.resolver.homeSceneFamilyResolver import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.data.repository.fakeShadeRepository import com.android.systemui.shade.ui.viewmodel.quickSettingsShadeSceneViewModel import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat Loading @@ -56,7 +57,7 @@ class QuickSettingsShadeSceneViewModelTest : SysuiTestCase() { private val sceneInteractor = kosmos.sceneInteractor private val deviceUnlockedInteractor = kosmos.deviceUnlockedInteractor private val underTest = kosmos.quickSettingsShadeSceneViewModel private val underTest by lazy { kosmos.quickSettingsShadeSceneViewModel } @Test fun upTransitionSceneKey_deviceLocked_lockscreen() = Loading @@ -66,6 +67,7 @@ class QuickSettingsShadeSceneViewModelTest : SysuiTestCase() { lockDevice() assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Down)).isNull() assertThat(homeScene).isEqualTo(Scenes.Lockscreen) } Loading @@ -78,6 +80,34 @@ class QuickSettingsShadeSceneViewModelTest : SysuiTestCase() { unlockDevice() assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Down)).isNull() assertThat(homeScene).isEqualTo(Scenes.Gone) } @Test fun downTransitionSceneKey_deviceLocked_bottomAligned_lockscreen() = testScope.runTest { kosmos.fakeShadeRepository.setDualShadeAlignedToBottom(true) val destinationScenes by collectLastValue(underTest.destinationScenes) val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene) lockDevice() assertThat(destinationScenes?.get(Swipe.Down)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Up)).isNull() assertThat(homeScene).isEqualTo(Scenes.Lockscreen) } @Test fun downTransitionSceneKey_deviceUnlocked_bottomAligned_gone() = testScope.runTest { kosmos.fakeShadeRepository.setDualShadeAlignedToBottom(true) val destinationScenes by collectLastValue(underTest.destinationScenes) val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene) lockDevice() unlockDevice() assertThat(destinationScenes?.get(Swipe.Down)?.toScene).isEqualTo(SceneFamilies.Home) assertThat(destinationScenes?.get(Swipe.Up)).isNull() assertThat(homeScene).isEqualTo(Scenes.Gone) } Loading
packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModel.kt +12 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import com.android.compose.animation.scene.UserAction import com.android.compose.animation.scene.UserActionResult import com.android.systemui.dagger.SysUISingleton import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.model.ShadeAlignment import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow Loading @@ -29,11 +31,19 @@ import kotlinx.coroutines.flow.asStateFlow /** Models UI state and handles user input for the Notifications Shade scene. */ @SysUISingleton class NotificationsShadeSceneViewModel @Inject constructor() { class NotificationsShadeSceneViewModel @Inject constructor( shadeInteractor: ShadeInteractor, ) { val destinationScenes: StateFlow<Map<UserAction, UserActionResult>> = MutableStateFlow( mapOf( Swipe.Up to SceneFamilies.Home, if (shadeInteractor.shadeAlignment == ShadeAlignment.Top) { Swipe.Up } else { Swipe.Down } to SceneFamilies.Home, Back to SceneFamilies.Home, ) ) Loading
packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModel.kt +8 −1 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import com.android.systemui.qs.panels.ui.viewmodel.EditModeViewModel import com.android.systemui.qs.panels.ui.viewmodel.TileGridViewModel import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.scene.shared.model.SceneFamilies import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.model.ShadeAlignment import com.android.systemui.shade.ui.viewmodel.OverlayShadeViewModel import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow Loading @@ -37,6 +39,7 @@ import kotlinx.coroutines.flow.asStateFlow class QuickSettingsShadeSceneViewModel @Inject constructor( shadeInteractor: ShadeInteractor, val overlayShadeViewModel: OverlayShadeViewModel, val brightnessSliderViewModel: BrightnessSliderViewModel, val tileGridViewModel: TileGridViewModel, Loading @@ -46,7 +49,11 @@ constructor( val destinationScenes: StateFlow<Map<UserAction, UserActionResult>> = MutableStateFlow( mapOf( Swipe.Up to SceneFamilies.Home, if (shadeInteractor.shadeAlignment == ShadeAlignment.Top) { Swipe.Up } else { Swipe.Down } to SceneFamilies.Home, Back to SceneFamilies.Home, ) ) Loading
packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt +11 −4 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import kotlinx.coroutines.flow.asStateFlow @SysUISingleton class FakeShadeRepository @Inject constructor() : ShadeRepository { private val _qsExpansion = MutableStateFlow(0f) override val qsExpansion = _qsExpansion @Deprecated("Use ShadeInteractor.qsExpansion instead") override val qsExpansion = _qsExpansion private val _udfpsTransitionToFullShadeProgress = MutableStateFlow(0f) override val udfpsTransitionToFullShadeProgress = _udfpsTransitionToFullShadeProgress Loading Loading @@ -59,12 +59,15 @@ class FakeShadeRepository @Inject constructor() : ShadeRepository { private val _legacyIsQsExpanded = MutableStateFlow(false) @Deprecated("Use ShadeInteractor instead") override val legacyIsQsExpanded = _legacyIsQsExpanded @Deprecated("Use ShadeInteractor.isUserInteractingWithShade instead") override val legacyLockscreenShadeTracking = MutableStateFlow(false) private val _shadeMode = MutableStateFlow<ShadeMode>(ShadeMode.Single) override val shadeMode: StateFlow<ShadeMode> = _shadeMode.asStateFlow() override val isDualShadeAlignedToBottom = false private var _isDualShadeAlignedToBottom = false override val isDualShadeAlignedToBottom get() = _isDualShadeAlignedToBottom @Deprecated("Use ShadeInteractor instead") override fun setLegacyIsQsExpanded(legacyIsQsExpanded: Boolean) { Loading Loading @@ -139,8 +142,12 @@ class FakeShadeRepository @Inject constructor() : ShadeRepository { _legacyShadeExpansion.value = expandedFraction } override fun setShadeMode(shadeMode: ShadeMode) { _shadeMode.value = shadeMode override fun setShadeMode(mode: ShadeMode) { _shadeMode.value = mode } fun setDualShadeAlignedToBottom(isAlignedToBottom: Boolean) { _isDualShadeAlignedToBottom = isAlignedToBottom } } Loading