Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeHomeStatusBarViewModel.kt +4 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,10 @@ class FakeHomeStatusBarViewModel( override fun onChipBoundsChanged(key: String, bounds: RectF) {} override fun onSystemIconChipClicked() {} override fun onNotificationIconChipClicked() {} override val ongoingActivityChipsLegacy = MutableStateFlow(MultipleOngoingActivityChipsModelLegacy()) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt +76 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ import com.android.systemui.mediaprojection.data.model.MediaProjectionState import com.android.systemui.mediaprojection.data.repository.fakeMediaProjectionRepository import com.android.systemui.plugins.DarkIconDispatcher import com.android.systemui.scene.data.repository.sceneContainerRepository import com.android.systemui.scene.data.repository.setSceneTransition import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.Overlays Loading @@ -67,6 +68,7 @@ import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.screenrecord.data.model.ScreenRecordModel import com.android.systemui.screenrecord.data.repository.screenRecordRepository import com.android.systemui.shade.data.repository.fakeShadeDisplaysRepository import com.android.systemui.shade.domain.interactor.enableDualShade import com.android.systemui.shade.shadeTestUtil import com.android.systemui.statusbar.chips.mediaprojection.domain.interactor.MediaProjectionChipInteractorTest.Companion.NORMAL_PACKAGE import com.android.systemui.statusbar.chips.mediaprojection.domain.interactor.MediaProjectionChipInteractorTest.Companion.setUpPackageManagerForMediaProjection Loading @@ -76,6 +78,7 @@ import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModelTest.Companion.assertIsCallChip import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModelTest.Companion.assertIsScreenRecordChip import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModelTest.Companion.assertIsShareToAppChip import com.android.systemui.statusbar.core.StatusBarForDesktop import com.android.systemui.statusbar.core.StatusBarRootModernization import com.android.systemui.statusbar.data.model.StatusBarMode import com.android.systemui.statusbar.data.repository.fakeStatusBarModeRepository Loading Loading @@ -1901,6 +1904,79 @@ class HomeStatusBarViewModelImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) } @Test @EnableSceneContainer @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun onSystemIconChipClicked_qsShadeIsOpen_collapsesShade() = kosmos.runTest { enableDualShade() val currentOverlays by collectLastValue(sceneInteractor.currentOverlays) sceneContainerRepository.showOverlay(Overlays.QuickSettingsShade) setSceneTransition( ObservableTransitionState.Idle( sceneInteractor.currentScene.value, checkNotNull(currentOverlays), ) ) assertThat(currentOverlays).containsExactly(Overlays.QuickSettingsShade) underTest.onSystemIconChipClicked() assertThat(currentOverlays).doesNotContain(Overlays.QuickSettingsShade) } @Test @EnableSceneContainer @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun onSystemIconChipClicked_qsShadeIsClosed_expandsShade() = kosmos.runTest { enableDualShade() val currentOverlays by collectLastValue(sceneInteractor.currentOverlays) assertThat(currentOverlays).doesNotContain(Overlays.QuickSettingsShade) underTest.onSystemIconChipClicked() assertThat(currentOverlays).contains(Overlays.QuickSettingsShade) } @Test @EnableSceneContainer @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun onNotificationIconChipClicked_notificationsShadeIsOpen_collapsesShade() = kosmos.runTest { enableDualShade() val currentScene by collectLastValue(sceneInteractor.currentScene) val currentOverlays by collectLastValue(sceneInteractor.currentOverlays) sceneContainerRepository.showOverlay(Overlays.NotificationsShade) setSceneTransition( ObservableTransitionState.Idle( checkNotNull(currentScene), checkNotNull(currentOverlays), ) ) assertThat(currentOverlays).contains(Overlays.NotificationsShade) underTest.onNotificationIconChipClicked() assertThat(currentOverlays).doesNotContain(Overlays.NotificationsShade) } @Test @EnableSceneContainer @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun onNotificationIconChipClicked_notificationsShadeIsClosed_expandsShade() = kosmos.runTest { enableDualShade() val currentOverlays by collectLastValue(sceneInteractor.currentOverlays) assertThat(currentOverlays).doesNotContain(Overlays.NotificationsShade) underTest.onNotificationIconChipClicked() assertThat(currentOverlays).contains(Overlays.NotificationsShade) } private fun activeNotificationsStore(notifications: List<ActiveNotificationModel>) = ActiveNotificationsStore.Builder() .apply { notifications.forEach(::addIndividualNotif) } Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModel.kt +26 −2 Original line number Diff line number Diff line Loading @@ -161,6 +161,12 @@ interface HomeStatusBarViewModel : Activatable { /** Invoked each time a chip's on-screen bounds have changed. */ fun onChipBoundsChanged(key: String, bounds: RectF) /** Notifies that the system icons container was clicked. */ fun onSystemIconChipClicked() /** Notifies that the notification icons container was clicked. */ fun onNotificationIconChipClicked() /** * The multiple ongoing activity chips that should be shown on the left-hand side of the status * bar. Loading Loading @@ -252,9 +258,9 @@ constructor( keyguardTransitionInteractor: KeyguardTransitionInteractor, keyguardInteractor: KeyguardInteractor, override val operatorNameViewModel: StatusBarOperatorNameViewModel, sceneInteractor: SceneInteractor, private val sceneInteractor: SceneInteractor, sceneContainerOcclusionInteractor: SceneContainerOcclusionInteractor, shadeInteractor: ShadeInteractor, private val shadeInteractor: ShadeInteractor, shareToAppChipViewModel: ShareToAppChipViewModel, @DisplayAware private val ongoingActivityChipsViewModel: OngoingActivityChipsViewModel, statusBarPopupChipsViewModelFactory: StatusBarPopupChipsViewModel.Factory, Loading Loading @@ -595,6 +601,24 @@ constructor( ongoingActivityChipsViewModel.onChipBoundsChanged(key, bounds) } override fun onSystemIconChipClicked() { if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) { return } shadeInteractor.toggleQuickSettingsShade( loggingReason = "HomeStatusBarViewModel.onSystemIconChipClicked" ) } override fun onNotificationIconChipClicked() { if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) { return } shadeInteractor.toggleNotificationsShade( loggingReason = "HomeStatusBarViewModel.onNotificationIconChipClicked" ) } private val hasOngoingActivityChips = if (StatusBarChipsModernization.isEnabled) { chipsVisibilityModel.map { it.chips.active.any { chip -> !chip.isHidden } } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/FakeHomeStatusBarViewModel.kt +4 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,10 @@ class FakeHomeStatusBarViewModel( override fun onChipBoundsChanged(key: String, bounds: RectF) {} override fun onSystemIconChipClicked() {} override fun onNotificationIconChipClicked() {} override val ongoingActivityChipsLegacy = MutableStateFlow(MultipleOngoingActivityChipsModelLegacy()) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt +76 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ import com.android.systemui.mediaprojection.data.model.MediaProjectionState import com.android.systemui.mediaprojection.data.repository.fakeMediaProjectionRepository import com.android.systemui.plugins.DarkIconDispatcher import com.android.systemui.scene.data.repository.sceneContainerRepository import com.android.systemui.scene.data.repository.setSceneTransition import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.scene.shared.model.Overlays Loading @@ -67,6 +68,7 @@ import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.screenrecord.data.model.ScreenRecordModel import com.android.systemui.screenrecord.data.repository.screenRecordRepository import com.android.systemui.shade.data.repository.fakeShadeDisplaysRepository import com.android.systemui.shade.domain.interactor.enableDualShade import com.android.systemui.shade.shadeTestUtil import com.android.systemui.statusbar.chips.mediaprojection.domain.interactor.MediaProjectionChipInteractorTest.Companion.NORMAL_PACKAGE import com.android.systemui.statusbar.chips.mediaprojection.domain.interactor.MediaProjectionChipInteractorTest.Companion.setUpPackageManagerForMediaProjection Loading @@ -76,6 +78,7 @@ import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModelTest.Companion.assertIsCallChip import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModelTest.Companion.assertIsScreenRecordChip import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModelTest.Companion.assertIsShareToAppChip import com.android.systemui.statusbar.core.StatusBarForDesktop import com.android.systemui.statusbar.core.StatusBarRootModernization import com.android.systemui.statusbar.data.model.StatusBarMode import com.android.systemui.statusbar.data.repository.fakeStatusBarModeRepository Loading Loading @@ -1901,6 +1904,79 @@ class HomeStatusBarViewModelImplTest(flags: FlagsParameterization) : SysuiTestCa assertThat(systemInfoVisible!!.baseVisibility.visibility).isEqualTo(View.GONE) } @Test @EnableSceneContainer @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun onSystemIconChipClicked_qsShadeIsOpen_collapsesShade() = kosmos.runTest { enableDualShade() val currentOverlays by collectLastValue(sceneInteractor.currentOverlays) sceneContainerRepository.showOverlay(Overlays.QuickSettingsShade) setSceneTransition( ObservableTransitionState.Idle( sceneInteractor.currentScene.value, checkNotNull(currentOverlays), ) ) assertThat(currentOverlays).containsExactly(Overlays.QuickSettingsShade) underTest.onSystemIconChipClicked() assertThat(currentOverlays).doesNotContain(Overlays.QuickSettingsShade) } @Test @EnableSceneContainer @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun onSystemIconChipClicked_qsShadeIsClosed_expandsShade() = kosmos.runTest { enableDualShade() val currentOverlays by collectLastValue(sceneInteractor.currentOverlays) assertThat(currentOverlays).doesNotContain(Overlays.QuickSettingsShade) underTest.onSystemIconChipClicked() assertThat(currentOverlays).contains(Overlays.QuickSettingsShade) } @Test @EnableSceneContainer @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun onNotificationIconChipClicked_notificationsShadeIsOpen_collapsesShade() = kosmos.runTest { enableDualShade() val currentScene by collectLastValue(sceneInteractor.currentScene) val currentOverlays by collectLastValue(sceneInteractor.currentOverlays) sceneContainerRepository.showOverlay(Overlays.NotificationsShade) setSceneTransition( ObservableTransitionState.Idle( checkNotNull(currentScene), checkNotNull(currentOverlays), ) ) assertThat(currentOverlays).contains(Overlays.NotificationsShade) underTest.onNotificationIconChipClicked() assertThat(currentOverlays).doesNotContain(Overlays.NotificationsShade) } @Test @EnableSceneContainer @EnableFlags(StatusBarForDesktop.FLAG_NAME) fun onNotificationIconChipClicked_notificationsShadeIsClosed_expandsShade() = kosmos.runTest { enableDualShade() val currentOverlays by collectLastValue(sceneInteractor.currentOverlays) assertThat(currentOverlays).doesNotContain(Overlays.NotificationsShade) underTest.onNotificationIconChipClicked() assertThat(currentOverlays).contains(Overlays.NotificationsShade) } private fun activeNotificationsStore(notifications: List<ActiveNotificationModel>) = ActiveNotificationsStore.Builder() .apply { notifications.forEach(::addIndividualNotif) } Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModel.kt +26 −2 Original line number Diff line number Diff line Loading @@ -161,6 +161,12 @@ interface HomeStatusBarViewModel : Activatable { /** Invoked each time a chip's on-screen bounds have changed. */ fun onChipBoundsChanged(key: String, bounds: RectF) /** Notifies that the system icons container was clicked. */ fun onSystemIconChipClicked() /** Notifies that the notification icons container was clicked. */ fun onNotificationIconChipClicked() /** * The multiple ongoing activity chips that should be shown on the left-hand side of the status * bar. Loading Loading @@ -252,9 +258,9 @@ constructor( keyguardTransitionInteractor: KeyguardTransitionInteractor, keyguardInteractor: KeyguardInteractor, override val operatorNameViewModel: StatusBarOperatorNameViewModel, sceneInteractor: SceneInteractor, private val sceneInteractor: SceneInteractor, sceneContainerOcclusionInteractor: SceneContainerOcclusionInteractor, shadeInteractor: ShadeInteractor, private val shadeInteractor: ShadeInteractor, shareToAppChipViewModel: ShareToAppChipViewModel, @DisplayAware private val ongoingActivityChipsViewModel: OngoingActivityChipsViewModel, statusBarPopupChipsViewModelFactory: StatusBarPopupChipsViewModel.Factory, Loading Loading @@ -595,6 +601,24 @@ constructor( ongoingActivityChipsViewModel.onChipBoundsChanged(key, bounds) } override fun onSystemIconChipClicked() { if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) { return } shadeInteractor.toggleQuickSettingsShade( loggingReason = "HomeStatusBarViewModel.onSystemIconChipClicked" ) } override fun onNotificationIconChipClicked() { if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) { return } shadeInteractor.toggleNotificationsShade( loggingReason = "HomeStatusBarViewModel.onNotificationIconChipClicked" ) } private val hasOngoingActivityChips = if (StatusBarChipsModernization.isEnabled) { chipsVisibilityModel.map { it.chips.active.any { chip -> !chip.isHidden } } Loading