diff options
7 files changed, 96 insertions, 10 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..fbc1fb6ea44c 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 @@ -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 @@ -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() = @@ -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) } @@ -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) } 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..4bd8006cdb8e 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 @@ -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 @@ -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() = @@ -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) } @@ -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) } diff --git a/packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModel.kt b/packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModel.kt index d0c7fbcac189..1f7471668355 100644 --- a/packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeSceneViewModel.kt @@ -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 @@ -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, ) ) diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModel.kt index bd748d5c2174..e395d30c0c19 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeSceneViewModel.kt @@ -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 @@ -37,6 +39,7 @@ import kotlinx.coroutines.flow.asStateFlow class QuickSettingsShadeSceneViewModel @Inject constructor( + shadeInteractor: ShadeInteractor, val overlayShadeViewModel: OverlayShadeViewModel, val brightnessSliderViewModel: BrightnessSliderViewModel, val tileGridViewModel: TileGridViewModel, @@ -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, ) ) diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt index 4813794a85bb..b9918f1e46d8 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/data/repository/FakeShadeRepository.kt @@ -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 @@ -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) { @@ -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 } } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/NotificationsShadeSceneViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/NotificationsShadeSceneViewModelKosmos.kt index 1ca3509cbd79..72a80d480288 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/NotificationsShadeSceneViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/NotificationsShadeSceneViewModelKosmos.kt @@ -18,6 +18,7 @@ package com.android.systemui.shade.ui.viewmodel import com.android.systemui.kosmos.Kosmos import com.android.systemui.notifications.ui.viewmodel.NotificationsShadeSceneViewModel +import com.android.systemui.shade.domain.interactor.shadeInteractor val Kosmos.notificationsShadeSceneViewModel: NotificationsShadeSceneViewModel by - Kosmos.Fixture { NotificationsShadeSceneViewModel() } + Kosmos.Fixture { NotificationsShadeSceneViewModel(shadeInteractor) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/QuickSettingsShadeSceneViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/QuickSettingsShadeSceneViewModelKosmos.kt index 4d81ea16220c..8adb26f2d65f 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/QuickSettingsShadeSceneViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ui/viewmodel/QuickSettingsShadeSceneViewModelKosmos.kt @@ -22,6 +22,7 @@ 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.qs.ui.viewmodel.QuickSettingsShadeSceneViewModel +import com.android.systemui.shade.domain.interactor.shadeInteractor val Kosmos.quickSettingsShadeSceneViewModel: QuickSettingsShadeSceneViewModel by Kosmos.Fixture { @@ -31,5 +32,6 @@ val Kosmos.quickSettingsShadeSceneViewModel: QuickSettingsShadeSceneViewModel by tileGridViewModel = tileGridViewModel, editModeViewModel = editModeViewModel, qsSceneAdapter = qsSceneAdapter, + shadeInteractor = shadeInteractor, ) } |