diff options
| author | 2025-01-06 08:44:00 +0000 | |
|---|---|---|
| committer | 2025-01-14 09:38:18 +0000 | |
| commit | cadcf5c47d7cbb7605d61410f0a1784003836c0e (patch) | |
| tree | 6237ebd26d7d2f9781f407c47bf41056456252f9 | |
| parent | e1de2df4f6798a2ca8786e25f02e182bdb7acbfd (diff) | |
Add PackageInstaller to SettingsLib.Utils.isEssentialPackage
Bug: 381357865
Flag: EXEMPT bugfix
Test: Settings > Apps > See all apps > Package installer
Change-Id: Id9a0b19458a2f3f62b35f3c684c3b5eada9fcf6e
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/Utils.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java index 1998d0c6721c..2b8e20ffc71a 100644 --- a/packages/SettingsLib/src/com/android/settingslib/Utils.java +++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java @@ -10,6 +10,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.ResolveInfo; import android.content.pm.Signature; import android.content.pm.UserInfo; import android.content.res.ColorStateList; @@ -32,6 +33,7 @@ import android.media.AudioManager; import android.net.ConnectivityManager; import android.net.NetworkCapabilities; import android.net.TetheringManager; +import android.net.Uri; import android.net.vcn.VcnUtils; import android.net.wifi.WifiInfo; import android.os.BatteryManager; @@ -79,11 +81,14 @@ public class Utils { @VisibleForTesting static final String STORAGE_MANAGER_ENABLED_PROPERTY = "ro.storage_manager.enabled"; + private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive"; + private static Signature[] sSystemSignature; private static String sPermissionControllerPackageName; private static String sServicesSystemSharedLibPackageName; private static String sSharedSystemSharedLibPackageName; private static String sDefaultWebViewPackageName; + private static String sPackageInstallerPackageName; static final int[] WIFI_PIE = { com.android.internal.R.drawable.ic_wifi_signal_0, @@ -496,9 +501,29 @@ public class Utils { || packageName.equals(sSharedSystemSharedLibPackageName) || packageName.equals(PrintManager.PRINT_SPOOLER_PACKAGE_NAME) || packageName.equals(getDefaultWebViewPackageName(pm)) + || packageName.equals(getPackageInstallerPackageName(pm)) || isDeviceProvisioningPackage(resources, packageName); } + /** Return the package name of the installer */ + private static String getPackageInstallerPackageName(PackageManager pm) { + if (sPackageInstallerPackageName != null) { + return sPackageInstallerPackageName; + } + final Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.setDataAndType(Uri.parse("content://com.example/foo.apk"), PACKAGE_MIME_TYPE); + final List<ResolveInfo> matches = + pm.queryIntentActivities(intent, PackageManager.GET_META_DATA); + if (matches.size() == 1) { + final ResolveInfo resolveInfo = matches.get(0); + if (resolveInfo.activityInfo.applicationInfo.isPrivilegedApp()) { + sPackageInstallerPackageName = resolveInfo.getComponentInfo().packageName; + } + } + return sPackageInstallerPackageName; + } + /** * Returns {@code true} if the supplied package is the device provisioning app. Otherwise, * returns {@code false}. |