From 1c6e764275934b0ddf65aeb86179c75a50ba15d4 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 10 Jan 2011 13:48:15 -0800 Subject: [PATCH] Allow updated system apps to retain priority Previously any updated system apps would not be able to have a greater than 0 priority on an activity intent filter. Moving the priority check later in the package scanning allows it to apply to updated system packages as well. Bug: 2572398 Change-Id: I9fdf7906809518b28b49ffec31afec1442d85d3c --- core/java/android/content/pm/PackageParser.java | 8 +------- .../java/com/android/server/IntentResolver.java | 8 ++++---- .../com/android/server/PackageManagerService.java | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 80b8d924c0be0..16805b2e1e890 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -2601,14 +2601,8 @@ public class PackageParser { int priority = sa.getInt( com.android.internal.R.styleable.AndroidManifestIntentFilter_priority, 0); - if (priority > 0 && isActivity && (flags&PARSE_IS_SYSTEM) == 0) { - Log.w(TAG, "Activity with priority > 0, forcing to 0 at " - + mArchiveSourcePath + " " - + parser.getPositionDescription()); - priority = 0; - } outInfo.setPriority(priority); - + TypedValue v = sa.peekValue( com.android.internal.R.styleable.AndroidManifestIntentFilter_label); if (v != null && (outInfo.labelRes=v.resourceId) == 0) { diff --git a/services/java/com/android/server/IntentResolver.java b/services/java/com/android/server/IntentResolver.java index e47de1368a761..a8b28403ee1a6 100644 --- a/services/java/com/android/server/IntentResolver.java +++ b/services/java/com/android/server/IntentResolver.java @@ -346,7 +346,7 @@ public class IntentResolver { int num = 0; while (i.hasNext()) { - String name = (String)i.next(); + String name = i.next(); num++; if (localLOGV) Slog.v(TAG, prefix + name); String baseName = name; @@ -395,7 +395,7 @@ public class IntentResolver { int num = 0; while (i.hasNext()) { - String name = (String)i.next(); + String name = i.next(); num++; if (localLOGV) Slog.v(TAG, prefix + name); String baseName = name; @@ -534,8 +534,8 @@ public class IntentResolver { // Sorts a List of IntentFilter objects into descending priority order. private static final Comparator mResolvePrioritySorter = new Comparator() { public int compare(Object o1, Object o2) { - float q1 = ((IntentFilter)o1).getPriority(); - float q2 = ((IntentFilter)o2).getPriority(); + final int q1 = ((IntentFilter) o1).getPriority(); + final int q2 = ((IntentFilter) o2).getPriority(); return (q1 > q2) ? -1 : ((q1 < q2) ? 1 : 0); } }; diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index cb9dfc8edf241..894c649a2e8df 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -2881,13 +2881,13 @@ class PackageManagerService extends IPackageManager.Stub { SharedUserSetting suid = null; PackageSetting pkgSetting = null; - if ((pkg.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0) { + if (!isSystemApp(pkg)) { // Only system apps can use these features. pkg.mOriginalPackages = null; pkg.mRealPackage = null; pkg.mAdoptPermissions = null; } - + synchronized (mPackages) { // Check all shared libraries and map to their actual file path. if (pkg.usesLibraries != null || pkg.usesOptionalLibraries != null) { @@ -4080,6 +4080,7 @@ class PackageManagerService extends IPackageManager.Stub { } public final void addActivity(PackageParser.Activity a, String type) { + final boolean systemApp = isSystemApp(a.info.applicationInfo); mActivities.put(a.getComponentName(), a); if (SHOW_INFO || Config.LOGV) Log.v( TAG, " " + type + " " + @@ -4088,6 +4089,11 @@ class PackageManagerService extends IPackageManager.Stub { int NI = a.intents.size(); for (int j=0; j 0 && "activity".equals(type)) { + intent.setPriority(0); + Log.w(TAG, "Package " + a.info.applicationInfo.packageName + " has activity " + + a.className + " with priority > 0, forcing to 0"); + } if (SHOW_INFO || Config.LOGV) { Log.v(TAG, " IntentFilter:"); intent.dump(new LogPrinter(Log.VERBOSE, TAG), " "); @@ -5952,6 +5958,10 @@ class PackageManagerService extends IPackageManager.Stub { return (pkg.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; } + private static boolean isSystemApp(ApplicationInfo info) { + return (info.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + } + private static boolean isUpdatedSystemApp(PackageParser.Package pkg) { return (pkg.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0; }