Loading core/java/android/content/pm/PackageParser.java +32 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -1239,6 +1239,7 @@ public class PackageParser { } implicitPerms.append(npi.name); pkg.requestedPermissions.add(npi.name); pkg.requestedPermissionsRequired.add(Boolean.TRUE); } } if (implicitPerms != null) { Loading Loading @@ -3083,6 +3084,35 @@ public class PackageParser { } } 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)) Loading core/java/android/os/Build.java +9 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading services/java/com/android/server/pm/PackageManagerService.java +11 −0 Original line number Diff line number Diff line Loading @@ -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)) { Loading Loading
core/java/android/content/pm/PackageParser.java +32 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -1239,6 +1239,7 @@ public class PackageParser { } implicitPerms.append(npi.name); pkg.requestedPermissions.add(npi.name); pkg.requestedPermissionsRequired.add(Boolean.TRUE); } } if (implicitPerms != null) { Loading Loading @@ -3083,6 +3084,35 @@ public class PackageParser { } } 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)) Loading
core/java/android/os/Build.java +9 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading
services/java/com/android/server/pm/PackageManagerService.java +11 −0 Original line number Diff line number Diff line Loading @@ -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)) { Loading