Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d1c99778 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix dream -> communal when communal is not available" into main

parents 8a64ce3a 8d5cac62
Loading
Loading
Loading
Loading
+142 −3
Original line number Diff line number Diff line
@@ -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(
+7 −2
Original line number Diff line number Diff line
@@ -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 {
                                if (isCommunalAvailable) {
                                    add(Swipe.Start to Scenes.Communal)
                                }

                                val bouncerOrGone =
                                    if (isDeviceUnlocked) Scenes.Gone else Scenes.Bouncer
+2 −0
Original line number Diff line number Diff line
@@ -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,
        )