diff options
3 files changed, 151 insertions, 5 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelTest.kt index 82bcecef1f70..55b87db232e8 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelTest.kt @@ -27,6 +27,7 @@ import com.android.compose.animation.scene.UserActionResult  import com.android.systemui.SysuiTestCase  import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository  import com.android.systemui.authentication.shared.model.AuthenticationMethodModel +import com.android.systemui.communal.domain.interactor.setCommunalAvailable  import com.android.systemui.coroutines.collectLastValue  import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor  import com.android.systemui.flags.EnableSceneContainer @@ -72,8 +73,10 @@ class DreamUserActionsViewModelTest : SysuiTestCase() {      @Test      @DisableFlags(DualShade.FLAG_NAME) -    fun actions_singleShade() = +    fun actions_communalNotAvailable_singleShade() =          testScope.runTest { +            kosmos.setCommunalAvailable(false) +              val actions by collectLastValue(underTest.actions)              setUpState( @@ -85,6 +88,8 @@ class DreamUserActionsViewModelTest : SysuiTestCase() {              assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer))              assertThat(actions?.get(Swipe.Down))                  .isEqualTo(UserActionResult(Scenes.Shade, isIrreversible = true)) +            assertThat(actions?.get(Swipe.Start)).isNull() +            assertThat(actions?.get(Swipe.End)).isNull()              setUpState(                  isShadeTouchable = false, @@ -102,12 +107,16 @@ class DreamUserActionsViewModelTest : SysuiTestCase() {              assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Gone))              assertThat(actions?.get(Swipe.Down))                  .isEqualTo(UserActionResult(Scenes.Shade, isIrreversible = true)) +            assertThat(actions?.get(Swipe.Start)).isNull() +            assertThat(actions?.get(Swipe.End)).isNull()          }      @Test      @DisableFlags(DualShade.FLAG_NAME) -    fun actions_splitShade() = +    fun actions_communalNotAvailable_splitShade() =          testScope.runTest { +            kosmos.setCommunalAvailable(false) +              val actions by collectLastValue(underTest.actions)              setUpState( @@ -119,6 +128,8 @@ class DreamUserActionsViewModelTest : SysuiTestCase() {              assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer))              assertThat(actions?.get(Swipe.Down))                  .isEqualTo(UserActionResult(Scenes.Shade, ToSplitShade, isIrreversible = true)) +            assertThat(actions?.get(Swipe.Start)).isNull() +            assertThat(actions?.get(Swipe.End)).isNull()              setUpState(                  isShadeTouchable = false, @@ -136,12 +147,136 @@ class DreamUserActionsViewModelTest : SysuiTestCase() {              assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Gone))              assertThat(actions?.get(Swipe.Down))                  .isEqualTo(UserActionResult(Scenes.Shade, ToSplitShade, isIrreversible = true)) +            assertThat(actions?.get(Swipe.Start)).isNull() +            assertThat(actions?.get(Swipe.End)).isNull()          }      @Test      @EnableFlags(DualShade.FLAG_NAME) -    fun actions_dualShade() = +    fun actions_communalNotAvailable_dualShade() =          testScope.runTest { +            kosmos.setCommunalAvailable(false) + +            val actions by collectLastValue(underTest.actions) + +            setUpState( +                isShadeTouchable = true, +                isDeviceUnlocked = false, +                shadeMode = ShadeMode.Dual, +            ) +            assertThat(actions).isNotEmpty() +            assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer)) +            assertThat(actions?.get(Swipe.Down)) +                .isEqualTo( +                    UserActionResult.ShowOverlay(Overlays.NotificationsShade, isIrreversible = true) +                ) +            assertThat(actions?.get(Swipe.Start)).isNull() +            assertThat(actions?.get(Swipe.End)).isNull() + +            setUpState( +                isShadeTouchable = false, +                isDeviceUnlocked = false, +                shadeMode = ShadeMode.Dual, +            ) +            assertThat(actions).isEmpty() + +            setUpState(isShadeTouchable = true, isDeviceUnlocked = true, shadeMode = ShadeMode.Dual) +            assertThat(actions).isNotEmpty() +            assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Gone)) +            assertThat(actions?.get(Swipe.Down)) +                .isEqualTo( +                    UserActionResult.ShowOverlay(Overlays.NotificationsShade, isIrreversible = true) +                ) +            assertThat(actions?.get(Swipe.Start)).isNull() +            assertThat(actions?.get(Swipe.End)).isNull() +        } + +    @Test +    @DisableFlags(DualShade.FLAG_NAME) +    fun actions_communalAvailable_singleShade() = +        testScope.runTest { +            kosmos.setCommunalAvailable(true) + +            val actions by collectLastValue(underTest.actions) + +            setUpState( +                isShadeTouchable = true, +                isDeviceUnlocked = false, +                shadeMode = ShadeMode.Single, +            ) +            assertThat(actions).isNotEmpty() +            assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer)) +            assertThat(actions?.get(Swipe.Down)) +                .isEqualTo(UserActionResult(Scenes.Shade, isIrreversible = true)) +            assertThat(actions?.get(Swipe.Start)).isEqualTo(UserActionResult(Scenes.Communal)) +            assertThat(actions?.get(Swipe.End)).isNull() + +            setUpState( +                isShadeTouchable = false, +                isDeviceUnlocked = false, +                shadeMode = ShadeMode.Single, +            ) +            assertThat(actions).isEmpty() + +            setUpState( +                isShadeTouchable = true, +                isDeviceUnlocked = true, +                shadeMode = ShadeMode.Single, +            ) +            assertThat(actions).isNotEmpty() +            assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Gone)) +            assertThat(actions?.get(Swipe.Down)) +                .isEqualTo(UserActionResult(Scenes.Shade, isIrreversible = true)) +            assertThat(actions?.get(Swipe.Start)).isEqualTo(UserActionResult(Scenes.Communal)) +            assertThat(actions?.get(Swipe.End)).isNull() +        } + +    @Test +    @DisableFlags(DualShade.FLAG_NAME) +    fun actions_communalAvailable_splitShade() = +        testScope.runTest { +            kosmos.setCommunalAvailable(true) + +            val actions by collectLastValue(underTest.actions) + +            setUpState( +                isShadeTouchable = true, +                isDeviceUnlocked = false, +                shadeMode = ShadeMode.Split, +            ) +            assertThat(actions).isNotEmpty() +            assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer)) +            assertThat(actions?.get(Swipe.Down)) +                .isEqualTo(UserActionResult(Scenes.Shade, ToSplitShade, isIrreversible = true)) +            assertThat(actions?.get(Swipe.Start)).isEqualTo(UserActionResult(Scenes.Communal)) +            assertThat(actions?.get(Swipe.End)).isNull() + +            setUpState( +                isShadeTouchable = false, +                isDeviceUnlocked = false, +                shadeMode = ShadeMode.Split, +            ) +            assertThat(actions).isEmpty() + +            setUpState( +                isShadeTouchable = true, +                isDeviceUnlocked = true, +                shadeMode = ShadeMode.Split, +            ) +            assertThat(actions).isNotEmpty() +            assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Gone)) +            assertThat(actions?.get(Swipe.Down)) +                .isEqualTo(UserActionResult(Scenes.Shade, ToSplitShade, isIrreversible = true)) +            assertThat(actions?.get(Swipe.Start)).isEqualTo(UserActionResult(Scenes.Communal)) +            assertThat(actions?.get(Swipe.End)).isNull() +        } + +    @Test +    @EnableFlags(DualShade.FLAG_NAME) +    fun actions_communalAvailable_dualShade() = +        testScope.runTest { +            kosmos.setCommunalAvailable(true) +              val actions by collectLastValue(underTest.actions)              setUpState( @@ -155,6 +290,8 @@ class DreamUserActionsViewModelTest : SysuiTestCase() {                  .isEqualTo(                      UserActionResult.ShowOverlay(Overlays.NotificationsShade, isIrreversible = true)                  ) +            assertThat(actions?.get(Swipe.Start)).isEqualTo(UserActionResult(Scenes.Communal)) +            assertThat(actions?.get(Swipe.End)).isNull()              setUpState(                  isShadeTouchable = false, @@ -170,6 +307,8 @@ class DreamUserActionsViewModelTest : SysuiTestCase() {                  .isEqualTo(                      UserActionResult.ShowOverlay(Overlays.NotificationsShade, isIrreversible = true)                  ) +            assertThat(actions?.get(Swipe.Start)).isEqualTo(UserActionResult(Scenes.Communal)) +            assertThat(actions?.get(Swipe.End)).isNull()          }      private fun TestScope.setUpState( diff --git a/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModel.kt b/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModel.kt index b37206a4fef7..160574fa2244 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModel.kt @@ -19,6 +19,7 @@ package com.android.systemui.dreams.ui.viewmodel  import com.android.compose.animation.scene.Swipe  import com.android.compose.animation.scene.UserAction  import com.android.compose.animation.scene.UserActionResult +import com.android.systemui.communal.domain.interactor.CommunalInteractor  import com.android.systemui.deviceentry.domain.interactor.DeviceUnlockedInteractor  import com.android.systemui.scene.shared.model.Scenes  import com.android.systemui.scene.ui.viewmodel.UserActionsViewModel @@ -38,6 +39,7 @@ import kotlinx.coroutines.flow.map  class DreamUserActionsViewModel  @AssistedInject  constructor( +    private val communalInteractor: CommunalInteractor,      private val deviceUnlockedInteractor: DeviceUnlockedInteractor,      private val shadeInteractor: ShadeInteractor,  ) : UserActionsViewModel() { @@ -50,10 +52,13 @@ constructor(                  } else {                      combine(                          deviceUnlockedInteractor.deviceUnlockStatus.map { it.isUnlocked }, +                        communalInteractor.isCommunalAvailable,                          shadeInteractor.shadeMode, -                    ) { isDeviceUnlocked, shadeMode -> +                    ) { isDeviceUnlocked, isCommunalAvailable, shadeMode ->                          buildList { -                                add(Swipe.Start to Scenes.Communal) +                                if (isCommunalAvailable) { +                                    add(Swipe.Start to Scenes.Communal) +                                }                                  val bouncerOrGone =                                      if (isDeviceUnlocked) Scenes.Gone else Scenes.Bouncer diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelKosmos.kt index b24b3ad05117..71746b505a48 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelKosmos.kt @@ -16,6 +16,7 @@  package com.android.systemui.dreams.ui.viewmodel +import com.android.systemui.communal.domain.interactor.communalInteractor  import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor  import com.android.systemui.kosmos.Kosmos  import com.android.systemui.shade.domain.interactor.shadeInteractor @@ -23,6 +24,7 @@ import com.android.systemui.shade.domain.interactor.shadeInteractor  val Kosmos.dreamUserActionsViewModel by      Kosmos.Fixture {          DreamUserActionsViewModel( +            communalInteractor = communalInteractor,              deviceUnlockedInteractor = deviceUnlockedInteractor,              shadeInteractor = shadeInteractor,          )  |