Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10ad9822 authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

Start enforcing explicit intents for Context.bindService()

No longer prints a warning, now throws an exception.

Also fix a bug in UserManagerService that was causing an
exception while booting.

Change-Id: I3b43cfe08067da840b6850b9bed58664d36d34f1
parent 47e6d5d2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -18617,6 +18617,7 @@ package android.os {
    field public static final int JELLY_BEAN_MR1 = 17; // 0x11
    field public static final int JELLY_BEAN_MR2 = 18; // 0x12
    field public static final int KITKAT = 19; // 0x13
    field public static final int L = 10000; // 0x2710
  }
  public final class Bundle implements java.lang.Cloneable android.os.Parcelable {
+5 −5
Original line number Diff line number Diff line
@@ -1479,13 +1479,13 @@ class ContextImpl extends Context {

    private void validateServiceIntent(Intent service) {
        if (service.getComponent() == null && service.getPackage() == null) {
            if (true || getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KITKAT) {
            if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.L) {
                IllegalArgumentException ex = new IllegalArgumentException(
                        "Service Intent must be explicit: " + service);
                throw ex;
            } else {
                Log.w(TAG, "Implicit intents with startService are not safe: " + service
                        + " " + Debug.getCallers(2, 3));
                //IllegalArgumentException ex = new IllegalArgumentException(
                //        "Service Intent must be explicit: " + service);
                //Log.e(TAG, "This will become an error", ex);
                //throw ex;
            }
        }
    }
+13 −0
Original line number Diff line number Diff line
@@ -467,6 +467,19 @@ public class Build {
         * </ul>
         */
        public static final int KITKAT = 19;

        /**
         * L!
         *
         * <p>Applications targeting this or a later release will get these
         * new changes in behavior:</p>
         * <ul>
         * <li> {@link android.content.Context#bindService Context.bindService} now
         * requires an explicit Intent, and will throw an exception if given an explicit
         * Intent.</li>
         * </ul>
         */
        public static final int L = CUR_DEVELOPMENT;
    }
    
    /** The type of build, like "user" or "eng". */
+3 −5
Original line number Diff line number Diff line
@@ -234,9 +234,7 @@ public class UserManagerService extends IUserManager.Stub {
    }

    void systemReady() {
        final Context context = ActivityThread.systemMain().getSystemContext();
        mUserPackageMonitor.register(context,
                null, UserHandle.ALL, false);
        mUserPackageMonitor.register(mContext, null, UserHandle.ALL, false);
        userForeground(UserHandle.USER_OWNER);
    }

@@ -457,7 +455,7 @@ public class UserManagerService extends IUserManager.Stub {

    /**
     * Enforces that only the system UID or root's UID or apps that have the
     * {@link android.Manifest.permission.MANAGE_USERS MANAGE_USERS}
     * {@link android.Manifest.permission#MANAGE_USERS MANAGE_USERS}
     * permission can make certain calls to the UserManager.
     *
     * @param message used as message if SecurityException is thrown
@@ -1046,7 +1044,7 @@ public class UserManagerService extends IUserManager.Stub {
    /**
     * Removes a user and all data directories created for that user. This method should be called
     * after the user's processes have been terminated.
     * @param id the user's id
     * @param userHandle the user's id
     */
    public boolean removeUser(int userHandle) {
        checkManageUsersPermission("Only the system can remove users");