From d6e4aa499a6cda1538afcdde780c7ecb47bd12ae Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Tue, 26 Apr 2016 13:51:07 -0700 Subject: [PATCH] Fix issue #28403313: Improve package manager query commands Change-Id: I69122cb2ba04e7d8e5e2ff1aaeb840a28dfc3e14 --- .../server/pm/PackageManagerShellCommand.java | 99 +++++++++++++++---- 1 file changed, 79 insertions(+), 20 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 8527fd40a8580..2b28f23ed8fe9 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -74,6 +74,8 @@ class PackageManagerShellCommand extends ShellCommand { final private WeakHashMap mResourceCache = new WeakHashMap(); int mTargetUser; + boolean mBrief; + boolean mComponents; PackageManagerShellCommand(PackageManagerService service) { mInterface = service; @@ -842,12 +844,20 @@ class PackageManagerShellCommand extends ShellCommand { private Intent parseIntentAndUser() throws URISyntaxException { mTargetUser = UserHandle.USER_CURRENT; + mBrief = false; + mComponents = false; Intent intent = Intent.parseCommandArgs(this, new Intent.CommandOptionHandler() { @Override public boolean handleOption(String opt, ShellCommand cmd) { if ("--user".equals(opt)) { mTargetUser = UserHandle.parseUserArg(cmd.getNextArgRequired()); return true; + } else if ("--brief".equals(opt)) { + mBrief = true; + return true; + } else if ("--components".equals(opt)) { + mComponents = true; + return true; } return false; } @@ -857,6 +867,34 @@ class PackageManagerShellCommand extends ShellCommand { return intent; } + private void printResolveInfo(PrintWriterPrinter pr, String prefix, ResolveInfo ri, + boolean brief, boolean components) { + if (brief || components) { + final ComponentName comp; + if (ri.activityInfo != null) { + comp = new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name); + } else if (ri.serviceInfo != null) { + comp = new ComponentName(ri.serviceInfo.packageName, ri.serviceInfo.name); + } else if (ri.providerInfo != null) { + comp = new ComponentName(ri.providerInfo.packageName, ri.providerInfo.name); + } else { + comp = null; + } + if (comp != null) { + if (!components) { + pr.println(prefix + "priority=" + ri.priority + + " preferredOrder=" + ri.preferredOrder + + " match=0x" + Integer.toHexString(ri.match) + + " specificIndex=" + ri.specificIndex + + " isDefault=" + ri.isDefault); + } + pr.println(prefix + comp.flattenToShortString()); + return; + } + } + ri.dump(pr, prefix); + } + private int runResolveActivity() { Intent intent; try { @@ -871,7 +909,7 @@ class PackageManagerShellCommand extends ShellCommand { pw.println("No activity found"); } else { PrintWriterPrinter pr = new PrintWriterPrinter(pw); - ri.dump(pr, ""); + printResolveInfo(pr, "", ri, mBrief, mComponents); } } catch (RemoteException e) { throw new RuntimeException("Failed calling service", e); @@ -893,11 +931,18 @@ class PackageManagerShellCommand extends ShellCommand { if (result == null || result.size() <= 0) { pw.println("No activities found"); } else { - pw.print(result.size()); pw.println(" activities found:"); - PrintWriterPrinter pr = new PrintWriterPrinter(pw); - for (int i=0; i