Loading services/core/java/com/android/server/pm/PackageManagerShellCommand.java +32 −0 Original line number Diff line number Diff line Loading @@ -316,6 +316,8 @@ class PackageManagerShellCommand extends ShellCommand { return runCreateUser(); case "remove-user": return runRemoveUser(); case "rename-user": return runRenameUser(); case "set-user-restriction": return runSetUserRestriction(); case "supports-multiple-users": Loading Loading @@ -3024,6 +3026,28 @@ class PackageManagerShellCommand extends ShellCommand { } } private int runRenameUser() throws RemoteException { String arg = getNextArg(); if (arg == null) { getErrPrintWriter().println("Error: no user id specified."); return 1; } int userId = resolveUserId(UserHandle.parseUserArg(arg)); String name = getNextArg(); if (name == null) { Slog.i(TAG, "Resetting name of user " + userId); } else { Slog.i(TAG, "Renaming user " + userId + " to '" + name + "'"); } IUserManager um = IUserManager.Stub.asInterface( ServiceManager.getService(Context.USER_SERVICE)); um.setUserName(userId, name); return 0; } public int runSetUserRestriction() throws RemoteException { int userId = UserHandle.USER_SYSTEM; String opt = getNextOption(); Loading Loading @@ -3937,6 +3961,11 @@ class PackageManagerShellCommand extends ShellCommand { return res; } // Resolves the userId; supports UserHandle.USER_CURRENT, but not other special values private @UserIdInt int resolveUserId(@UserIdInt int userId) { return userId == UserHandle.USER_CURRENT ? ActivityManager.getCurrentUser() : userId; } @Override public void onHelp() { final PrintWriter pw = getOutPrintWriter(); Loading Loading @@ -4208,6 +4237,9 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" switch or reboot)"); pw.println(" --wait: Wait until user is removed. Ignored if set-ephemeral-if-in-use"); pw.println(""); pw.println(" rename-user USER_ID [USER_NAME]"); pw.println(" Rename USER_ID with USER_NAME (or null when [USER_NAME] is not set)"); pw.println(""); pw.println(" set-user-restriction [--user USER_ID] RESTRICTION VALUE"); pw.println(""); pw.println(" get-max-users"); Loading services/core/java/com/android/server/pm/UserManagerService.java +23 −13 Original line number Diff line number Diff line Loading @@ -2278,20 +2278,26 @@ public class UserManagerService extends IUserManager.Stub { @Override public void setUserName(@UserIdInt int userId, String name) { checkManageUsersPermission("rename users"); boolean changed = false; synchronized (mPackagesLock) { UserData userData = getUserDataNoChecks(userId); if (userData == null || userData.info.partial) { Slog.w(LOG_TAG, "setUserName: unknown user #" + userId); Slogf.w(LOG_TAG, "setUserName: unknown user #%d", userId); return; } if (Objects.equals(name, userData.info.name)) { Slogf.i(LOG_TAG, "setUserName: ignoring for user #%d as it didn't change (%s)", userId, getRedacted(name)); return; } if (name != null && !name.equals(userData.info.name)) { if (name == null) { Slogf.i(LOG_TAG, "setUserName: resetting name of user #%d", userId); } else { Slogf.i(LOG_TAG, "setUserName: setting name of user #%d to %s", userId, getRedacted(name)); } userData.info.name = name; writeUserLP(userData); changed = true; } } if (changed) { final long ident = Binder.clearCallingIdentity(); try { sendUserInfoChangedBroadcast(userId); Loading @@ -2299,7 +2305,6 @@ public class UserManagerService extends IUserManager.Stub { Binder.restoreCallingIdentity(ident); } } } @Override public boolean setUserEphemeral(@UserIdInt int userId, boolean enableEphemeral) { Loading Loading @@ -6108,6 +6113,11 @@ public class UserManagerService extends IUserManager.Stub { return RESTRICTIONS_FILE_PREFIX + packageName + XML_SUFFIX; } @Nullable private static String getRedacted(@Nullable String string) { return string == null ? null : string.length() + "_chars"; } @Override public void setSeedAccountData(@UserIdInt int userId, String accountName, String accountType, PersistableBundle accountOptions, boolean persist) { Loading Loading
services/core/java/com/android/server/pm/PackageManagerShellCommand.java +32 −0 Original line number Diff line number Diff line Loading @@ -316,6 +316,8 @@ class PackageManagerShellCommand extends ShellCommand { return runCreateUser(); case "remove-user": return runRemoveUser(); case "rename-user": return runRenameUser(); case "set-user-restriction": return runSetUserRestriction(); case "supports-multiple-users": Loading Loading @@ -3024,6 +3026,28 @@ class PackageManagerShellCommand extends ShellCommand { } } private int runRenameUser() throws RemoteException { String arg = getNextArg(); if (arg == null) { getErrPrintWriter().println("Error: no user id specified."); return 1; } int userId = resolveUserId(UserHandle.parseUserArg(arg)); String name = getNextArg(); if (name == null) { Slog.i(TAG, "Resetting name of user " + userId); } else { Slog.i(TAG, "Renaming user " + userId + " to '" + name + "'"); } IUserManager um = IUserManager.Stub.asInterface( ServiceManager.getService(Context.USER_SERVICE)); um.setUserName(userId, name); return 0; } public int runSetUserRestriction() throws RemoteException { int userId = UserHandle.USER_SYSTEM; String opt = getNextOption(); Loading Loading @@ -3937,6 +3961,11 @@ class PackageManagerShellCommand extends ShellCommand { return res; } // Resolves the userId; supports UserHandle.USER_CURRENT, but not other special values private @UserIdInt int resolveUserId(@UserIdInt int userId) { return userId == UserHandle.USER_CURRENT ? ActivityManager.getCurrentUser() : userId; } @Override public void onHelp() { final PrintWriter pw = getOutPrintWriter(); Loading Loading @@ -4208,6 +4237,9 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" switch or reboot)"); pw.println(" --wait: Wait until user is removed. Ignored if set-ephemeral-if-in-use"); pw.println(""); pw.println(" rename-user USER_ID [USER_NAME]"); pw.println(" Rename USER_ID with USER_NAME (or null when [USER_NAME] is not set)"); pw.println(""); pw.println(" set-user-restriction [--user USER_ID] RESTRICTION VALUE"); pw.println(""); pw.println(" get-max-users"); Loading
services/core/java/com/android/server/pm/UserManagerService.java +23 −13 Original line number Diff line number Diff line Loading @@ -2278,20 +2278,26 @@ public class UserManagerService extends IUserManager.Stub { @Override public void setUserName(@UserIdInt int userId, String name) { checkManageUsersPermission("rename users"); boolean changed = false; synchronized (mPackagesLock) { UserData userData = getUserDataNoChecks(userId); if (userData == null || userData.info.partial) { Slog.w(LOG_TAG, "setUserName: unknown user #" + userId); Slogf.w(LOG_TAG, "setUserName: unknown user #%d", userId); return; } if (Objects.equals(name, userData.info.name)) { Slogf.i(LOG_TAG, "setUserName: ignoring for user #%d as it didn't change (%s)", userId, getRedacted(name)); return; } if (name != null && !name.equals(userData.info.name)) { if (name == null) { Slogf.i(LOG_TAG, "setUserName: resetting name of user #%d", userId); } else { Slogf.i(LOG_TAG, "setUserName: setting name of user #%d to %s", userId, getRedacted(name)); } userData.info.name = name; writeUserLP(userData); changed = true; } } if (changed) { final long ident = Binder.clearCallingIdentity(); try { sendUserInfoChangedBroadcast(userId); Loading @@ -2299,7 +2305,6 @@ public class UserManagerService extends IUserManager.Stub { Binder.restoreCallingIdentity(ident); } } } @Override public boolean setUserEphemeral(@UserIdInt int userId, boolean enableEphemeral) { Loading Loading @@ -6108,6 +6113,11 @@ public class UserManagerService extends IUserManager.Stub { return RESTRICTIONS_FILE_PREFIX + packageName + XML_SUFFIX; } @Nullable private static String getRedacted(@Nullable String string) { return string == null ? null : string.length() + "_chars"; } @Override public void setSeedAccountData(@UserIdInt int userId, String accountName, String accountType, PersistableBundle accountOptions, boolean persist) { Loading