From 9f0442cdfc055cc3aed19770f48f516b052f6e60 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Thu, 18 Jun 2015 11:29:46 -0400 Subject: Add better logic for what is 'system' Match settings logic for this: System apps are on the system image, don't show up in launcher, and haven't been updated. Bug: 21849124 Change-Id: Ida77f98d080068731dcfd7aaf26aeb086fd681ed --- .../packageinstaller/permission/utils/Utils.java | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/com/android/packageinstaller/permission/utils') diff --git a/src/com/android/packageinstaller/permission/utils/Utils.java b/src/com/android/packageinstaller/permission/utils/Utils.java index 7600f6c5..63114f13 100644 --- a/src/com/android/packageinstaller/permission/utils/Utils.java +++ b/src/com/android/packageinstaller/permission/utils/Utils.java @@ -18,10 +18,14 @@ package com.android.packageinstaller.permission.utils; import android.Manifest; import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.content.res.Resources.Theme; import android.graphics.drawable.Drawable; +import android.util.ArraySet; import android.util.Log; import android.util.TypedValue; @@ -46,6 +50,9 @@ public class Utils { Manifest.permission_group.STORAGE }; + private static final Intent LAUNCHER_INTENT = new Intent(Intent.ACTION_MAIN, null) + .addCategory(Intent.CATEGORY_LAUNCHER); + private Utils() { /* do nothing - hide constructor */ } @@ -115,4 +122,20 @@ public class Utils { icon.setTint(context.getColor(typedValue.resourceId)); return icon; } + + public static ArraySet getLauncherPackages(Context context) { + ArraySet launcherPkgs = new ArraySet<>(); + for (ResolveInfo info : + context.getPackageManager().queryIntentActivities(LAUNCHER_INTENT, 0)) { + launcherPkgs.add(info.activityInfo.packageName); + } + + return launcherPkgs; + } + + public static boolean isSystem(PermissionApp app, ArraySet launcherPkgs) { + ApplicationInfo info = app.getAppInfo(); + return info.isSystemApp() && (info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0 + && !launcherPkgs.contains(info.packageName); + } } -- cgit v1.2.3