diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 70053bdeb47eb..5ec406b597d59 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -5424,32 +5424,62 @@ public class UserManagerService extends IUserManager.Stub { private static final String ARG_CRITICAL_ONLY = "--critical-only"; private static final String ARG_MODE = "--mode"; - private int onShellCommand(Shell shell, String cmd) { + private final class Shell extends ShellCommand { + + @Override + public void onHelp() { + final PrintWriter pw = getOutPrintWriter(); + pw.printf("User manager (user) commands:\n"); + + pw.printf("%s%s\n", PREFIX_HELP_COMMAND, CMD_HELP); + pw.printf("%sPrints this help text.\n\n", PREFIX_HELP_DESCRIPTION); + + pw.printf("%s%s [%s] [%s]\n", PREFIX_HELP_COMMAND, CMD_LIST, ARG_V, ARG_ALL); + pw.printf("%sPrints all users on the system.\n\n", PREFIX_HELP_DESCRIPTION); + + pw.printf("%s%s [%s | %s] [%s] [%s MODE]\n", PREFIX_HELP_COMMAND, + CMD_REPORT_SYSTEM_USER_PACKAGE_ALLOWLIST_PROBLEMS, + ARG_V, ARG_VERBOSE, ARG_CRITICAL_ONLY, ARG_MODE); + + pw.printf("%sReports all issues on user-type package allowlist XML files. Options:\n", + PREFIX_HELP_DESCRIPTION); + pw.printf("%s%s | %s: shows extra info, like number of issues\n", + PREFIX_HELP_DESCRIPTION, ARG_V, ARG_VERBOSE); + pw.printf("%s%s: show only critical issues, excluding warnings\n", + PREFIX_HELP_DESCRIPTION, ARG_CRITICAL_ONLY); + pw.printf("%s%s MODE: shows what errors would be if device used mode MODE\n" + + "%s(where MODE is the allowlist mode integer as defined by " + + "config_userTypePackageWhitelistMode)\n\n", + PREFIX_HELP_DESCRIPTION, ARG_MODE, PREFIX_HELP_DESCRIPTION_EXTRA_LINES); + } + + @Override + public int onCommand(String cmd) { if (cmd == null) { - return shell.handleDefaultCommands(cmd); + return handleDefaultCommands(cmd); } - final PrintWriter pw = shell.getOutPrintWriter(); try { switch(cmd) { case CMD_LIST: - return runList(pw, shell); + return runList(); case CMD_REPORT_SYSTEM_USER_PACKAGE_ALLOWLIST_PROBLEMS: - return runReportPackageWhitelistProblems(pw, shell); + return runReportPackageAllowlistProblems(); default: - return shell.handleDefaultCommands(cmd); + return handleDefaultCommands(cmd); } } catch (RemoteException e) { - pw.println("Remote exception: " + e); + getOutPrintWriter().println("Remote exception: " + e); } return -1; } - private int runList(PrintWriter pw, Shell shell) throws RemoteException { + private int runList() throws RemoteException { + final PrintWriter pw = getOutPrintWriter(); boolean all = false; boolean verbose = false; String opt; - while ((opt = shell.getNextOption()) != null) { + while ((opt = getNextOption()) != null) { switch (opt) { case ARG_V: verbose = true; @@ -5528,12 +5558,13 @@ public class UserManagerService extends IUserManager.Stub { } } - private int runReportPackageWhitelistProblems(PrintWriter pw, Shell shell) { + private int runReportPackageAllowlistProblems() { + final PrintWriter pw = getOutPrintWriter(); boolean verbose = false; boolean criticalOnly = false; int mode = UserSystemPackageInstaller.USER_TYPE_PACKAGE_WHITELIST_MODE_NONE; String opt; - while ((opt = shell.getNextOption()) != null) { + while ((opt = getNextOption()) != null) { switch (opt) { case ARG_V: case ARG_VERBOSE: @@ -5543,7 +5574,7 @@ public class UserManagerService extends IUserManager.Stub { criticalOnly = true; break; case ARG_MODE: - mode = Integer.parseInt(shell.getNextArgRequired()); + mode = Integer.parseInt(getNextArgRequired()); break; default: pw.println("Invalid option: " + opt); @@ -5551,15 +5582,17 @@ public class UserManagerService extends IUserManager.Stub { } } - Slog.d(LOG_TAG, "runReportPackageWhitelistProblems(): verbose=" + verbose + Slog.d(LOG_TAG, "runReportPackageAllowlistProblems(): verbose=" + verbose + ", criticalOnly=" + criticalOnly + ", mode=" + UserSystemPackageInstaller.modeToString(mode)); try (IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ")) { - mSystemPackageInstaller.dumpPackageWhitelistProblems(ipw, mode, verbose, criticalOnly); + mSystemPackageInstaller.dumpPackageWhitelistProblems(ipw, mode, verbose, + criticalOnly); } return 0; } + } @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { @@ -6254,40 +6287,6 @@ public class UserManagerService extends IUserManager.Stub { } } - private class Shell extends ShellCommand { - @Override - public int onCommand(String cmd) { - return onShellCommand(this, cmd); - } - - @Override - public void onHelp() { - final PrintWriter pw = getOutPrintWriter(); - pw.printf("User manager (user) commands:\n"); - - pw.printf("%s%s\n", PREFIX_HELP_COMMAND, CMD_HELP); - pw.printf("%sPrints this help text.\n\n", PREFIX_HELP_DESCRIPTION); - - pw.printf("%s%s [%s] [%s]\n", PREFIX_HELP_COMMAND, CMD_LIST, ARG_V, ARG_ALL); - pw.printf("%sPrints all users on the system.\n\n", PREFIX_HELP_DESCRIPTION); - - pw.printf("%s%s [%s | %s] [%s] [%s MODE]\n", PREFIX_HELP_COMMAND, - CMD_REPORT_SYSTEM_USER_PACKAGE_ALLOWLIST_PROBLEMS, - ARG_V, ARG_VERBOSE, ARG_CRITICAL_ONLY, ARG_MODE); - - pw.printf("%sReports all issues on user-type package allowlist XML files. Options:\n", - PREFIX_HELP_DESCRIPTION); - pw.printf("%s%s | %s: shows extra info, like number of issues\n", - PREFIX_HELP_DESCRIPTION, ARG_V, ARG_VERBOSE); - pw.printf("%s%s: show only critical issues, excluding warnings\n", - PREFIX_HELP_DESCRIPTION, ARG_CRITICAL_ONLY); - pw.printf("%s%s MODE: shows what errors would be if device used mode MODE\n" - + "%s(where MODE is the allowlist mode integer as defined by " - + "config_userTypePackageWhitelistMode)\n\n", - PREFIX_HELP_DESCRIPTION, ARG_MODE, PREFIX_HELP_DESCRIPTION_EXTRA_LINES); - } - } - private static void debug(String message) { Slog.d(LOG_TAG, message + (DBG_WITH_STACKTRACE ? " called at\n" + Debug.getCallers(10, " ") : ""));