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

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

Merge "Fix test when home controls hsum flag enabled" into main

parents 974b4830 154d5562
Loading
Loading
Loading
Loading
+77 −57
Original line number Diff line number Diff line
@@ -23,89 +23,87 @@ import android.content.pm.ServiceInfo
import android.content.pm.UserInfo
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.FlagsParameterization
import android.service.controls.flags.Flags.FLAG_HOME_PANEL_DREAM
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_HOME_CONTROLS_DREAM_HSUM
import com.android.systemui.Flags.homeControlsDreamHsum
import com.android.systemui.SysuiTestCase
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.dagger.ControlsComponent
import com.android.systemui.controls.management.ControlsListingController
import com.android.systemui.controls.panels.AuthorizedPanelsRepository
import com.android.systemui.controls.panels.SelectedComponentRepository
import com.android.systemui.controls.panels.authorizedPanelsRepository
import com.android.systemui.controls.panels.selectedComponentRepository
import com.android.systemui.dreams.homecontrols.system.HomeControlsDreamStartable
import com.android.systemui.dreams.homecontrols.system.domain.interactor.HomeControlsComponentInteractor
import com.android.systemui.dreams.homecontrols.system.domain.interactor.controlsComponent
import com.android.systemui.dreams.homecontrols.system.domain.interactor.controlsListingController
import com.android.systemui.dreams.homecontrols.system.domain.interactor.homeControlsComponentInteractor
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.settings.fakeUserTracker
import com.android.systemui.settings.userTracker
import com.android.systemui.testKosmos
import com.android.systemui.user.data.repository.FakeUserRepository
import com.android.systemui.user.data.repository.fakeUserRepository
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.whenever
import java.util.Optional
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
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

import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.stub
import org.mockito.kotlin.whenever
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
class HomeControlsDreamStartableTest : SysuiTestCase() {
@RunWith(ParameterizedAndroidJunit4::class)
class HomeControlsDreamStartableTest(flags: FlagsParameterization) : SysuiTestCase() {
    init {
        mSetFlagsRule.setFlagsParameterization(flags)
    }

    private val kosmos = testKosmos()

    @Mock private lateinit var packageManager: PackageManager

    private lateinit var homeControlsComponentInteractor: HomeControlsComponentInteractor
    private lateinit var selectedComponentRepository: SelectedComponentRepository
    private lateinit var authorizedPanelsRepository: AuthorizedPanelsRepository
    private lateinit var userRepository: FakeUserRepository
    private lateinit var controlsComponent: ControlsComponent
    private lateinit var controlsListingController: ControlsListingController

    private lateinit var startable: HomeControlsDreamStartable
    private val componentName = ComponentName(context, HomeControlsDreamService::class.java)
    private val testScope = kosmos.testScope

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
    private val systemUserPackageManager = mock<PackageManager>()
    private val userPackageManager = mock<PackageManager>()

        selectedComponentRepository = kosmos.selectedComponentRepository
        authorizedPanelsRepository = kosmos.authorizedPanelsRepository
        userRepository = kosmos.fakeUserRepository
        controlsComponent = kosmos.controlsComponent
        controlsListingController = kosmos.controlsListingController

        userRepository.setUserInfos(listOf(PRIMARY_USER))

        authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE_PANEL))

        whenever(controlsComponent.getControlsListingController())
            .thenReturn(Optional.of(controlsListingController))
        whenever(controlsListingController.getCurrentServices())
            .thenReturn(listOf(ControlsServiceInfo(TEST_COMPONENT_PANEL, "panel", hasPanel = true)))

        homeControlsComponentInteractor = kosmos.homeControlsComponentInteractor
    private val selectedComponentRepository = kosmos.selectedComponentRepository
    private val userRepository =
        kosmos.fakeUserRepository.apply { setUserInfos(listOf(PRIMARY_USER)) }
    private val controlsListingController =
        kosmos.controlsListingController.stub {
            on { getCurrentServices() } doReturn
                listOf(buildControlsServiceInfo(TEST_COMPONENT_PANEL, "panel", hasPanel = true))
        }
    private val controlsComponent =
        kosmos.controlsComponent.stub {
            on { getControlsListingController() } doReturn Optional.of(controlsListingController)
        }

        startable =
    private val underTest by lazy {
        HomeControlsDreamStartable(
            mContext,
                packageManager,
            systemUserPackageManager,
            kosmos.userTracker,
                homeControlsComponentInteractor,
            kosmos.homeControlsComponentInteractor,
            kosmos.applicationCoroutineScope,
        )
    }
    private val componentName = ComponentName(context, HomeControlsDreamService::class.java)

    @Before
    fun setUp() {
        kosmos.authorizedPanelsRepository.addAuthorizedPanels(setOf(TEST_PACKAGE_PANEL))
        whenever(controlsComponent.getControlsListingController())
            .thenReturn(Optional.of(controlsListingController))
        whenever(kosmos.fakeUserTracker.userContext.packageManager).thenReturn(userPackageManager)
    }

    @Test
    @EnableFlags(FLAG_HOME_PANEL_DREAM)
@@ -113,13 +111,19 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
        testScope.runTest {
            userRepository.setSelectedUserInfo(PRIMARY_USER)
            selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_PANEL)
            startable.start()
            underTest.start()
            runCurrent()
            val packageManager =
                if (homeControlsDreamHsum()) {
                    userPackageManager
                } else {
                    systemUserPackageManager
                }
            verify(packageManager)
                .setComponentEnabledSetting(
                    eq(componentName),
                    eq(PackageManager.COMPONENT_ENABLED_STATE_ENABLED),
                    eq(PackageManager.DONT_KILL_APP),
                    componentName,
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP,
                )
        }

@@ -128,13 +132,19 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
    fun testStartDisablesHomeControlsDreamServiceWhenPanelComponentIsNull() =
        testScope.runTest {
            selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL)
            startable.start()
            underTest.start()
            runCurrent()
            val packageManager =
                if (homeControlsDreamHsum()) {
                    userPackageManager
                } else {
                    systemUserPackageManager
                }
            verify(packageManager)
                .setComponentEnabledSetting(
                    eq(componentName),
                    eq(PackageManager.COMPONENT_ENABLED_STATE_DISABLED),
                    eq(PackageManager.DONT_KILL_APP),
                    componentName,
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                    PackageManager.DONT_KILL_APP,
                )
        }

@@ -143,8 +153,14 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
    fun testStartDisablesDreamServiceWhenFlagIsDisabled() =
        testScope.runTest {
            selectedComponentRepository.setSelectedComponent(TEST_SELECTED_COMPONENT_NON_PANEL)
            startable.start()
            underTest.start()
            runCurrent()
            val packageManager =
                if (homeControlsDreamHsum()) {
                    userPackageManager
                } else {
                    systemUserPackageManager
                }
            verify(packageManager)
                .setComponentEnabledSetting(
                    eq(componentName),
@@ -153,7 +169,7 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
                )
        }

    private fun ControlsServiceInfo(
    private fun buildControlsServiceInfo(
        componentName: ComponentName,
        label: CharSequence,
        hasPanel: Boolean,
@@ -186,6 +202,10 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
    }

    companion object {
        @get:Parameters(name = "{0}")
        @JvmStatic
        val params = FlagsParameterization.allCombinationsOf(FLAG_HOME_CONTROLS_DREAM_HSUM)

        private const val PRIMARY_USER_ID = 0
        private val PRIMARY_USER =
            UserInfo(