diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 52a7c6ef4b714..f1c84b8701ba6 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -2437,10 +2437,14 @@ class PackageManagerShellCommand extends ShellCommand { } } String arg = getNextArg(); - if (arg == null) { + if (arg == null && !preCreateOnly) { getErrPrintWriter().println("Error: no user name specified."); return 1; } + if (arg != null && preCreateOnly) { + getErrPrintWriter().println("Warning: name is ignored for pre-created users"); + } + name = arg; UserInfo info; IUserManager um = IUserManager.Stub.asInterface( diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 95baa01923f5a..22eb1b497cf42 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -2846,7 +2846,7 @@ public class UserManagerService extends IUserManager.Stub { return null; } // If we're adding a guest and there already exists one, bail. - if (isGuest && findCurrentGuestUser() != null) { + if (isGuest && !preCreate && findCurrentGuestUser() != null) { Log.e(LOG_TAG, "Cannot add guest user. Guest user already exists."); return null; } @@ -3100,7 +3100,8 @@ public class UserManagerService extends IUserManager.Stub { final int size = mUsers.size(); for (int i = 0; i < size; i++) { final UserInfo user = mUsers.valueAt(i).info; - if (user.isGuest() && !user.guestToRemove && !mRemovingUserIds.get(user.id)) { + if (user.isGuest() && !user.guestToRemove && !user.preCreated + && !mRemovingUserIds.get(user.id)) { return user; } }