Merge changes from topic "cmd_user_refactoring" into tm-dev

* changes:
  Improvements on UserManagerService ShellCommand implementation (3/4).
  Improvements on UserManagerService ShellCommand implementation (2/4).
This commit is contained in:
Felipe Leme
2022-03-22 00:12:19 +00:00
committed by Android (Google) Code Review

View File

@@ -5424,32 +5424,62 @@ public class UserManagerService extends IUserManager.Stub {
private static final String ARG_CRITICAL_ONLY = "--critical-only"; private static final String ARG_CRITICAL_ONLY = "--critical-only";
private static final String ARG_MODE = "--mode"; 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) { if (cmd == null) {
return shell.handleDefaultCommands(cmd); return handleDefaultCommands(cmd);
} }
final PrintWriter pw = shell.getOutPrintWriter();
try { try {
switch(cmd) { switch(cmd) {
case CMD_LIST: case CMD_LIST:
return runList(pw, shell); return runList();
case CMD_REPORT_SYSTEM_USER_PACKAGE_ALLOWLIST_PROBLEMS: case CMD_REPORT_SYSTEM_USER_PACKAGE_ALLOWLIST_PROBLEMS:
return runReportPackageWhitelistProblems(pw, shell); return runReportPackageAllowlistProblems();
default: default:
return shell.handleDefaultCommands(cmd); return handleDefaultCommands(cmd);
} }
} catch (RemoteException e) { } catch (RemoteException e) {
pw.println("Remote exception: " + e); getOutPrintWriter().println("Remote exception: " + e);
} }
return -1; return -1;
} }
private int runList(PrintWriter pw, Shell shell) throws RemoteException { private int runList() throws RemoteException {
final PrintWriter pw = getOutPrintWriter();
boolean all = false; boolean all = false;
boolean verbose = false; boolean verbose = false;
String opt; String opt;
while ((opt = shell.getNextOption()) != null) { while ((opt = getNextOption()) != null) {
switch (opt) { switch (opt) {
case ARG_V: case ARG_V:
verbose = true; 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 verbose = false;
boolean criticalOnly = false; boolean criticalOnly = false;
int mode = UserSystemPackageInstaller.USER_TYPE_PACKAGE_WHITELIST_MODE_NONE; int mode = UserSystemPackageInstaller.USER_TYPE_PACKAGE_WHITELIST_MODE_NONE;
String opt; String opt;
while ((opt = shell.getNextOption()) != null) { while ((opt = getNextOption()) != null) {
switch (opt) { switch (opt) {
case ARG_V: case ARG_V:
case ARG_VERBOSE: case ARG_VERBOSE:
@@ -5543,7 +5574,7 @@ public class UserManagerService extends IUserManager.Stub {
criticalOnly = true; criticalOnly = true;
break; break;
case ARG_MODE: case ARG_MODE:
mode = Integer.parseInt(shell.getNextArgRequired()); mode = Integer.parseInt(getNextArgRequired());
break; break;
default: default:
pw.println("Invalid option: " + opt); 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 + ", criticalOnly=" + criticalOnly
+ ", mode=" + UserSystemPackageInstaller.modeToString(mode)); + ", mode=" + UserSystemPackageInstaller.modeToString(mode));
try (IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ")) { try (IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " ")) {
mSystemPackageInstaller.dumpPackageWhitelistProblems(ipw, mode, verbose, criticalOnly); mSystemPackageInstaller.dumpPackageWhitelistProblems(ipw, mode, verbose,
criticalOnly);
} }
return 0; return 0;
} }
}
@Override @Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 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) { private static void debug(String message) {
Slog.d(LOG_TAG, message Slog.d(LOG_TAG, message
+ (DBG_WITH_STACKTRACE ? " called at\n" + Debug.getCallers(10, " ") : "")); + (DBG_WITH_STACKTRACE ? " called at\n" + Debug.getCallers(10, " ") : ""));