summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2015-06-18 18:40:36 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-06-18 18:40:36 +0000
commit7636a42bacc32c7f8df3ae1e686ae0c5857a25ba (patch)
tree5f70ac27af13ef236d57f87b1790db8e2c18edc8 /src
parentd713bc269e6341f160581164c7d656f971136fb8 (diff)
parent9f0442cdfc055cc3aed19770f48f516b052f6e60 (diff)
downloadandroid_packages_apps_PackageInstaller-7636a42bacc32c7f8df3ae1e686ae0c5857a25ba.tar.gz
android_packages_apps_PackageInstaller-7636a42bacc32c7f8df3ae1e686ae0c5857a25ba.tar.bz2
android_packages_apps_PackageInstaller-7636a42bacc32c7f8df3ae1e686ae0c5857a25ba.zip
Merge "Add better logic for what is 'system'" into mnc-dev
Diffstat (limited to 'src')
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionApps.java21
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java4
-rw-r--r--src/com/android/packageinstaller/permission/ui/ManagePermissionsFragment.java8
-rw-r--r--src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java5
-rw-r--r--src/com/android/packageinstaller/permission/utils/Utils.java23
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 9f3bd248..dfb8c8cc 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 d0e5452c..f4c271fc 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
@@ -189,7 +192,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);
+ }
}