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

Commit a97416f5 authored by Andrew Xu's avatar Andrew Xu Committed by Android (Google) Code Review
Browse files

Merge "Fix Kosmos DynamicIconTilesViewModel" into main

parents 1335dcb3 4f400448
Loading
Loading
Loading
Loading
+25 −6
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.compose.modifiers.resIdToTestTag
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.haptics.msdl.tileHapticsViewModelFactoryProvider
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
@@ -53,9 +54,13 @@ import com.android.systemui.qs.composefragment.dagger.usingMediaInComposeFragmen
import com.android.systemui.qs.flags.QsEditModeTabs
import com.android.systemui.qs.panels.data.repository.defaultLargeTilesRepository
import com.android.systemui.qs.panels.domain.interactor.iconTilesInteractor
import com.android.systemui.qs.panels.ui.compose.infinitegrid.infiniteGridLayout
import com.android.systemui.qs.panels.ui.viewmodel.dynamicIconTilesViewModel
import com.android.systemui.qs.panels.ui.compose.infinitegrid.InfiniteGridLayout
import com.android.systemui.qs.panels.ui.viewmodel.detailsViewModel
import com.android.systemui.qs.panels.ui.viewmodel.InfiniteGridViewModel
import com.android.systemui.qs.panels.ui.viewmodel.editModeViewModel
import com.android.systemui.qs.panels.ui.viewmodel.iconTilesViewModel
import com.android.systemui.qs.panels.ui.viewmodel.infiniteGridViewModelFactory
import com.android.systemui.qs.panels.ui.viewmodel.textFeedbackContentViewModelFactory
import com.android.systemui.qs.pipeline.domain.interactor.currentTilesInteractor
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.android.systemui.testKosmos
@@ -79,7 +84,23 @@ class InfiniteGridLayoutEditTileGridTest(flags: FlagsParameterization) : SysuiTe

    private val kosmos = testKosmos().useUnconfinedTestDispatcher()

    private val Kosmos.underTest by Kosmos.Fixture { infiniteGridLayout }
    private val Kosmos.viewModelUnderTest by Kosmos.Fixture {
        infiniteGridViewModelFactory.create()
    }

    private val Kosmos.underTest by Kosmos.Fixture {
        InfiniteGridLayout(
            detailsViewModel,
            iconTilesViewModel,
            viewModelFactory = object : InfiniteGridViewModel.Factory {
                override fun create(): InfiniteGridViewModel {
                    return viewModelUnderTest
                }
            },
            textFeedbackContentViewModelFactory,
            tileHapticsViewModelFactoryProvider,
        )
    }

    @Before
    fun setUp() {
@@ -303,8 +324,6 @@ class InfiniteGridLayoutEditTileGridTest(flags: FlagsParameterization) : SysuiTe
            // Perform second undo
            composeRule.onNodeWithContentDescription("Undo").performClick()
            assertLargeTiles(setOf("internet", "bt", "dnd", "cast"))
            assertThat(dynamicIconTilesViewModel.largeTilesState.value.map { it.spec })
                .containsExactly("internet", "bt", "dnd", "cast")
        }

    @Test
@@ -372,7 +391,7 @@ class InfiniteGridLayoutEditTileGridTest(flags: FlagsParameterization) : SysuiTe

    private fun assertLargeTiles(largeSpecs: Set<String>) =
        kosmos.run {
            assertThat(dynamicIconTilesViewModel.largeTilesState.value.map { it.spec })
            assertThat(viewModelUnderTest.iconTilesViewModel.largeTilesState.value.map { it.spec })
                .containsExactlyElementsIn(largeSpecs)
        }

+28 −12
Original line number Diff line number Diff line
@@ -30,7 +30,11 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.compose.modifiers.resIdToTestTag
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.jank.interactionJankMonitor
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.qs.composefragment.dagger.usingMediaInComposeFragment
import com.android.systemui.qs.pipeline.domain.interactor.currentTilesInteractor
import com.android.systemui.qs.pipeline.shared.TileSpec
import com.android.systemui.qs.ui.viewmodel.quickSettingsSceneContentViewModelFactory
import com.android.systemui.qs.ui.viewmodel.quickSettingsUserActionsViewModelFactory
import com.android.systemui.scene.session.shared.SessionStorage
@@ -42,7 +46,8 @@ import com.android.systemui.statusbar.notification.stack.ui.view.NotificationScr
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModelFactory
import com.android.systemui.statusbar.phone.ui.tintedIconManagerFactory
import com.android.systemui.testKosmos
import org.junit.Ignore
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -53,13 +58,14 @@ import org.mockito.Mockito.mock
@TestableLooper.RunWithLooper
@EnableSceneContainer
class QuickSettingsSceneTest : SysuiTestCase() {
    @get:Rule val composeTestRule = createComposeRule()
    @get:Rule
    val composeTestRule = createComposeRule()

    private val kosmos = testKosmos()

    @OptIn(ExperimentalCoroutinesApi::class)
    @Test
    @Ignore("http://b/425752706")
    fun testViewHierarchy() {
    fun testViewHierarchy() = kosmos.runTest {
        val shadeSession =
            object : SaveableSession, Session by Session(SessionStorage()) {
                @Composable
@@ -71,22 +77,31 @@ class QuickSettingsSceneTest : SysuiTestCase() {
                ): T = rememberSession(key, inputs = inputs, init = init)
            }

        kosmos.usingMediaInComposeFragment = true
        usingMediaInComposeFragment = true

        currentTilesInteractor.setTiles(
            listOf(
                TileSpec.create("internet"),
                TileSpec.create("bt"),
            )
        )

        testScope.runCurrent()

        val scene =
            QuickSettingsScene(
                shadeSession = shadeSession,
                notificationStackScrollView = { mock(NotificationScrollView::class.java) },
                notificationsPlaceholderViewModelFactory =
                    kosmos.notificationsPlaceholderViewModelFactory,
                actionsViewModelFactory = kosmos.quickSettingsUserActionsViewModelFactory,
                contentViewModelFactory = kosmos.quickSettingsSceneContentViewModelFactory,
                jankMonitor = kosmos.interactionJankMonitor,
                    notificationsPlaceholderViewModelFactory,
                actionsViewModelFactory = quickSettingsUserActionsViewModelFactory,
                contentViewModelFactory = quickSettingsSceneContentViewModelFactory,
                jankMonitor = interactionJankMonitor,
            )

        composeTestRule.setContent {
            PlatformTheme {
                WithStatusIconContext(kosmos.tintedIconManagerFactory) {
                WithStatusIconContext(tintedIconManagerFactory) {
                    with(scene) {
                        TestContentScope(currentScene = Scenes.QuickSettings) { Content(Modifier) }
                    }
@@ -99,7 +114,8 @@ class QuickSettingsSceneTest : SysuiTestCase() {
        // Verify that the brightness slider exists.
        composeTestRule.onNodeWithTag(resIdToTestTag("brightness_slider")).assertExists()

        // Verify that the tile grid exists.
        composeTestRule.onNodeWithTag(resIdToTestTag("quick_settings_panel")).assertExists()
        // Verify that the tiles exist.
        composeTestRule.onNodeWithTag("element:internet").assertExists()
        composeTestRule.onNodeWithTag("element:bt").assertExists()
    }
}
+5 −10
Original line number Diff line number Diff line
@@ -19,16 +19,11 @@ package com.android.systemui.qs.panels.ui.viewmodel
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.qs.panels.domain.interactor.dynamicIconTilesInteractorFactory

val Kosmos.dynamicIconTilesViewModel by
    Kosmos.Fixture {
        DynamicIconTilesViewModel(dynamicIconTilesInteractorFactory, iconTilesViewModel)
    }

val Kosmos.dynamicIconTilesViewModelFactory by
Kosmos.Fixture {
    object : DynamicIconTilesViewModel.Factory {
        override fun create(): DynamicIconTilesViewModel {
                return dynamicIconTilesViewModel
            return DynamicIconTilesViewModel(dynamicIconTilesInteractorFactory, iconTilesViewModel)
        }
    }
}