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

Commit 4b616b1d authored by Justin Weir's avatar Justin Weir
Browse files

Parameterize communal hub tests for scene container flag

Parameterizes GlanceableHubContainerControllerTest and
CommunalViewModelTest for the top level scene container flag.

Bug: 334874076
Test: ran affected tests
Flag: ACONFIG com.android.systemui.scene_container DEVELOPMENT
Change-Id: I70ba153fc81010bd82727073b2304f40473df01a
parent 04103ccf
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -20,9 +20,9 @@ import android.app.smartspace.SmartspaceTarget
import android.appwidget.AppWidgetProviderInfo
import android.content.pm.UserInfo
import android.os.UserHandle
import android.platform.test.flag.junit.FlagsParameterization
import android.provider.Settings
import android.widget.RemoteViews
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_COMMUNAL_HUB
import com.android.systemui.SysuiTestCase
@@ -41,6 +41,7 @@ import com.android.systemui.communal.ui.viewmodel.CommunalViewModel.Companion.PO
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.flags.Flags.COMMUNAL_SERVICE_ENABLED
import com.android.systemui.flags.andSceneContainer
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
@@ -50,8 +51,9 @@ import com.android.systemui.log.logcatLogBuffer
import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager
import com.android.systemui.media.controls.ui.view.MediaHost
import com.android.systemui.settings.fakeUserTracker
import com.android.systemui.shade.data.repository.fakeShadeRepository
import com.android.systemui.shade.ShadeTestUtil
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shade.shadeTestUtil
import com.android.systemui.smartspace.data.repository.FakeSmartspaceRepository
import com.android.systemui.smartspace.data.repository.fakeSmartspaceRepository
import com.android.systemui.testKosmos
@@ -70,11 +72,13 @@ import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
class CommunalViewModelTest : SysuiTestCase() {
@RunWith(ParameterizedAndroidJunit4::class)
class CommunalViewModelTest(flags: FlagsParameterization?) : SysuiTestCase() {
    @Mock private lateinit var mediaHost: MediaHost
    @Mock private lateinit var user: UserInfo
    @Mock private lateinit var providerInfo: AppWidgetProviderInfo
@@ -88,9 +92,14 @@ class CommunalViewModelTest : SysuiTestCase() {
    private lateinit var smartspaceRepository: FakeSmartspaceRepository
    private lateinit var mediaRepository: FakeCommunalMediaRepository
    private lateinit var userRepository: FakeUserRepository
    private lateinit var shadeTestUtil: ShadeTestUtil

    private lateinit var underTest: CommunalViewModel

    init {
        mSetFlagsRule.setFlagsParameterization(flags!!)
    }

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
@@ -101,6 +110,7 @@ class CommunalViewModelTest : SysuiTestCase() {
        smartspaceRepository = kosmos.fakeSmartspaceRepository
        mediaRepository = kosmos.fakeCommunalMediaRepository
        userRepository = kosmos.fakeUserRepository
        shadeTestUtil = kosmos.shadeTestUtil

        kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true)
        mSetFlagsRule.enableFlags(FLAG_COMMUNAL_HUB)
@@ -274,7 +284,7 @@ class CommunalViewModelTest : SysuiTestCase() {
        testScope.runTest {
            // On keyguard without any shade expansion.
            kosmos.fakeKeyguardRepository.setStatusBarState(StatusBarState.KEYGUARD)
            kosmos.fakeShadeRepository.setLockscreenShadeExpansion(0f)
            shadeTestUtil.setLockscreenShadeExpansion(0f)
            runCurrent()
            assertThat(underTest.canChangeScene()).isTrue()
        }
@@ -284,7 +294,7 @@ class CommunalViewModelTest : SysuiTestCase() {
        testScope.runTest {
            // On keyguard with shade fully expanded.
            kosmos.fakeKeyguardRepository.setStatusBarState(StatusBarState.KEYGUARD)
            kosmos.fakeShadeRepository.setLockscreenShadeExpansion(1f)
            shadeTestUtil.setLockscreenShadeExpansion(1f)
            runCurrent()
            assertThat(underTest.canChangeScene()).isFalse()
        }
@@ -297,5 +307,11 @@ class CommunalViewModelTest : SysuiTestCase() {

    private companion object {
        val MAIN_USER_INFO = UserInfo(0, "primary", UserInfo.FLAG_MAIN)

        @JvmStatic
        @Parameters(name = "{0}")
        fun getParams(): List<FlagsParameterization> {
            return FlagsParameterization.allCombinationsOf().andSceneContainer()
        }
    }
}
+28 −6
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ package com.android.systemui.shade

import android.content.Context
import android.os.PowerManager
import android.testing.AndroidTestingRunner
import android.platform.test.flag.junit.FlagsParameterization
import android.testing.TestableLooper
import android.testing.ViewUtils
import android.view.MotionEvent
@@ -42,6 +42,7 @@ import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.communal.ui.viewmodel.CommunalViewModel
import com.android.systemui.communal.util.CommunalColors
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.andSceneContainer
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
@@ -50,8 +51,10 @@ import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.sceneDataSourceDelegator
import com.android.systemui.shade.data.repository.fakeShadeRepository
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.statusbar.phone.SystemUIDialogFactory
import com.android.systemui.testKosmos
@@ -70,12 +73,14 @@ import org.mockito.Mock
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@ExperimentalCoroutinesApi
@RunWith(AndroidTestingRunner::class)
@RunWith(ParameterizedAndroidJunit4::class)
@TestableLooper.RunWithLooper(setAsMainLooper = true)
@SmallTest
class GlanceableHubContainerControllerTest : SysuiTestCase() {
class GlanceableHubContainerControllerTest(flags: FlagsParameterization?) : SysuiTestCase() {
    private val kosmos: Kosmos =
        testKosmos().apply {
            // UnconfinedTestDispatcher makes testing simpler due to CommunalInteractor flows using
@@ -97,6 +102,10 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {
    private lateinit var communalRepository: FakeCommunalRepository
    private lateinit var underTest: GlanceableHubContainerController

    init {
        mSetFlagsRule.setFlagsParameterization(flags!!)
    }

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
@@ -247,7 +256,7 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {
                goToScene(CommunalScenes.Communal)

                // Shade shows up.
                fakeShadeRepository.setQsExpansion(1.0f)
                shadeTestUtil.setQsExpansion(1.0f)
                testableLooper.processAllMessages()

                // Touch events are not intercepted.
@@ -401,7 +410,7 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {
                goToScene(CommunalScenes.Communal)

                // Shade shows up.
                fakeShadeRepository.setQsExpansion(1.0f)
                shadeTestUtil.setQsExpansion(1.0f)
                testableLooper.processAllMessages()

                assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.STARTED)
@@ -445,6 +454,13 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {
    }

    private fun goToScene(scene: SceneKey) {
        if (SceneContainerFlag.isEnabled) {
            if (scene == CommunalScenes.Communal) {
                kosmos.sceneInteractor.changeScene(Scenes.Communal, "test")
            } else {
                kosmos.sceneInteractor.changeScene(Scenes.Lockscreen, "test")
            }
        }
        communalRepository.changeScene(scene)
        testableLooper.processAllMessages()
    }
@@ -471,5 +487,11 @@ class GlanceableHubContainerControllerTest : SysuiTestCase() {
            MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, CONTAINER_WIDTH.toFloat(), 0f, 0)
        private val MOVE_EVENT = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_MOVE, 0f, 0f, 0)
        private val UP_EVENT = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_UP, 0f, 0f, 0)

        @JvmStatic
        @Parameters(name = "{0}")
        fun getParams(): List<FlagsParameterization> {
            return FlagsParameterization.allCombinationsOf().andSceneContainer()
        }
    }
}
+43 −2
Original line number Diff line number Diff line
@@ -31,6 +31,16 @@ import org.junit.Assert
/** Sets up shade state for tests for either value of the scene container flag. */
class ShadeTestUtil constructor(val delegate: ShadeTestUtilDelegate) {

    /** Sets shade expansion to a value between 0-1. */
    fun setShadeExpansion(shadeExpansion: Float) {
        setShadeAndQsExpansion(shadeExpansion, 0f)
    }

    /** Sets QS expansion to a value between 0-1. */
    fun setQsExpansion(qsExpansion: Float) {
        setShadeAndQsExpansion(0f, qsExpansion)
    }

    /** Sets both shade and QS expansion. One value must be zero or values must add up to 1f. */
    fun setShadeAndQsExpansion(shadeExpansion: Float, qsExpansion: Float) {
        Assert.assertTrue(
@@ -40,15 +50,24 @@ class ShadeTestUtil constructor(val delegate: ShadeTestUtilDelegate) {
        delegate.assertFlagValid()
        delegate.setShadeAndQsExpansionInternal(shadeExpansion, qsExpansion)
    }

    /** Sets the shade expansion on the lockscreen to the given amount from 0-1. */
    fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float) {
        delegate.assertFlagValid()
        delegate.setLockscreenShadeExpansion(lockscreenShadeExpansion)
    }
}

/** Sets up shade state for tests for a specific value of the scene container flag. */
interface ShadeTestUtilDelegate {
    /** Asserts that the scene container flag matches this implementation. */
    fun assertFlagValid()

    /** Sets both shade and QS expansion. One value must be zero or values must add up to 1f. */
    fun setShadeAndQsExpansionInternal(shadeExpansion: Float, qsExpansion: Float)

    /** Asserts that the scene container flag matches this implementation. */
    fun assertFlagValid()
    /** Sets the shade expansion on the lockscreen to the given amount from 0-1. */
    fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float)
}

/** Sets up shade state for tests when the scene container flag is disabled. */
@@ -60,6 +79,10 @@ class ShadeTestUtilLegacyImpl(val testScope: TestScope, val shadeRepository: Fak
        testScope.runCurrent()
    }

    override fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float) {
        shadeRepository.setLockscreenShadeExpansion(lockscreenShadeExpansion)
    }

    override fun assertFlagValid() {
        Assert.assertFalse(SceneContainerFlag.isEnabled)
    }
@@ -78,6 +101,24 @@ class ShadeTestUtilSceneImpl(val testScope: TestScope, val sceneInteractor: Scen
        }
    }

    override fun setLockscreenShadeExpansion(lockscreenShadeExpansion: Float) {
        if (lockscreenShadeExpansion == 0f) {
            setIdleScene(Scenes.Lockscreen)
        } else if (lockscreenShadeExpansion == 1f) {
            setIdleScene(Scenes.Shade)
        } else {
            setTransitionProgress(Scenes.Lockscreen, Scenes.Shade, lockscreenShadeExpansion)
        }
    }

    private fun setIdleScene(scene: SceneKey) {
        sceneInteractor.changeScene(scene, "test")
        val transitionState =
            MutableStateFlow<ObservableTransitionState>(ObservableTransitionState.Idle(scene))
        sceneInteractor.setTransitionState(transitionState)
        testScope.runCurrent()
    }

    private fun setTransitionProgress(from: SceneKey, to: SceneKey, progress: Float) {
        sceneInteractor.changeScene(from, "test")
        val transitionState =