Loading packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +24 −21 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import com.android.systemui.qs.ui.composable.QuickSettings import com.android.systemui.res.R import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.ui.composable.ComposableScene import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager Loading Loading @@ -152,9 +153,10 @@ private fun SceneScope.ShadeScene( mediaHost: MediaHost, modifier: Modifier = Modifier, ) { val isSplitShade by viewModel.isSplitShade.collectAsState() if (isSplitShade) { SplitShade( val shadeMode by viewModel.shadeMode.collectAsState() when (shadeMode) { is ShadeMode.Single -> SingleShade( viewModel = viewModel, createTintedIconManager = createTintedIconManager, createBatteryMeterViewController = createBatteryMeterViewController, Loading @@ -163,8 +165,8 @@ private fun SceneScope.ShadeScene( mediaHost = mediaHost, modifier = modifier, ) } else { SingleShade( is ShadeMode.Split -> SplitShade( viewModel = viewModel, createTintedIconManager = createTintedIconManager, createBatteryMeterViewController = createBatteryMeterViewController, Loading @@ -173,6 +175,7 @@ private fun SceneScope.ShadeScene( mediaHost = mediaHost, modifier = modifier, ) is ShadeMode.Dual -> error("Dual shade is not yet implemented!") } } Loading packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt +9 −8 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ 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.shade.data.repository.shadeRepository import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.testKosmos import com.android.systemui.user.data.repository.userRepository import com.google.common.truth.Truth Loading Loading @@ -562,17 +563,17 @@ class ShadeInteractorSceneContainerImplTest : SysuiTestCase() { } @Test fun isSplitShade() = fun shadeMode() = testScope.runTest { val isSplitShade by collectLastValue(underTest.isSplitShade) val shadeMode by collectLastValue(underTest.shadeMode) shadeRepository.setSplitShade(true) assertThat(isSplitShade).isTrue() shadeRepository.setShadeMode(ShadeMode.Split) assertThat(shadeMode).isEqualTo(ShadeMode.Split) shadeRepository.setSplitShade(false) assertThat(isSplitShade).isFalse() shadeRepository.setShadeMode(ShadeMode.Single) assertThat(shadeMode).isEqualTo(ShadeMode.Single) shadeRepository.setSplitShade(true) assertThat(isSplitShade).isTrue() shadeRepository.setShadeMode(ShadeMode.Split) assertThat(shadeMode).isEqualTo(ShadeMode.Split) } } packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt +6 −5 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.testScope import com.android.systemui.res.R import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runTest Loading @@ -42,20 +43,20 @@ class ShadeStartableTest : SysuiTestCase() { private val underTest = kosmos.shadeStartable @Test fun hydrateSplitShade() = fun hydrateShadeMode() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, false) val isSplitShade by collectLastValue(shadeInteractor.isSplitShade) val shadeMode by collectLastValue(shadeInteractor.shadeMode) underTest.start() assertThat(isSplitShade).isFalse() assertThat(shadeMode).isEqualTo(ShadeMode.Single) overrideResource(R.bool.config_use_split_notification_shade, true) fakeConfigurationRepository.onAnyConfigurationChange() assertThat(isSplitShade).isTrue() assertThat(shadeMode).isEqualTo(ShadeMode.Split) overrideResource(R.bool.config_use_split_notification_shade, false) fakeConfigurationRepository.onAnyConfigurationChange() assertThat(isSplitShade).isFalse() assertThat(shadeMode).isEqualTo(ShadeMode.Single) } } packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt +18 −0 Original line number Diff line number Diff line Loading @@ -37,10 +37,12 @@ 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.shade.data.repository.shadeRepository import com.android.systemui.shade.domain.interactor.privacyChipInteractor import com.android.systemui.shade.domain.interactor.shadeHeaderClockInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.domain.startable.shadeStartable import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor Loading Loading @@ -72,6 +74,7 @@ class ShadeSceneViewModelTest : SysuiTestCase() { private val testScope = kosmos.testScope private val sceneInteractor by lazy { kosmos.sceneInteractor } private val deviceEntryInteractor by lazy { kosmos.deviceEntryInteractor } private val shadeRepository by lazy { kosmos.shadeRepository } private val mobileIconsInteractor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock()) private val flags = FakeFeatureFlagsClassic().also { it.set(Flags.NEW_NETWORK_SLICE_UI, false) } Loading Loading @@ -274,4 +277,19 @@ class ShadeSceneViewModelTest : SysuiTestCase() { assertThat(destinationScenes?.get(Swipe(SwipeDirection.Down))?.toScene) .isEqualTo(Scenes.QuickSettings) } @Test fun shadeMode() = testScope.runTest { val shadeMode by collectLastValue(underTest.shadeMode) shadeRepository.setShadeMode(ShadeMode.Split) assertThat(shadeMode).isEqualTo(ShadeMode.Split) shadeRepository.setShadeMode(ShadeMode.Single) assertThat(shadeMode).isEqualTo(ShadeMode.Single) shadeRepository.setShadeMode(ShadeMode.Split) assertThat(shadeMode).isEqualTo(ShadeMode.Split) } } packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenSceneViewModel.kt +3 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import javax.inject.Inject import kotlinx.coroutines.CoroutineScope Loading Loading @@ -69,8 +70,8 @@ constructor( /** The key of the scene we should switch to when swiping down from the top edge. */ val downFromTopEdgeDestinationSceneKey: StateFlow<SceneKey?> = shadeInteractor.isSplitShade .map { isSplitShade -> Scenes.QuickSettings.takeUnless { isSplitShade } } shadeInteractor.shadeMode .map { shadeMode -> Scenes.QuickSettings.takeIf { shadeMode is ShadeMode.Single } } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt +24 −21 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import com.android.systemui.qs.ui.composable.QuickSettings import com.android.systemui.res.R import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.ui.composable.ComposableScene import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel import com.android.systemui.statusbar.phone.StatusBarIconController import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager Loading Loading @@ -152,9 +153,10 @@ private fun SceneScope.ShadeScene( mediaHost: MediaHost, modifier: Modifier = Modifier, ) { val isSplitShade by viewModel.isSplitShade.collectAsState() if (isSplitShade) { SplitShade( val shadeMode by viewModel.shadeMode.collectAsState() when (shadeMode) { is ShadeMode.Single -> SingleShade( viewModel = viewModel, createTintedIconManager = createTintedIconManager, createBatteryMeterViewController = createBatteryMeterViewController, Loading @@ -163,8 +165,8 @@ private fun SceneScope.ShadeScene( mediaHost = mediaHost, modifier = modifier, ) } else { SingleShade( is ShadeMode.Split -> SplitShade( viewModel = viewModel, createTintedIconManager = createTintedIconManager, createBatteryMeterViewController = createBatteryMeterViewController, Loading @@ -173,6 +175,7 @@ private fun SceneScope.ShadeScene( mediaHost = mediaHost, modifier = modifier, ) is ShadeMode.Dual -> error("Dual shade is not yet implemented!") } } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt +9 −8 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ 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.shade.data.repository.shadeRepository import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.testKosmos import com.android.systemui.user.data.repository.userRepository import com.google.common.truth.Truth Loading Loading @@ -562,17 +563,17 @@ class ShadeInteractorSceneContainerImplTest : SysuiTestCase() { } @Test fun isSplitShade() = fun shadeMode() = testScope.runTest { val isSplitShade by collectLastValue(underTest.isSplitShade) val shadeMode by collectLastValue(underTest.shadeMode) shadeRepository.setSplitShade(true) assertThat(isSplitShade).isTrue() shadeRepository.setShadeMode(ShadeMode.Split) assertThat(shadeMode).isEqualTo(ShadeMode.Split) shadeRepository.setSplitShade(false) assertThat(isSplitShade).isFalse() shadeRepository.setShadeMode(ShadeMode.Single) assertThat(shadeMode).isEqualTo(ShadeMode.Single) shadeRepository.setSplitShade(true) assertThat(isSplitShade).isTrue() shadeRepository.setShadeMode(ShadeMode.Split) assertThat(shadeMode).isEqualTo(ShadeMode.Split) } }
packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt +6 −5 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.testScope import com.android.systemui.res.R import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runTest Loading @@ -42,20 +43,20 @@ class ShadeStartableTest : SysuiTestCase() { private val underTest = kosmos.shadeStartable @Test fun hydrateSplitShade() = fun hydrateShadeMode() = testScope.runTest { overrideResource(R.bool.config_use_split_notification_shade, false) val isSplitShade by collectLastValue(shadeInteractor.isSplitShade) val shadeMode by collectLastValue(shadeInteractor.shadeMode) underTest.start() assertThat(isSplitShade).isFalse() assertThat(shadeMode).isEqualTo(ShadeMode.Single) overrideResource(R.bool.config_use_split_notification_shade, true) fakeConfigurationRepository.onAnyConfigurationChange() assertThat(isSplitShade).isTrue() assertThat(shadeMode).isEqualTo(ShadeMode.Split) overrideResource(R.bool.config_use_split_notification_shade, false) fakeConfigurationRepository.onAnyConfigurationChange() assertThat(isSplitShade).isFalse() assertThat(shadeMode).isEqualTo(ShadeMode.Single) } }
packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt +18 −0 Original line number Diff line number Diff line Loading @@ -37,10 +37,12 @@ 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.shade.data.repository.shadeRepository import com.android.systemui.shade.domain.interactor.privacyChipInteractor import com.android.systemui.shade.domain.interactor.shadeHeaderClockInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.domain.startable.shadeStartable import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor Loading Loading @@ -72,6 +74,7 @@ class ShadeSceneViewModelTest : SysuiTestCase() { private val testScope = kosmos.testScope private val sceneInteractor by lazy { kosmos.sceneInteractor } private val deviceEntryInteractor by lazy { kosmos.deviceEntryInteractor } private val shadeRepository by lazy { kosmos.shadeRepository } private val mobileIconsInteractor = FakeMobileIconsInteractor(FakeMobileMappingsProxy(), mock()) private val flags = FakeFeatureFlagsClassic().also { it.set(Flags.NEW_NETWORK_SLICE_UI, false) } Loading Loading @@ -274,4 +277,19 @@ class ShadeSceneViewModelTest : SysuiTestCase() { assertThat(destinationScenes?.get(Swipe(SwipeDirection.Down))?.toScene) .isEqualTo(Scenes.QuickSettings) } @Test fun shadeMode() = testScope.runTest { val shadeMode by collectLastValue(underTest.shadeMode) shadeRepository.setShadeMode(ShadeMode.Split) assertThat(shadeMode).isEqualTo(ShadeMode.Split) shadeRepository.setShadeMode(ShadeMode.Single) assertThat(shadeMode).isEqualTo(ShadeMode.Single) shadeRepository.setShadeMode(ShadeMode.Split) assertThat(shadeMode).isEqualTo(ShadeMode.Split) } }
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenSceneViewModel.kt +3 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.shared.model.ShadeMode import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel import javax.inject.Inject import kotlinx.coroutines.CoroutineScope Loading Loading @@ -69,8 +70,8 @@ constructor( /** The key of the scene we should switch to when swiping down from the top edge. */ val downFromTopEdgeDestinationSceneKey: StateFlow<SceneKey?> = shadeInteractor.isSplitShade .map { isSplitShade -> Scenes.QuickSettings.takeUnless { isSplitShade } } shadeInteractor.shadeMode .map { shadeMode -> Scenes.QuickSettings.takeIf { shadeMode is ShadeMode.Single } } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), Loading