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

Commit 5bb44fe5 authored by Felipe Leme's avatar Felipe Leme Committed by Android (Google) Code Review
Browse files

Merge "New Shell command to rename a user."

parents d2b25e89 48e645db
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -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":
@@ -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();
@@ -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();
@@ -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");
+23 −13
Original line number Diff line number Diff line
@@ -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);
@@ -2299,7 +2305,6 @@ public class UserManagerService extends IUserManager.Stub {
            Binder.restoreCallingIdentity(ident);
        }
    }
    }

    @Override
    public boolean setUserEphemeral(@UserIdInt int userId, boolean enableEphemeral) {
@@ -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) {