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

Commit d30a2c8b authored by Lucas Silva's avatar Lucas Silva
Browse files

Ensure home control dream is enabled in user context

Currently we use the system user's PackageManager to enable/disable the
home controls dream. This change ensures we always use the current
user's package manager instead.

Bug: 370691405
Test: HomeControlsDreamStartableTest
Flag: com.android.systemui.home_controls_dream_hsum
Change-Id: I8768b091a8e53324883afcf16c4f0ede65ffd11c
parent 817196af
Loading
Loading
Loading
Loading
+16 −10
Original line number Diff line number Diff line
@@ -34,9 +34,14 @@ 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.domain.interactor.HomeControlsComponentInteractor
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.userTracker
import com.android.systemui.testKosmos
import com.android.systemui.user.data.repository.FakeUserRepository
import com.android.systemui.user.data.repository.fakeUserRepository
@@ -96,8 +101,9 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
            HomeControlsDreamStartable(
                mContext,
                packageManager,
                kosmos.userTracker,
                homeControlsComponentInteractor,
                kosmos.applicationCoroutineScope
                kosmos.applicationCoroutineScope,
            )
    }

@@ -113,7 +119,7 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
                .setComponentEnabledSetting(
                    eq(componentName),
                    eq(PackageManager.COMPONENT_ENABLED_STATE_ENABLED),
                    eq(PackageManager.DONT_KILL_APP)
                    eq(PackageManager.DONT_KILL_APP),
                )
        }

@@ -128,7 +134,7 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
                .setComponentEnabledSetting(
                    eq(componentName),
                    eq(PackageManager.COMPONENT_ENABLED_STATE_DISABLED),
                    eq(PackageManager.DONT_KILL_APP)
                    eq(PackageManager.DONT_KILL_APP),
                )
        }

@@ -143,14 +149,14 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
                .setComponentEnabledSetting(
                    eq(componentName),
                    eq(PackageManager.COMPONENT_ENABLED_STATE_DISABLED),
                    eq(PackageManager.DONT_KILL_APP)
                    eq(PackageManager.DONT_KILL_APP),
                )
        }

    private fun ControlsServiceInfo(
        componentName: ComponentName,
        label: CharSequence,
        hasPanel: Boolean
        hasPanel: Boolean,
    ): ControlsServiceInfo {
        val serviceInfo =
            ServiceInfo().apply {
@@ -165,7 +171,7 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
        context: Context,
        serviceInfo: ServiceInfo,
        private val label: CharSequence,
        hasPanel: Boolean
        hasPanel: Boolean,
    ) : ControlsServiceInfo(context, serviceInfo) {

        init {
@@ -185,7 +191,7 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
            UserInfo(
                /* id= */ PRIMARY_USER_ID,
                /* name= */ "primary user",
                /* flags= */ UserInfo.FLAG_PRIMARY
                /* flags= */ UserInfo.FLAG_PRIMARY,
            )
        private const val TEST_PACKAGE_PANEL = "pkg.panel"
        private val TEST_COMPONENT_PANEL = ComponentName(TEST_PACKAGE_PANEL, "service")
@@ -193,13 +199,13 @@ class HomeControlsDreamStartableTest : SysuiTestCase() {
            SelectedComponentRepository.SelectedComponent(
                TEST_PACKAGE_PANEL,
                TEST_COMPONENT_PANEL,
                true
                true,
            )
        private val TEST_SELECTED_COMPONENT_NON_PANEL =
            SelectedComponentRepository.SelectedComponent(
                TEST_PACKAGE_PANEL,
                TEST_COMPONENT_PANEL,
                false
                false,
            )
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ import com.android.systemui.controls.dagger.StartControlsStartableModule
import com.android.systemui.dagger.qualifiers.PerUser
import com.android.systemui.dreams.AssistantAttentionMonitor
import com.android.systemui.dreams.DreamMonitor
import com.android.systemui.dreams.homecontrols.HomeControlsDreamStartable
import com.android.systemui.dreams.homecontrols.system.HomeControlsDreamStartable
import com.android.systemui.globalactions.GlobalActionsComponent
import com.android.systemui.haptics.msdl.MSDLCoreStartable
import com.android.systemui.keyboard.KeyboardUI
+15 −5
Original line number Diff line number Diff line
@@ -14,24 +14,28 @@
 * limitations under the License.
 */

package com.android.systemui.dreams.homecontrols
package com.android.systemui.dreams.homecontrols.system

import android.content.ComponentName
import android.content.Context
import android.content.pm.PackageManager
import android.service.controls.flags.Flags.homePanelDream
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.CoreStartable
import com.android.systemui.Flags.homeControlsDreamHsum
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor
import com.android.systemui.dreams.homecontrols.HomeControlsDreamService
import com.android.systemui.dreams.homecontrols.system.domain.interactor.HomeControlsComponentInteractor
import com.android.systemui.settings.UserContextProvider
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import com.android.app.tracing.coroutines.launchTraced as launch

class HomeControlsDreamStartable
@Inject
constructor(
    context: Context,
    private val packageManager: PackageManager,
    private val systemPackageManager: PackageManager,
    private val userContextProvider: UserContextProvider,
    private val homeControlsComponentInteractor: HomeControlsComponentInteractor,
    @Background private val bgScope: CoroutineScope,
) : CoreStartable {
@@ -57,10 +61,16 @@ constructor(
            } else {
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED
            }
        val packageManager =
            if (homeControlsDreamHsum()) {
                userContextProvider.userContext.packageManager
            } else {
                systemPackageManager
            }
        packageManager.setComponentEnabledSetting(
            componentName,
            packageState,
            PackageManager.DONT_KILL_APP
            PackageManager.DONT_KILL_APP,
        )
    }
}