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

Commit 7528ad84 authored by Steve Elliott's avatar Steve Elliott Committed by Android (Google) Code Review
Browse files

Merge "[flexiglass] Factor out HomeSceneFamilyResolver" into main

parents 55fc7d7e 8b835924
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -30,7 +30,9 @@ import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.homeSceneFamilyResolver
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.SceneFamilies
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.ui.viewmodel.notificationsShadeSceneViewModel
import com.android.systemui.testKosmos
@@ -62,7 +64,9 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() {
            val destinationScenes by collectLastValue(underTest.destinationScenes)
            lockDevice()

            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(Scenes.Lockscreen)
            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home)
            assertThat(kosmos.homeSceneFamilyResolver.resolvedScene.value)
                .isEqualTo(Scenes.Lockscreen)
        }

    @Test
@@ -72,7 +76,8 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() {
            lockDevice()
            unlockDevice()

            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(Scenes.Gone)
            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home)
            assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Gone)
        }

    @Test
@@ -85,7 +90,9 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() {
            )
            sceneInteractor.changeScene(Scenes.Lockscreen, "reason")

            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(Scenes.Lockscreen)
            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home)
            assertThat(kosmos.homeSceneFamilyResolver.resolvedScene.value)
                .isEqualTo(Scenes.Lockscreen)
        }

    @Test
@@ -96,10 +103,12 @@ class NotificationsShadeSceneViewModelTest : SysuiTestCase() {
            kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
                AuthenticationMethodModel.None
            )
            sceneInteractor // force the lazy; this will kick off StateFlows
            runCurrent()
            sceneInteractor.changeScene(Scenes.Gone, "reason")

            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(Scenes.Gone)
            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home)
            assertThat(kosmos.homeSceneFamilyResolver.resolvedScene.value).isEqualTo(Scenes.Gone)
        }

    private fun TestScope.lockDevice() {
+14 −11
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import com.android.systemui.authentication.data.repository.fakeAuthenticationRep
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
@@ -36,16 +35,17 @@ import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintA
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.data.repository.mediaFilterRepository
import com.android.systemui.media.controls.domain.pipeline.MediaDataManager
import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.qs.FooterActionsController
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel
import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.homeSceneFamilyResolver
import com.android.systemui.scene.domain.interactor.sceneBackInteractor
import com.android.systemui.scene.domain.interactor.sceneContainerStartable
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.SceneFamilies
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.settings.brightness.ui.viewmodel.brightnessMirrorViewModel
import com.android.systemui.shade.ui.viewmodel.shadeHeaderViewModel
@@ -55,7 +55,6 @@ import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
@@ -82,11 +81,8 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
    private val sceneBackInteractor = kosmos.sceneBackInteractor
    private val sceneContainerStartable = kosmos.sceneContainerStartable

    private val mediaDataManager = mock<MediaDataManager>()

    private lateinit var underTest: QuickSettingsSceneViewModel

    @OptIn(ExperimentalCoroutinesApi::class)
    @Before
    fun setUp() {
        kosmos.fakeFeatureFlagsClassic.set(Flags.NEW_NETWORK_SLICE_UI, false)
@@ -95,7 +91,6 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
        underTest =
            QuickSettingsSceneViewModel(
                applicationScope = testScope.backgroundScope,
                deviceEntryInteractor = kosmos.deviceEntryInteractor,
                brightnessMirrorViewModel = kosmos.brightnessMirrorViewModel,
                shadeHeaderViewModel = kosmos.shadeHeaderViewModel,
                qsSceneAdapter = qsFlexiglassAdapter,
@@ -112,6 +107,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
        testScope.runTest {
            overrideResource(R.bool.config_use_split_notification_shade, false)
            val destinations by collectLastValue(underTest.destinationScenes)
            val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene)
            qsFlexiglassAdapter.setCustomizing(false)
            kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
                AuthenticationMethodModel.Pin
@@ -128,9 +124,10 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
                        Swipe(
                            fromSource = Edge.Bottom,
                            direction = SwipeDirection.Up,
                        ) to UserActionResult(Scenes.Gone)
                        ) to UserActionResult(SceneFamilies.Home)
                    )
                )
            assertThat(homeScene).isEqualTo(Scenes.Gone)
        }

    @Test
@@ -142,6 +139,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {

            val currentScene by collectLastValue(sceneInteractor.currentScene)
            val backScene by collectLastValue(sceneBackInteractor.backScene)
            val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene)
            sceneInteractor.changeScene(Scenes.Lockscreen, "reason")
            sceneInteractor.changeScene(Scenes.QuickSettings, "reason")
            assertThat(currentScene).isEqualTo(Scenes.QuickSettings)
@@ -155,9 +153,10 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
                        Swipe(
                            fromSource = Edge.Bottom,
                            direction = SwipeDirection.Up,
                        ) to UserActionResult(Scenes.Lockscreen)
                        ) to UserActionResult(SceneFamilies.Home)
                    )
                )
            assertThat(homeScene).isEqualTo(Scenes.Lockscreen)
        }

    @Test
@@ -165,6 +164,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
        testScope.runTest {
            overrideResource(R.bool.config_use_split_notification_shade, false)
            val destinations by collectLastValue(underTest.destinationScenes)
            val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene)
            qsFlexiglassAdapter.setCustomizing(false)
            kosmos.fakeDeviceEntryRepository.setLockscreenEnabled(true)
            kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
@@ -179,9 +179,10 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
                        Swipe(
                            fromSource = Edge.Bottom,
                            direction = SwipeDirection.Up,
                        ) to UserActionResult(Scenes.Lockscreen)
                        ) to UserActionResult(SceneFamilies.Home)
                    )
                )
            assertThat(homeScene).isEqualTo(Scenes.Lockscreen)
        }

    @Test
@@ -199,6 +200,7 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
        testScope.runTest {
            overrideResource(R.bool.config_use_split_notification_shade, true)
            val destinations by collectLastValue(underTest.destinationScenes)
            val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene)
            qsFlexiglassAdapter.setCustomizing(false)
            kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
                AuthenticationMethodModel.Pin
@@ -215,9 +217,10 @@ class QuickSettingsSceneViewModelTest : SysuiTestCase() {
                        Swipe(
                            fromSource = Edge.Bottom,
                            direction = SwipeDirection.Up,
                        ) to UserActionResult(Scenes.Gone),
                        ) to UserActionResult(SceneFamilies.Home)
                    )
                )
            assertThat(homeScene).isEqualTo(Scenes.Gone)
        }

    @Test
+14 −4
Original line number Diff line number Diff line
@@ -30,7 +30,9 @@ import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.homeSceneFamilyResolver
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.SceneFamilies
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.ui.viewmodel.quickSettingsShadeSceneViewModel
import com.android.systemui.testKosmos
@@ -60,38 +62,45 @@ class QuickSettingsShadeSceneViewModelTest : SysuiTestCase() {
    fun upTransitionSceneKey_deviceLocked_lockscreen() =
        testScope.runTest {
            val destinationScenes by collectLastValue(underTest.destinationScenes)
            val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene)
            lockDevice()

            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(Scenes.Lockscreen)
            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home)
            assertThat(homeScene).isEqualTo(Scenes.Lockscreen)
        }

    @Test
    fun upTransitionSceneKey_deviceUnlocked_gone() =
        testScope.runTest {
            val destinationScenes by collectLastValue(underTest.destinationScenes)
            val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene)
            lockDevice()
            unlockDevice()

            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(Scenes.Gone)
            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home)
            assertThat(homeScene).isEqualTo(Scenes.Gone)
        }

    @Test
    fun upTransitionSceneKey_authMethodSwipe_lockscreenNotDismissed_goesToLockscreen() =
        testScope.runTest {
            val destinationScenes by collectLastValue(underTest.destinationScenes)
            val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene)
            kosmos.fakeDeviceEntryRepository.setLockscreenEnabled(true)
            kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
                AuthenticationMethodModel.None
            )
            sceneInteractor.changeScene(Scenes.Lockscreen, "reason")

            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(Scenes.Lockscreen)
            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home)
            assertThat(homeScene).isEqualTo(Scenes.Lockscreen)
        }

    @Test
    fun upTransitionSceneKey_authMethodSwipe_lockscreenDismissed_goesToGone() =
        testScope.runTest {
            val destinationScenes by collectLastValue(underTest.destinationScenes)
            val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene)
            kosmos.fakeDeviceEntryRepository.setLockscreenEnabled(true)
            kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
                AuthenticationMethodModel.None
@@ -99,7 +108,8 @@ class QuickSettingsShadeSceneViewModelTest : SysuiTestCase() {
            runCurrent()
            sceneInteractor.changeScene(Scenes.Gone, "reason")

            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(Scenes.Gone)
            assertThat(destinationScenes?.get(Swipe.Up)?.toScene).isEqualTo(SceneFamilies.Home)
            assertThat(homeScene).isEqualTo(Scenes.Gone)
        }

    private fun TestScope.lockDevice() {
+10 −9
Original line number Diff line number Diff line
@@ -51,7 +51,6 @@ import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.ui.viewmodel.KeyguardLongPressViewModel
import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.domain.pipeline.MediaDataManager
import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
@@ -59,8 +58,10 @@ import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.qs.footerActionsController
import com.android.systemui.qs.footerActionsViewModelFactory
import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter
import com.android.systemui.scene.domain.interactor.homeSceneFamilyResolver
import com.android.systemui.scene.domain.interactor.sceneContainerStartable
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.SceneFamilies
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.fakeSceneDataSource
import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel
@@ -91,7 +92,6 @@ import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations

@@ -169,8 +169,6 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {

    private val qsFlexiglassAdapter = FakeQSSceneAdapter(inflateDelegate = { mock() })

    @Mock private lateinit var mediaDataManager: MediaDataManager

    private lateinit var emergencyAffordanceManager: EmergencyAffordanceManager
    private lateinit var telecomManager: TelecomManager
    private val fakeSceneDataSource = kosmos.fakeSceneDataSource
@@ -205,7 +203,6 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
        shadeSceneViewModel =
            ShadeSceneViewModel(
                applicationScope = testScope.backgroundScope,
                deviceEntryInteractor = deviceEntryInteractor,
                shadeHeaderViewModel = kosmos.shadeHeaderViewModel,
                qsSceneAdapter = qsFlexiglassAdapter,
                notifications = kosmos.notificationsPlaceholderViewModel,
@@ -280,6 +277,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
    fun swipeUpOnShadeScene_withAuthMethodSwipe_lockscreenNotDismissed_goesToLockscreen() =
        testScope.runTest {
            val destinationScenes by collectLastValue(shadeSceneViewModel.destinationScenes)
            val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene)
            setAuthMethod(AuthenticationMethodModel.None, enableLockscreen = true)
            assertCurrentScene(Scenes.Lockscreen)

@@ -288,9 +286,10 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
            assertCurrentScene(Scenes.Shade)

            val upDestinationSceneKey = destinationScenes?.get(Swipe.Up)?.toScene
            assertThat(upDestinationSceneKey).isEqualTo(Scenes.Lockscreen)
            assertThat(upDestinationSceneKey).isEqualTo(SceneFamilies.Home)
            assertThat(homeScene).isEqualTo(Scenes.Lockscreen)
            emulateUserDrivenTransition(
                to = upDestinationSceneKey,
                to = homeScene,
            )
        }

@@ -299,6 +298,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
        testScope.runTest {
            val destinationScenes by collectLastValue(shadeSceneViewModel.destinationScenes)
            val canSwipeToEnter by collectLastValue(deviceEntryInteractor.canSwipeToEnter)
            val homeScene by collectLastValue(kosmos.homeSceneFamilyResolver.resolvedScene)

            setAuthMethod(AuthenticationMethodModel.None, enableLockscreen = true)

@@ -314,9 +314,10 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
            assertCurrentScene(Scenes.Shade)

            val upDestinationSceneKey = destinationScenes?.get(Swipe.Up)?.toScene
            assertThat(upDestinationSceneKey).isEqualTo(Scenes.Gone)
            assertThat(upDestinationSceneKey).isEqualTo(SceneFamilies.Home)
            assertThat(homeScene).isEqualTo(Scenes.Gone)
            emulateUserDrivenTransition(
                to = upDestinationSceneKey,
                to = homeScene,
            )
        }

+42 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.scene.data.repository.sceneContainerRepository
import com.android.systemui.scene.sceneContainerConfig
import com.android.systemui.scene.sceneKeys
import com.android.systemui.scene.shared.model.SceneContainerConfig
import com.android.systemui.scene.shared.model.SceneFamilies
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.fakeSceneDataSource
import com.android.systemui.testKosmos
@@ -38,6 +39,7 @@ import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.toList
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Test
@@ -150,6 +152,18 @@ class SceneInteractorTest : SysuiTestCase() {
            assertThat(currentScene).isEqualTo(Scenes.Gone)
        }

    @Test
    fun changeScene_toHomeSceneFamily() =
        testScope.runTest {
            underTest = kosmos.sceneInteractor
            val currentScene by collectLastValue(underTest.currentScene)

            underTest.changeScene(SceneFamilies.Home, "reason")
            runCurrent()

            assertThat(currentScene).isEqualTo(kosmos.homeSceneFamilyResolver.resolvedScene.value)
        }

    @Test
    fun snapToScene_toUnknownScene_doesNothing() =
        testScope.runTest {
@@ -215,6 +229,18 @@ class SceneInteractorTest : SysuiTestCase() {
            underTest.snapToScene(Scenes.Gone, "reason")
        }

    @Test
    fun snapToScene_toHomeSceneFamily() =
        testScope.runTest {
            underTest = kosmos.sceneInteractor
            val currentScene by collectLastValue(underTest.currentScene)

            underTest.snapToScene(SceneFamilies.Home, "reason")
            runCurrent()

            assertThat(currentScene).isEqualTo(kosmos.homeSceneFamilyResolver.resolvedScene.value)
        }

    @Test
    fun sceneChanged_inDataSource() =
        testScope.runTest {
@@ -428,4 +454,20 @@ class SceneInteractorTest : SysuiTestCase() {

            assertThat(isVisible).isFalse()
        }

    @Test
    fun resolveSceneFamily_home() =
        testScope.runTest {
            underTest = kosmos.sceneInteractor
            assertThat(underTest.resolveSceneFamily(SceneFamilies.Home))
                .isEqualTo(kosmos.homeSceneFamilyResolver.resolvedScene)
        }

    @Test
    fun resolveSceneFamily_nonFamily() =
        testScope.runTest {
            underTest = kosmos.sceneInteractor
            val resolved = underTest.resolveSceneFamily(Scenes.Gone).toList()
            assertThat(resolved).containsExactly(Scenes.Gone).inOrder()
        }
}
Loading