From 99fd7e49e6525cea3219617b4a4382b21e3d25f1 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Wed, 28 Sep 2022 13:47:33 +0800 Subject: [PATCH] Fix app launch button not shown This is caused by using getLaunchIntentForPackage() without specific which user. Use packageManagerAsUser to fix this issue. Bug: 236346018 Test: Manual with Settings App Change-Id: I7d71f9f46b18299245e654c9eef78232cb5e0392 --- .../android/settings/spa/app/appsettings/AppButtons.kt | 2 +- .../settings/spa/app/appsettings/AppLaunchButton.kt | 8 ++++---- .../settings/spa/app/appsettings/PackageInfoPresenter.kt | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/spa/app/appsettings/AppButtons.kt b/src/com/android/settings/spa/app/appsettings/AppButtons.kt index 89f3b138df1..5082bea22e8 100644 --- a/src/com/android/settings/spa/app/appsettings/AppButtons.kt +++ b/src/com/android/settings/spa/app/appsettings/AppButtons.kt @@ -32,7 +32,7 @@ fun AppButtons(packageInfoPresenter: PackageInfoPresenter) { } private class AppButtonsHolder(private val packageInfoPresenter: PackageInfoPresenter) { - private val appLaunchButton = AppLaunchButton(context = packageInfoPresenter.context) + private val appLaunchButton = AppLaunchButton(packageInfoPresenter) private val appDisableButton = AppDisableButton(packageInfoPresenter) private val appUninstallButton = AppUninstallButton(packageInfoPresenter) private val appForceStopButton = AppForceStopButton(packageInfoPresenter) diff --git a/src/com/android/settings/spa/app/appsettings/AppLaunchButton.kt b/src/com/android/settings/spa/app/appsettings/AppLaunchButton.kt index a983b675938..9f81661b03b 100644 --- a/src/com/android/settings/spa/app/appsettings/AppLaunchButton.kt +++ b/src/com/android/settings/spa/app/appsettings/AppLaunchButton.kt @@ -16,7 +16,6 @@ package com.android.settings.spa.app.appsettings -import android.content.Context import android.content.Intent import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo @@ -26,11 +25,12 @@ import com.android.settings.R import com.android.settingslib.spa.widget.button.ActionButton import com.android.settingslib.spaprivileged.model.app.userHandle -class AppLaunchButton(private val context: Context) { - private val packageManager = context.packageManager +class AppLaunchButton(packageInfoPresenter: PackageInfoPresenter) { + private val context = packageInfoPresenter.context + private val packageManagerAsUser = packageInfoPresenter.packageManagerAsUser fun getActionButton(packageInfo: PackageInfo): ActionButton? = - packageManager.getLaunchIntentForPackage(packageInfo.packageName)?.let { intent -> + packageManagerAsUser.getLaunchIntentForPackage(packageInfo.packageName)?.let { intent -> launchButton(intent, packageInfo.applicationInfo) } diff --git a/src/com/android/settings/spa/app/appsettings/PackageInfoPresenter.kt b/src/com/android/settings/spa/app/appsettings/PackageInfoPresenter.kt index eb39c4ff636..cd672d3d7d1 100644 --- a/src/com/android/settings/spa/app/appsettings/PackageInfoPresenter.kt +++ b/src/com/android/settings/spa/app/appsettings/PackageInfoPresenter.kt @@ -48,7 +48,7 @@ class PackageInfoPresenter( private val coroutineScope: CoroutineScope, ) { private val metricsFeatureProvider = FeatureFactory.getFactory(context).metricsFeatureProvider - private val packageManager by lazy { + val packageManagerAsUser: PackageManager by lazy { context.createContextAsUser(UserHandle.of(userId), 0).packageManager } private val _flow: MutableStateFlow = MutableStateFlow(null) @@ -85,7 +85,7 @@ class PackageInfoPresenter( fun enable() { logAction(SettingsEnums.ACTION_SETTINGS_ENABLE_APP) coroutineScope.launch(Dispatchers.IO) { - packageManager.setApplicationEnabledSetting( + packageManagerAsUser.setApplicationEnabledSetting( packageName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0 ) notifyChange() @@ -96,7 +96,7 @@ class PackageInfoPresenter( fun disable() { logAction(SettingsEnums.ACTION_SETTINGS_DISABLE_APP) coroutineScope.launch(Dispatchers.IO) { - packageManager.setApplicationEnabledSetting( + packageManagerAsUser.setApplicationEnabledSetting( packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, 0 ) notifyChange()