Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +28 −2 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import com.android.systemui.qs.FooterActionsController import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter import com.android.systemui.res.R import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.settings.brightness.ui.viewmodel.brightnessMirrorViewModel import com.android.systemui.shade.domain.interactor.privacyChipInteractor Loading Loading @@ -88,6 +89,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { flags, scope = testScope.backgroundScope, ) private val sceneInteractor = kosmos.sceneInteractor private lateinit var shadeHeaderViewModel: ShadeHeaderViewModel Loading Loading @@ -115,11 +117,12 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { notifications = kosmos.notificationsPlaceholderViewModel, footerActionsViewModelFactory = footerActionsViewModelFactory, footerActionsController = footerActionsController, sceneInteractor = sceneInteractor, ) } @Test fun destinationsNotCustomizing() = fun destinations_whenNotCustomizing() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, false) val destinations by collectLastValue(underTest.destinationScenes) Loading @@ -135,7 +138,30 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { } @Test fun destinationsCustomizing_noDestinations() = fun destinations_whenNotCustomizing_withPreviousSceneLockscreen() = 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 previousScene by collectLastValue(sceneInteractor.previousScene) sceneInteractor.changeScene(Scenes.Lockscreen, "reason") sceneInteractor.changeScene(Scenes.QuickSettings, "reason") assertThat(currentScene).isEqualTo(Scenes.QuickSettings) assertThat(previousScene).isEqualTo(Scenes.Lockscreen) assertThat(destinations) .isEqualTo( mapOf( Back to UserActionResult(Scenes.Lockscreen), Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Lockscreen), ) ) } @Test fun destinations_whenCustomizing_noDestinations() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, false) val destinations by collectLastValue(underTest.destinationScenes) Loading packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt +12 −6 Original line number Diff line number Diff line Loading @@ -25,12 +25,15 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.qs.FooterActionsController import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.settings.brightness.ui.viewModel.BrightnessMirrorViewModel import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map /** Models UI state and handles user input for the quick settings scene. */ Loading @@ -44,22 +47,25 @@ constructor( val notifications: NotificationsPlaceholderViewModel, private val footerActionsViewModelFactory: FooterActionsViewModel.Factory, private val footerActionsController: FooterActionsController, private val sceneInteractor: SceneInteractor, ) { val destinationScenes = qsSceneAdapter.isCustomizing.map { customizing -> qsSceneAdapter.isCustomizing.flatMapLatest { customizing -> if (customizing) { // TODO(b/332749288) Empty map so there are no back handlers and back can close // customizer emptyMap() flowOf(emptyMap()) // TODO(b/330200163) Add an Up from Bottom to be able to collapse the shade // while customizing } else { sceneInteractor.previousScene.map { previousScene -> mapOf( Back to UserActionResult(Scenes.Shade), Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Shade), Back to UserActionResult(previousScene ?: Scenes.Shade), Swipe(SwipeDirection.Up) to UserActionResult(previousScene ?: Scenes.Shade), ) } } } private val footerActionsControllerInitialized = AtomicBoolean(false) Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt +28 −2 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import com.android.systemui.qs.FooterActionsController import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter import com.android.systemui.res.R import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.settings.brightness.ui.viewmodel.brightnessMirrorViewModel import com.android.systemui.shade.domain.interactor.privacyChipInteractor Loading Loading @@ -88,6 +89,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { flags, scope = testScope.backgroundScope, ) private val sceneInteractor = kosmos.sceneInteractor private lateinit var shadeHeaderViewModel: ShadeHeaderViewModel Loading Loading @@ -115,11 +117,12 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { notifications = kosmos.notificationsPlaceholderViewModel, footerActionsViewModelFactory = footerActionsViewModelFactory, footerActionsController = footerActionsController, sceneInteractor = sceneInteractor, ) } @Test fun destinationsNotCustomizing() = fun destinations_whenNotCustomizing() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, false) val destinations by collectLastValue(underTest.destinationScenes) Loading @@ -135,7 +138,30 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() { } @Test fun destinationsCustomizing_noDestinations() = fun destinations_whenNotCustomizing_withPreviousSceneLockscreen() = 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 previousScene by collectLastValue(sceneInteractor.previousScene) sceneInteractor.changeScene(Scenes.Lockscreen, "reason") sceneInteractor.changeScene(Scenes.QuickSettings, "reason") assertThat(currentScene).isEqualTo(Scenes.QuickSettings) assertThat(previousScene).isEqualTo(Scenes.Lockscreen) assertThat(destinations) .isEqualTo( mapOf( Back to UserActionResult(Scenes.Lockscreen), Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Lockscreen), ) ) } @Test fun destinations_whenCustomizing_noDestinations() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, false) val destinations by collectLastValue(underTest.destinationScenes) Loading
packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt +12 −6 Original line number Diff line number Diff line Loading @@ -25,12 +25,15 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.qs.FooterActionsController import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.settings.brightness.ui.viewModel.BrightnessMirrorViewModel import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map /** Models UI state and handles user input for the quick settings scene. */ Loading @@ -44,22 +47,25 @@ constructor( val notifications: NotificationsPlaceholderViewModel, private val footerActionsViewModelFactory: FooterActionsViewModel.Factory, private val footerActionsController: FooterActionsController, private val sceneInteractor: SceneInteractor, ) { val destinationScenes = qsSceneAdapter.isCustomizing.map { customizing -> qsSceneAdapter.isCustomizing.flatMapLatest { customizing -> if (customizing) { // TODO(b/332749288) Empty map so there are no back handlers and back can close // customizer emptyMap() flowOf(emptyMap()) // TODO(b/330200163) Add an Up from Bottom to be able to collapse the shade // while customizing } else { sceneInteractor.previousScene.map { previousScene -> mapOf( Back to UserActionResult(Scenes.Shade), Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Shade), Back to UserActionResult(previousScene ?: Scenes.Shade), Swipe(SwipeDirection.Up) to UserActionResult(previousScene ?: Scenes.Shade), ) } } } private val footerActionsControllerInitialized = AtomicBoolean(false) Loading