Loading packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayActionsViewModelTest.kt +27 −2 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.lifecycle.activateIn import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.ui.viewmodel.SceneContainerArea import com.android.systemui.shade.domain.interactor.enableDualShade import com.android.systemui.shade.ui.viewmodel.notificationsShadeOverlayActionsViewModel import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat Loading Loading @@ -72,8 +73,10 @@ class NotificationsShadeOverlayActionsViewModelTest : SysuiTestCase() { } @Test fun downFromEndHalf_switchesToQuickSettingsShade() = fun downFromEndHalf_wideScreen_switchesToQuickSettingsShade() = kosmos.runTest { enableDualShade(wideLayout = true) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.EndHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.QuickSettingsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) Loading @@ -81,8 +84,30 @@ class NotificationsShadeOverlayActionsViewModelTest : SysuiTestCase() { } @Test fun downFromTopEdgeEndHalf_switchesToQuickSettingsShade() = fun downFromEndHalf_narrowScreen_doesNothing() = kosmos.runTest { enableDualShade(wideLayout = false) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.EndHalf)) assertThat(action).isNull() } @Test fun downFromTopEdgeEndHalf_wideScreen_switchesToQuickSettingsShade() = kosmos.runTest { enableDualShade(wideLayout = true) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.TopEdgeEndHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.QuickSettingsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) .containsExactly(Overlays.NotificationsShade) } @Test fun downFromTopEdgeEndHalf_narrowScreen_switchesToQuickSettingsShade() = kosmos.runTest { enableDualShade(wideLayout = false) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.TopEdgeEndHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.QuickSettingsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayActionsViewModelTest.kt +27 −2 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import com.android.systemui.lifecycle.activateIn import com.android.systemui.qs.panels.ui.viewmodel.editModeViewModel import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.ui.viewmodel.SceneContainerArea import com.android.systemui.shade.domain.interactor.enableDualShade import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import org.junit.Before Loading Loading @@ -100,8 +101,10 @@ class QuickSettingsShadeOverlayActionsViewModelTest : SysuiTestCase() { } @Test fun downFromStartHalf_switchesToNotificationsShade() = fun downFromStartHalf_wideScreen_switchesToNotificationsShade() = kosmos.runTest { enableDualShade(wideLayout = true) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.StartHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.NotificationsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) Loading @@ -109,8 +112,30 @@ class QuickSettingsShadeOverlayActionsViewModelTest : SysuiTestCase() { } @Test fun downFromTopEdgeStartHalf_switchesToNotificationsShade() = fun downFromStartHalf_narrowScreen_doesNothing() = kosmos.runTest { enableDualShade(wideLayout = false) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.StartHalf)) assertThat(action).isNull() } @Test fun downFromTopEdgeStartHalf_wideScreen_switchesToNotificationsShade() = kosmos.runTest { enableDualShade(wideLayout = true) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.TopEdgeStartHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.NotificationsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) .containsExactly(Overlays.QuickSettingsShade) } @Test fun downFromTopEdgeStartHalf_narrowScreen_switchesToNotificationsShade() = kosmos.runTest { enableDualShade(wideLayout = false) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.TopEdgeStartHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.NotificationsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) Loading packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayActionsViewModel.kt +18 −10 Original line number Diff line number Diff line Loading @@ -27,12 +27,15 @@ import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.ui.viewmodel.SceneContainerArea.EndHalf import com.android.systemui.scene.ui.viewmodel.SceneContainerArea.TopEdgeEndHalf import com.android.systemui.scene.ui.viewmodel.UserActionsViewModel import com.android.systemui.shade.domain.interactor.ShadeModeInteractor import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import kotlinx.coroutines.flow.map /** Models the UI state for the user actions for navigating to other scenes or overlays. */ class NotificationsShadeOverlayActionsViewModel @AssistedInject constructor() : UserActionsViewModel() { class NotificationsShadeOverlayActionsViewModel @AssistedInject constructor(private val shadeModeInteractor: ShadeModeInteractor) : UserActionsViewModel() { override suspend fun hydrateActions(setActions: (Map<UserAction, UserActionResult>) -> Unit) { val hideNotificationsShade = HideOverlay(Overlays.NotificationsShade) Loading @@ -41,14 +44,19 @@ class NotificationsShadeOverlayActionsViewModel @AssistedInject constructor() : Overlays.QuickSettingsShade, hideCurrentOverlays = HideCurrentOverlays.Some(Overlays.NotificationsShade), ) setActions( mapOf( Swipe.Up to hideNotificationsShade, Back to hideNotificationsShade, Swipe.Down(fromSource = EndHalf) to openQuickSettingsShade, Swipe.Down(fromSource = TopEdgeEndHalf) to openQuickSettingsShade, ) ) shadeModeInteractor.isFullWidthShade .map { isFullWidthShade -> buildMap { put(Swipe.Up, hideNotificationsShade) put(Back, hideNotificationsShade) if (!isFullWidthShade) { put(Swipe.Down(fromSource = EndHalf), openQuickSettingsShade) } put(Swipe.Down(fromSource = TopEdgeEndHalf), openQuickSettingsShade) } } .collect { actions -> setActions(actions) } } @AssistedFactory Loading packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayActionsViewModel.kt +12 −5 Original line number Diff line number Diff line Loading @@ -29,18 +29,23 @@ import com.android.systemui.scene.ui.viewmodel.SceneContainerArea.BottomEdge import com.android.systemui.scene.ui.viewmodel.SceneContainerArea.StartHalf import com.android.systemui.scene.ui.viewmodel.SceneContainerArea.TopEdgeStartHalf import com.android.systemui.scene.ui.viewmodel.UserActionsViewModel import com.android.systemui.shade.domain.interactor.ShadeModeInteractor import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.combine /** Models the UI state for the user actions for navigating to other scenes or overlays. */ class QuickSettingsShadeOverlayActionsViewModel @AssistedInject constructor(private val editModeViewModel: EditModeViewModel) : UserActionsViewModel() { constructor( private val editModeViewModel: EditModeViewModel, private val shadeModeInteractor: ShadeModeInteractor, ) : UserActionsViewModel() { override suspend fun hydrateActions(setActions: (Map<UserAction, UserActionResult>) -> Unit) { editModeViewModel.isEditing .map { isEditing -> combine(editModeViewModel.isEditing, shadeModeInteractor.isFullWidthShade) { isEditing, isFullWidthShade -> val hideQuickSettings = HideOverlay(Overlays.QuickSettingsShade) val openNotificationsShade = ShowOverlay( Loading @@ -57,9 +62,11 @@ constructor(private val editModeViewModel: EditModeViewModel) : UserActionsViewM put(Swipe.Up, hideQuickSettings) } put(Swipe.Down(fromSource = TopEdgeStartHalf), openNotificationsShade) if (!isFullWidthShade) { put(Swipe.Down(fromSource = StartHalf), openNotificationsShade) } } } .collect { actions -> setActions(actions) } } Loading packages/SystemUI/tests/utils/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayActionsViewModelKosmos.kt +5 −1 Original line number Diff line number Diff line Loading @@ -19,8 +19,12 @@ package com.android.systemui.qs.ui.viewmodel import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.qs.panels.ui.viewmodel.editModeViewModel import com.android.systemui.shade.domain.interactor.shadeModeInteractor val Kosmos.quickSettingsShadeOverlayActionsViewModel: QuickSettingsShadeOverlayActionsViewModel by Fixture { QuickSettingsShadeOverlayActionsViewModel(editModeViewModel) QuickSettingsShadeOverlayActionsViewModel( editModeViewModel = editModeViewModel, shadeModeInteractor = shadeModeInteractor, ) } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayActionsViewModelTest.kt +27 −2 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.lifecycle.activateIn import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.ui.viewmodel.SceneContainerArea import com.android.systemui.shade.domain.interactor.enableDualShade import com.android.systemui.shade.ui.viewmodel.notificationsShadeOverlayActionsViewModel import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat Loading Loading @@ -72,8 +73,10 @@ class NotificationsShadeOverlayActionsViewModelTest : SysuiTestCase() { } @Test fun downFromEndHalf_switchesToQuickSettingsShade() = fun downFromEndHalf_wideScreen_switchesToQuickSettingsShade() = kosmos.runTest { enableDualShade(wideLayout = true) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.EndHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.QuickSettingsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) Loading @@ -81,8 +84,30 @@ class NotificationsShadeOverlayActionsViewModelTest : SysuiTestCase() { } @Test fun downFromTopEdgeEndHalf_switchesToQuickSettingsShade() = fun downFromEndHalf_narrowScreen_doesNothing() = kosmos.runTest { enableDualShade(wideLayout = false) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.EndHalf)) assertThat(action).isNull() } @Test fun downFromTopEdgeEndHalf_wideScreen_switchesToQuickSettingsShade() = kosmos.runTest { enableDualShade(wideLayout = true) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.TopEdgeEndHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.QuickSettingsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) .containsExactly(Overlays.NotificationsShade) } @Test fun downFromTopEdgeEndHalf_narrowScreen_switchesToQuickSettingsShade() = kosmos.runTest { enableDualShade(wideLayout = false) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.TopEdgeEndHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.QuickSettingsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayActionsViewModelTest.kt +27 −2 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import com.android.systemui.lifecycle.activateIn import com.android.systemui.qs.panels.ui.viewmodel.editModeViewModel import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.ui.viewmodel.SceneContainerArea import com.android.systemui.shade.domain.interactor.enableDualShade import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import org.junit.Before Loading Loading @@ -100,8 +101,10 @@ class QuickSettingsShadeOverlayActionsViewModelTest : SysuiTestCase() { } @Test fun downFromStartHalf_switchesToNotificationsShade() = fun downFromStartHalf_wideScreen_switchesToNotificationsShade() = kosmos.runTest { enableDualShade(wideLayout = true) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.StartHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.NotificationsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) Loading @@ -109,8 +112,30 @@ class QuickSettingsShadeOverlayActionsViewModelTest : SysuiTestCase() { } @Test fun downFromTopEdgeStartHalf_switchesToNotificationsShade() = fun downFromStartHalf_narrowScreen_doesNothing() = kosmos.runTest { enableDualShade(wideLayout = false) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.StartHalf)) assertThat(action).isNull() } @Test fun downFromTopEdgeStartHalf_wideScreen_switchesToNotificationsShade() = kosmos.runTest { enableDualShade(wideLayout = true) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.TopEdgeStartHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.NotificationsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) .containsExactly(Overlays.QuickSettingsShade) } @Test fun downFromTopEdgeStartHalf_narrowScreen_switchesToNotificationsShade() = kosmos.runTest { enableDualShade(wideLayout = false) val action = actions?.get(Swipe.Down(fromSource = SceneContainerArea.TopEdgeStartHalf)) assertThat((action as ShowOverlay).overlay).isEqualTo(Overlays.NotificationsShade) assertThat((action.hideCurrentOverlays as HideCurrentOverlays.Some).overlays) Loading
packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayActionsViewModel.kt +18 −10 Original line number Diff line number Diff line Loading @@ -27,12 +27,15 @@ import com.android.systemui.scene.shared.model.Overlays import com.android.systemui.scene.ui.viewmodel.SceneContainerArea.EndHalf import com.android.systemui.scene.ui.viewmodel.SceneContainerArea.TopEdgeEndHalf import com.android.systemui.scene.ui.viewmodel.UserActionsViewModel import com.android.systemui.shade.domain.interactor.ShadeModeInteractor import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import kotlinx.coroutines.flow.map /** Models the UI state for the user actions for navigating to other scenes or overlays. */ class NotificationsShadeOverlayActionsViewModel @AssistedInject constructor() : UserActionsViewModel() { class NotificationsShadeOverlayActionsViewModel @AssistedInject constructor(private val shadeModeInteractor: ShadeModeInteractor) : UserActionsViewModel() { override suspend fun hydrateActions(setActions: (Map<UserAction, UserActionResult>) -> Unit) { val hideNotificationsShade = HideOverlay(Overlays.NotificationsShade) Loading @@ -41,14 +44,19 @@ class NotificationsShadeOverlayActionsViewModel @AssistedInject constructor() : Overlays.QuickSettingsShade, hideCurrentOverlays = HideCurrentOverlays.Some(Overlays.NotificationsShade), ) setActions( mapOf( Swipe.Up to hideNotificationsShade, Back to hideNotificationsShade, Swipe.Down(fromSource = EndHalf) to openQuickSettingsShade, Swipe.Down(fromSource = TopEdgeEndHalf) to openQuickSettingsShade, ) ) shadeModeInteractor.isFullWidthShade .map { isFullWidthShade -> buildMap { put(Swipe.Up, hideNotificationsShade) put(Back, hideNotificationsShade) if (!isFullWidthShade) { put(Swipe.Down(fromSource = EndHalf), openQuickSettingsShade) } put(Swipe.Down(fromSource = TopEdgeEndHalf), openQuickSettingsShade) } } .collect { actions -> setActions(actions) } } @AssistedFactory Loading
packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayActionsViewModel.kt +12 −5 Original line number Diff line number Diff line Loading @@ -29,18 +29,23 @@ import com.android.systemui.scene.ui.viewmodel.SceneContainerArea.BottomEdge import com.android.systemui.scene.ui.viewmodel.SceneContainerArea.StartHalf import com.android.systemui.scene.ui.viewmodel.SceneContainerArea.TopEdgeStartHalf import com.android.systemui.scene.ui.viewmodel.UserActionsViewModel import com.android.systemui.shade.domain.interactor.ShadeModeInteractor import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.combine /** Models the UI state for the user actions for navigating to other scenes or overlays. */ class QuickSettingsShadeOverlayActionsViewModel @AssistedInject constructor(private val editModeViewModel: EditModeViewModel) : UserActionsViewModel() { constructor( private val editModeViewModel: EditModeViewModel, private val shadeModeInteractor: ShadeModeInteractor, ) : UserActionsViewModel() { override suspend fun hydrateActions(setActions: (Map<UserAction, UserActionResult>) -> Unit) { editModeViewModel.isEditing .map { isEditing -> combine(editModeViewModel.isEditing, shadeModeInteractor.isFullWidthShade) { isEditing, isFullWidthShade -> val hideQuickSettings = HideOverlay(Overlays.QuickSettingsShade) val openNotificationsShade = ShowOverlay( Loading @@ -57,9 +62,11 @@ constructor(private val editModeViewModel: EditModeViewModel) : UserActionsViewM put(Swipe.Up, hideQuickSettings) } put(Swipe.Down(fromSource = TopEdgeStartHalf), openNotificationsShade) if (!isFullWidthShade) { put(Swipe.Down(fromSource = StartHalf), openNotificationsShade) } } } .collect { actions -> setActions(actions) } } Loading
packages/SystemUI/tests/utils/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayActionsViewModelKosmos.kt +5 −1 Original line number Diff line number Diff line Loading @@ -19,8 +19,12 @@ package com.android.systemui.qs.ui.viewmodel import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.qs.panels.ui.viewmodel.editModeViewModel import com.android.systemui.shade.domain.interactor.shadeModeInteractor val Kosmos.quickSettingsShadeOverlayActionsViewModel: QuickSettingsShadeOverlayActionsViewModel by Fixture { QuickSettingsShadeOverlayActionsViewModel(editModeViewModel) QuickSettingsShadeOverlayActionsViewModel( editModeViewModel = editModeViewModel, shadeModeInteractor = shadeModeInteractor, ) }