diff options
author | Jason Monk <jmonk@google.com> | 2015-06-18 11:29:46 -0400 |
---|---|---|
committer | Jason Monk <jmonk@google.com> | 2015-06-18 11:29:46 -0400 |
commit | 9f0442cdfc055cc3aed19770f48f516b052f6e60 (patch) | |
tree | d8a043dc2d86f0602c1745d902fffcd4abc73544 /src | |
parent | d8cb9a81bbd71737149a3fe3fba8bb13c05439c3 (diff) | |
download | android_packages_apps_PackageInstaller-9f0442cdfc055cc3aed19770f48f516b052f6e60.tar.gz android_packages_apps_PackageInstaller-9f0442cdfc055cc3aed19770f48f516b052f6e60.tar.bz2 android_packages_apps_PackageInstaller-9f0442cdfc055cc3aed19770f48f516b052f6e60.zip |
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
Diffstat (limited to 'src')
5 files changed, 47 insertions, 14 deletions
diff --git a/src/com/android/packageinstaller/permission/model/PermissionApps.java b/src/com/android/packageinstaller/permission/model/PermissionApps.java index 1aadeb2c..a44482f6 100644 --- a/src/com/android/packageinstaller/permission/model/PermissionApps.java +++ b/src/com/android/packageinstaller/permission/model/PermissionApps.java @@ -28,6 +28,7 @@ import android.os.AsyncTask; import android.os.UserHandle; import android.os.UserManager; import android.util.ArrayMap; +import android.util.ArraySet; import android.util.Log; import android.util.SparseArray; @@ -79,13 +80,13 @@ public class PermissionApps { new PermissionAppsLoader().execute(); } - public int getGrantedCount() { + public int getGrantedCount(ArraySet<String> launcherPkgs) { int count = 0; for (PermissionApp app : mPermApps) { if (!Utils.shouldShowPermission(app)) { continue; } - if (app.isSystem()) { + if (Utils.isSystem(app, launcherPkgs)) { // We default to not showing system apps, so hide them from count. continue; } @@ -96,13 +97,13 @@ public class PermissionApps { return count; } - public int getTotalCount() { + public int getTotalCount(ArraySet<String> launcherPkgs) { int count = 0; for (PermissionApp app : mPermApps) { if (!Utils.shouldShowPermission(app)) { continue; } - if (app.isSystem()) { + if (Utils.isSystem(app, launcherPkgs)) { // We default to not showing system apps, so hide them from count. continue; } @@ -175,7 +176,7 @@ public class PermissionApps { : app.applicationInfo.loadLabel(mPm).toString(); PermissionApp permApp = new PermissionApp(app.packageName, group, label, getBadgedIcon(app.applicationInfo), - app.applicationInfo.isSystemApp()); + app.applicationInfo); permApps.add(permApp); } @@ -268,19 +269,19 @@ public class PermissionApps { private final AppPermissionGroup mAppPermissionGroup; private final String mLabel; private final Drawable mIcon; - private final boolean mSystem; + private final ApplicationInfo mInfo; public PermissionApp(String packageName, AppPermissionGroup appPermissionGroup, - String label, Drawable icon, boolean isSystem) { + String label, Drawable icon, ApplicationInfo info) { mPackageName = packageName; mAppPermissionGroup = appPermissionGroup; mLabel = label; mIcon = icon; - mSystem = isSystem; + mInfo = info; } - public boolean isSystem() { - return mSystem; + public ApplicationInfo getAppInfo() { + return mInfo; } public String getKey() { diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java index 8ca67017..83cecc60 100644 --- a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java +++ b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java @@ -21,6 +21,7 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.util.ArraySet; import android.util.SparseArray; import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp; @@ -105,6 +106,7 @@ public class PermissionStatusReceiver extends BroadcastReceiver { } public boolean getAppsWithPermissionsCount(Context context, int[] counts) { + ArraySet<String> launcherPkgs = Utils.getLauncherPackages(context); // Indexed by uid. SparseArray<Boolean> grantedApps = new SparseArray<>(); SparseArray<Boolean> allApps = new SparseArray<>(); @@ -114,7 +116,7 @@ public class PermissionStatusReceiver extends BroadcastReceiver { permissionApps.loadNowWithoutUi(); for (PermissionApp app : permissionApps.getApps()) { int uid = app.getUid(); - if (app.isSystem()) { + if (Utils.isSystem(app, launcherPkgs)) { // We default to not showing system apps, so hide them from count. continue; } diff --git a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java index 2122ad26..d13453e6 100644 --- a/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java @@ -25,6 +25,7 @@ import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; +import android.util.ArraySet; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; @@ -47,6 +48,8 @@ public final class ManagePermissionsFragment extends PreferenceFragment private static final String EXTRA_PREFS_KEY = "extra_prefs_key"; + private ArraySet<String> mLauncherPkgs; + private PermissionGroups mPermissions; private PreferenceScreen mExtraScreen; @@ -65,6 +68,7 @@ public final class ManagePermissionsFragment extends PreferenceFragment if (ab != null) { ab.setDisplayHomeAsUpEnabled(true); } + mLauncherPkgs = Utils.getLauncherPackages(getContext()); mPermissions = new PermissionGroups(getActivity(), getLoaderManager(), this); } @@ -187,8 +191,8 @@ public final class ManagePermissionsFragment extends PreferenceFragment if (getActivity() == null) { return; } - int granted = permissionApps.getGrantedCount(); - int total = permissionApps.getTotalCount(); + int granted = permissionApps.getGrantedCount(mLauncherPkgs); + int total = permissionApps.getTotalCount(mLauncherPkgs); finalPref.setSummary(getString(R.string.app_permissions_group_summary, granted, total)); } diff --git a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java index 3c05c463..b767a266 100644 --- a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java @@ -30,6 +30,7 @@ import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.preference.SwitchPreference; import android.support.v4.util.ArrayMap; +import android.util.ArraySet; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -68,6 +69,7 @@ public final class PermissionAppsFragment extends PreferenceFragment implements private PermissionApps mPermissionApps; private ArrayMap<String, AppPermissionGroup> mToggledGroups; + private ArraySet<String> mLauncherPkgs; private boolean mHasConfirmedRevoke; private boolean mShowSystem; @@ -82,6 +84,7 @@ public final class PermissionAppsFragment extends PreferenceFragment implements if (ab != null) { ab.setDisplayHomeAsUpEnabled(true); } + mLauncherPkgs = Utils.getLauncherPackages(getContext()); } @Override @@ -187,7 +190,7 @@ public final class PermissionAppsFragment extends PreferenceFragment implements } SwitchPreference pref = (SwitchPreference) findPreference(app.getKey()); - if (!mShowSystem && app.isSystem()) { + if (!mShowSystem && Utils.isSystem(app, mLauncherPkgs)) { if (pref != null) { preferences.removePreference(pref); } 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<String> getLauncherPackages(Context context) { + ArraySet<String> 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<String> launcherPkgs) { + ApplicationInfo info = app.getAppInfo(); + return info.isSystemApp() && (info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0 + && !launcherPkgs.contains(info.packageName); + } } |