summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Gregory Montoir <gmontoir@google.com> 2025-01-06 08:44:00 +0000
committer Gregory Montoir <gmontoir@google.com> 2025-01-14 09:38:18 +0000
commitcadcf5c47d7cbb7605d61410f0a1784003836c0e (patch)
tree6237ebd26d7d2f9781f407c47bf41056456252f9
parente1de2df4f6798a2ca8786e25f02e182bdb7acbfd (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.java25
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}.