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

Commit de8379f2 authored by Ale Nijamkin's avatar Ale Nijamkin Committed by Michael Mikhail
Browse files

[flexiglass] Flexi depends on mediaInCompose

Fix: 435249764
Test: made sure that turning on the scene_container flag wasn't enough
to turn on flexi but also turning on media_controls_in_compose did turn
on flexiglass
Flag: com.android.systemui.scene_container

Change-Id: I36b513e1d983f5ea46dd72abee29086c1dfd6832
parent 31f04d4d
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -36,8 +36,8 @@ import com.android.systemui.keyguard.shared.model.DozeTransitionModel
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.data.repository.mediaFilterRepository
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.remedia.data.repository.mediaPipelineRepository
import com.android.systemui.shade.data.repository.shadeRepository
import com.android.systemui.statusbar.notification.data.repository.activeNotificationListRepository
import com.android.systemui.statusbar.notification.data.repository.setActiveNotifs
@@ -120,7 +120,7 @@ class KeyguardClockInteractorTest : SysuiTestCase() {
            val value by collectLastValue(underTest.clockSize)
            kosmos.shadeRepository.setShadeLayoutWide(false)
            val userMedia = MediaData().copy(active = true)
            kosmos.mediaFilterRepository.addCurrentUserMediaEntry(userMedia)
            kosmos.mediaPipelineRepository.addCurrentUserMediaEntry(userMedia)

            assertThat(value).isEqualTo(ClockSize.SMALL)
        }
@@ -132,7 +132,7 @@ class KeyguardClockInteractorTest : SysuiTestCase() {
            val value by collectLastValue(underTest.clockSize)
            val userMedia = MediaData().copy(active = true)
            kosmos.shadeRepository.setShadeLayoutWide(true)
            kosmos.mediaFilterRepository.addCurrentUserMediaEntry(userMedia)
            kosmos.mediaPipelineRepository.addCurrentUserMediaEntry(userMedia)
            kosmos.keyguardRepository.setIsDozing(false)

            assertThat(value).isEqualTo(ClockSize.SMALL)
@@ -156,7 +156,7 @@ class KeyguardClockInteractorTest : SysuiTestCase() {
            val value by collectLastValue(underTest.clockSize)
            val userMedia = MediaData().copy(active = true)
            kosmos.shadeRepository.setShadeLayoutWide(true)
            kosmos.mediaFilterRepository.addCurrentUserMediaEntry(userMedia)
            kosmos.mediaPipelineRepository.addCurrentUserMediaEntry(userMedia)
            kosmos.keyguardRepository.setIsDozing(true)

            assertThat(value).isEqualTo(ClockSize.LARGE)
@@ -170,7 +170,7 @@ class KeyguardClockInteractorTest : SysuiTestCase() {
            val userMedia = MediaData().copy(active = true)
            kosmos.fakeKeyguardClockRepository.setSelectedClockSize(ClockSizeSetting.SMALL)
            kosmos.shadeRepository.setShadeLayoutWide(true)
            kosmos.mediaFilterRepository.addCurrentUserMediaEntry(userMedia)
            kosmos.mediaPipelineRepository.addCurrentUserMediaEntry(userMedia)
            kosmos.keyguardRepository.setIsDozing(true)

            assertThat(value).isEqualTo(ClockSize.SMALL)
+3 −3
Original line number Diff line number Diff line
@@ -24,8 +24,8 @@ import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.media.controls.data.repository.mediaFilterRepository
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.remedia.data.repository.mediaPipelineRepository
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import org.junit.Before
@@ -57,7 +57,7 @@ class KeyguardMediaViewModelTest : SysuiTestCase() {
        kosmos.runTest {
            val userMedia = MediaData(active = true)

            mediaFilterRepository.addCurrentUserMediaEntry(userMedia)
            mediaPipelineRepository.addCurrentUserMediaEntry(userMedia)
            keyguardRepository.setIsDozing(true)

            assertThat(underTest.isMediaVisible).isFalse()
@@ -68,7 +68,7 @@ class KeyguardMediaViewModelTest : SysuiTestCase() {
        kosmos.runTest {
            val userMedia = MediaData(active = true)

            mediaFilterRepository.addCurrentUserMediaEntry(userMedia)
            mediaPipelineRepository.addCurrentUserMediaEntry(userMedia)
            keyguardRepository.setIsDozing(false)

            assertThat(underTest.isMediaVisible).isTrue()
+6 −9
Original line number Diff line number Diff line
@@ -21,11 +21,10 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.data.repository.MediaFilterRepository
import com.android.systemui.media.controls.data.repository.mediaFilterRepository
import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor
import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.remedia.data.repository.mediaPipelineRepository
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runTest
@@ -39,9 +38,7 @@ class MediaCarouselInteractorTest : SysuiTestCase() {

    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope

    private val mediaFilterRepository: MediaFilterRepository =
        with(kosmos) { mediaFilterRepository }
    private val mediaPipelineRepository = kosmos.mediaPipelineRepository

    private val underTest: MediaCarouselInteractor = kosmos.mediaCarouselInteractor

@@ -57,13 +54,13 @@ class MediaCarouselInteractorTest : SysuiTestCase() {

            val userMedia = MediaData(active = true)

            mediaFilterRepository.addCurrentUserMediaEntry(userMedia)
            mediaPipelineRepository.addCurrentUserMediaEntry(userMedia)

            assertThat(hasActiveMedia).isTrue()
            assertThat(underTest.hasActiveMedia()).isTrue()
            assertThat(underTest.hasAnyMedia()).isTrue()

            mediaFilterRepository.addCurrentUserMediaEntry(userMedia.copy(active = false))
            mediaPipelineRepository.addCurrentUserMediaEntry(userMedia.copy(active = false))

            assertThat(hasActiveMedia).isFalse()
            assertThat(underTest.hasActiveMedia()).isFalse()
@@ -78,13 +75,13 @@ class MediaCarouselInteractorTest : SysuiTestCase() {
            val userMedia = MediaData(active = false)
            val instanceId = userMedia.instanceId

            mediaFilterRepository.addCurrentUserMediaEntry(userMedia)
            mediaPipelineRepository.addCurrentUserMediaEntry(userMedia)

            assertThat(hasActiveMedia).isFalse()
            assertThat(underTest.hasActiveMedia()).isFalse()
            assertThat(underTest.hasAnyMedia()).isTrue()

            assertThat(mediaFilterRepository.removeCurrentUserMediaEntry(instanceId, userMedia))
            assertThat(mediaPipelineRepository.removeCurrentUserMediaEntry(instanceId, userMedia))
                .isTrue()

            assertThat(hasActiveMedia).isFalse()
+6 −6
Original line number Diff line number Diff line
@@ -35,8 +35,8 @@ import com.android.systemui.kosmos.runCurrent
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.media.controls.data.repository.mediaFilterRepository
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.remedia.data.repository.mediaPipelineRepository
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
import com.android.systemui.power.domain.interactor.powerInteractor
@@ -150,7 +150,7 @@ class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() {
    @Test
    fun showMedia_activeMedia_true() =
        testScope.runTest {
            kosmos.mediaFilterRepository.addCurrentUserMediaEntry(MediaData(active = true))
            kosmos.mediaPipelineRepository.addCurrentUserMediaEntry(MediaData(active = true))
            runCurrent()

            assertThat(underTest.showMedia).isTrue()
@@ -159,7 +159,7 @@ class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() {
    @Test
    fun showMedia_InactiveMedia_false() =
        testScope.runTest {
            kosmos.mediaFilterRepository.addCurrentUserMediaEntry(MediaData(active = false))
            kosmos.mediaPipelineRepository.addCurrentUserMediaEntry(MediaData(active = false))
            runCurrent()

            assertThat(underTest.showMedia).isFalse()
@@ -168,8 +168,8 @@ class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() {
    @Test
    fun showMedia_noMedia_false() =
        testScope.runTest {
            kosmos.mediaFilterRepository.addCurrentUserMediaEntry(MediaData(active = true))
            kosmos.mediaFilterRepository.clearCurrentUserMedia()
            kosmos.mediaPipelineRepository.addCurrentUserMediaEntry(MediaData(active = true))
            kosmos.mediaPipelineRepository.clearCurrentUserMedia()
            runCurrent()

            assertThat(underTest.showMedia).isFalse()
@@ -178,7 +178,7 @@ class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() {
    @Test
    fun showMedia_qsDisabled_false() =
        testScope.runTest {
            kosmos.mediaFilterRepository.addCurrentUserMediaEntry(MediaData(active = true))
            kosmos.mediaPipelineRepository.addCurrentUserMediaEntry(MediaData(active = true))
            kosmos.fakeDisableFlagsRepository.disableFlags.update {
                it.copy(disable2 = DISABLE2_QUICK_SETTINGS)
            }
+62 −20
Original line number Diff line number Diff line
@@ -18,10 +18,14 @@ package com.android.systemui.qs.panels.ui.viewmodel

import android.content.res.Configuration
import android.content.res.mainResources
import android.platform.test.flag.junit.FlagsParameterization
import android.platform.test.flag.junit.FlagsParameterization.progressionOf
import androidx.test.filters.SmallTest
import com.android.systemui.Flags
import com.android.systemui.Flags.mediaControlsInCompose
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager.Companion.LOCATION_QQS
@@ -29,8 +33,11 @@ import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager.C
import com.android.systemui.media.controls.ui.controller.MediaLocation
import com.android.systemui.media.controls.ui.controller.mediaHostStatesManager
import com.android.systemui.media.controls.ui.view.MediaHost
import com.android.systemui.media.remedia.data.repository.setHasActiveMedia
import com.android.systemui.media.remedia.ui.compose.MediaUiBehavior
import com.android.systemui.qs.composefragment.dagger.usingMediaInComposeFragment
import com.android.systemui.qs.ui.viewmodel.QuickSettingsContainerViewModel
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.shade.domain.interactor.enableDualShade
import com.android.systemui.shade.domain.interactor.enableSingleShade
import com.android.systemui.shade.domain.interactor.enableSplitShade
@@ -41,6 +48,7 @@ import kotlin.test.Test
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Assume
import org.junit.Before
import org.junit.runner.RunWith
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
@@ -49,19 +57,33 @@ import platform.test.runner.parameterized.Parameters
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(ParameterizedAndroidJunit4::class)
@SmallTest
class MediaInRowInLandscapeViewModelTest(private val testData: TestData) : SysuiTestCase() {
class MediaInRowInLandscapeViewModelTest(
    private val testData: TestData,
    flags: FlagsParameterization,
) : SysuiTestCase() {

    init {
        mSetFlagsRule.setFlagsParameterization(flags)
    }

    private val kosmos = testKosmos().apply { usingMediaInComposeFragment = testData.usingMedia }

    private val underTest by lazy {
        kosmos.mediaInRowInLandscapeViewModelFactory.create(
            TESTED_MEDIA_LOCATION,
            TESTED_MEDIA_BEHAVIOR,
    private val Kosmos.underTest by
        Kosmos.Fixture {
            mediaInRowInLandscapeViewModelFactory.create(
                testData.mediaLocation,
                toMediaBehavior(testData.mediaLocation),
            )
        }

    @Before
    fun setUp() {
        // Skip this test if SceneContainerFlag is disabled and testData.shadeMode is Dual
        Assume.assumeFalse(
            "Skipping test: Dual shade requires SceneContainerFlag to be enabled.",
            !SceneContainerFlag.isEnabled && testData.shadeMode == ShadeMode.Dual,
        )

        when (testData.shadeMode) {
            ShadeMode.Single -> kosmos.enableSingleShade()
            ShadeMode.Split -> kosmos.enableSplitShade()
@@ -70,7 +92,6 @@ class MediaInRowInLandscapeViewModelTest(private val testData: TestData) : Sysui
    }

    @Test
    @EnableSceneContainer
    fun shouldMediaShowInRow() =
        with(kosmos) {
            testScope.runTest {
@@ -83,16 +104,27 @@ class MediaInRowInLandscapeViewModelTest(private val testData: TestData) : Sysui
                    }
                fakeConfigurationRepository.onConfigurationChange(config)
                mainResources.configuration.updateFrom(config)
                if (mediaControlsInCompose()) {
                    setHasActiveMedia(testData.mediaVisible)
                } else {
                    mediaHostStatesManager.updateHostState(
                        testData.mediaLocation,
                        MediaHost.MediaHostStateHolder().apply { visible = testData.mediaVisible },
                    )
                    runCurrent()
                }

                assertThat(underTest.shouldMediaShowInRow).isEqualTo(testData.mediaInRowExpected)
            }
        }

    private fun toMediaBehavior(@MediaLocation location: Int): MediaUiBehavior {
        return when (location) {
            LOCATION_QS -> QuickSettingsContainerViewModel.mediaUiBehavior
            else -> QuickQuickSettingsViewModel.mediaUiBehavior
        }
    }

    data class TestData(
        val usingMedia: Boolean,
        val shadeMode: ShadeMode,
@@ -107,17 +139,27 @@ class MediaInRowInLandscapeViewModelTest(private val testData: TestData) : Sysui
                    shadeMode == ShadeMode.Single &&
                    orientation == Configuration.ORIENTATION_LANDSCAPE &&
                    screenLayoutLong == Configuration.SCREENLAYOUT_LONG_YES &&
                    mediaVisible &&
                    mediaLocation == TESTED_MEDIA_LOCATION
                    mediaVisible
    }

    companion object {
        private const val TESTED_MEDIA_LOCATION = LOCATION_QS
        private val TESTED_MEDIA_BEHAVIOR = QuickSettingsContainerViewModel.mediaUiBehavior

        @JvmStatic
        @Parameters(name = "{0}")
        fun data(): Collection<TestData> {
        @Parameters(name = "testData={0}, flags={1}")
        fun data(): List<Array<Any>> {
            val allFlagsParameterization =
                progressionOf(Flags.FLAG_MEDIA_CONTROLS_IN_COMPOSE, Flags.FLAG_SCENE_CONTAINER)
            val testDataList = generateTestDataList()
            val allParameters = mutableListOf<Array<Any>>()
            testDataList.map { testData ->
                allFlagsParameterization.map { flagParam ->
                    allParameters.add(arrayOf(testData, flagParam))
                }
            }
            return allParameters
        }

        private fun generateTestDataList(): Collection<TestData> {
            val usingMediaValues = setOf(true, false)
            val shadeModeValues = setOf(ShadeMode.Single, ShadeMode.Split, ShadeMode.Dual)
            val orientationValues =
Loading