Make API createAndManageUser public

Remove @hide, and add parameter for specifying profile owner. The PO
has to live in the same package as the device owner.

Bug: 25288732
Bug: 25860170
Change-Id: I40e8984a71ee9d1ff74e57d4e79e298deef9bc35
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index c78174f..7007afe 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -4125,21 +4125,21 @@
     }
 
     /**
-      * Flag used by {@link createAndManageUser} to skip setup wizard after creating a new user.
-      * @hide
+      * Flag used by {@link #createAndManageUser} to skip setup wizard after creating a new user.
       */
     public static final int SKIP_SETUP_WIZARD = 0x0001;
 
     /**
-     * Called by a device owner to create a user with the specified name and the caller as profile
-     * owner. The UserHandle returned by this method should not be persisted as user handles are
-     * recycled as users are removed and created. If you need to persist an identifier for this
-     * user, use {@link UserManager#getSerialNumberForUser}. The new user will not be started in the
-     * background.
+     * Called by a device owner to create a user with the specified name and a given component of
+     * the calling package as profile owner. The UserHandle returned by this method should not be
+     * persisted as user handles are recycled as users are removed and created. If you need to
+     * persist an identifier for this user, use {@link UserManager#getSerialNumberForUser}. The new
+     * user will not be started in the background.
      *
-     * <p> admin is the {@link DeviceAdminReceiver} which is the device owner, and will become the
-     * profile owner and will be registered as an active admin on the new user. The profile owner
-     * package will be installed on the new user.
+     * <p>admin is the {@link DeviceAdminReceiver} which is the device owner. profileOwner is also
+     * a DeviceAdminReceiver in the same package as admin, and will become the profile owner and
+     * will be registered as an active admin on the new user. The profile owner package will be
+     * installed on the new user.
      *
      * <p>If the adminExtras are not null, they will be stored on the device until the user is
      * started for the first time. Then the extras will be passed to the admin when
@@ -4147,18 +4147,21 @@
      *
      * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
      * @param name The user's name.
+     * @param profileOwner Which {@link DeviceAdminReceiver} will be profile owner. Has to be in the
+     *      same package as admin, otherwise no user is created and an IllegalArgumentException is
+     *      thrown.
      * @param adminExtras Extras that will be passed to onEnable of the admin receiver on the new
      *      user.
-     * @param flags {@link SKIP_SETUP_WIZARD} is supported.
+     * @param flags {@link #SKIP_SETUP_WIZARD} is supported.
      * @see UserHandle
      * @return the {@link android.os.UserHandle} object for the created user, or {@code null} if the
      *         user could not be created.
-     * @hide
      */
     public UserHandle createAndManageUser(@NonNull ComponentName admin, @NonNull String name,
-            @Nullable PersistableBundle adminExtras, int flags) {
+            @NonNull ComponentName profileOwner, @Nullable PersistableBundle adminExtras,
+            int flags) {
         try {
-            return mService.createAndManageUser(admin, name, adminExtras, flags);
+            return mService.createAndManageUser(admin, name, profileOwner, adminExtras, flags);
         } catch (RemoteException re) {
             Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, re);
         }