diff options
author | Dianne Hackborn <hackbod@google.com> | 2012-03-06 10:34:18 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-06 10:34:18 -0800 |
commit | 4f03d35f9c040222e6a46dde807fe2ff7852beb8 (patch) | |
tree | b73b05ebb248ea627f9428b4b8dc3c1705b3bfba | |
parent | b7fdddab0d1cfa666747a0295fcea4bfea709737 (diff) | |
parent | 6569625beef705ec489662b80d372c4423f9c7f7 (diff) | |
download | frameworks_base-4f03d35f9c040222e6a46dde807fe2ff7852beb8.zip frameworks_base-4f03d35f9c040222e6a46dde807fe2ff7852beb8.tar.gz frameworks_base-4f03d35f9c040222e6a46dde807fe2ff7852beb8.tar.bz2 |
Merge "Fix issues #6103378 and #5959515."
-rw-r--r-- | core/java/android/content/pm/PackageParser.java | 34 | ||||
-rw-r--r-- | core/java/android/os/Build.java | 9 | ||||
-rw-r--r-- | services/java/com/android/server/pm/PackageManagerService.java | 11 |
3 files changed, 52 insertions, 2 deletions
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 7b4a0ad..e88ee02 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -944,7 +944,7 @@ public class PackageParser { if (name != null && !pkg.requestedPermissions.contains(name)) { pkg.requestedPermissions.add(name.intern()); - pkg.requestedPermissionsRequired.add(required); + pkg.requestedPermissionsRequired.add(required ? Boolean.TRUE : Boolean.FALSE); } XmlUtils.skipCurrentTag(parser); @@ -1239,6 +1239,7 @@ public class PackageParser { } implicitPerms.append(npi.name); pkg.requestedPermissions.add(npi.name); + pkg.requestedPermissionsRequired.add(Boolean.TRUE); } } if (implicitPerms != null) { @@ -3082,7 +3083,36 @@ public class PackageParser { instrumentation.get(i).setPackageName(newName); } } - + + public boolean hasComponentClassName(String name) { + for (int i=activities.size()-1; i>=0; i--) { + if (name.equals(activities.get(i).className)) { + return true; + } + } + for (int i=receivers.size()-1; i>=0; i--) { + if (name.equals(receivers.get(i).className)) { + return true; + } + } + for (int i=providers.size()-1; i>=0; i--) { + if (name.equals(providers.get(i).className)) { + return true; + } + } + for (int i=services.size()-1; i>=0; i--) { + if (name.equals(services.get(i).className)) { + return true; + } + } + for (int i=instrumentation.size()-1; i>=0; i--) { + if (name.equals(instrumentation.get(i).className)) { + return true; + } + } + return false; + } + public String toString() { return "Package{" + Integer.toHexString(System.identityHashCode(this)) diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java index c106092..63275cf 100644 --- a/core/java/android/os/Build.java +++ b/core/java/android/os/Build.java @@ -371,6 +371,15 @@ public class Build { /** * Next up on Android! + * + * <p>Applications targeting this or a later release will get these + * new changes in behavior:</p> + * <ul> + * <li> Calls to {@link android.content.pm.PackageManager#setComponentEnabledSetting + * PackageManager.setComponentEnabledSetting} will now throw an + * IllegalArgumentException if the given component class name does not + * exist in the application's manifest. + * </ul> */ public static final int JELLY_BEAN = CUR_DEVELOPMENT; } diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 4b4c8ab..9f45eff 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -7744,6 +7744,17 @@ public class PackageManagerService extends IPackageManager.Stub { pkgSetting.pkg.mSetEnabled = newState; } else { // We're dealing with a component level state change + // First, verify that this is a valid class name. + PackageParser.Package pkg = pkgSetting.pkg; + if (pkg == null || !pkg.hasComponentClassName(className)) { + if (pkg.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN) { + throw new IllegalArgumentException("Component class " + className + + " does not exist in " + packageName); + } else { + Slog.w(TAG, "Failed setComponentEnabledSetting: component class " + + className + " does not exist in " + packageName); + } + } switch (newState) { case COMPONENT_ENABLED_STATE_ENABLED: if (!pkgSetting.enableComponentLPw(className)) { |