From a76070e14647cc811c2261b2d33cd95850711f47 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Mon, 13 May 2019 16:27:30 -0700 Subject: [PATCH] Allow "cmd overlay list" to list all overlays Listing the overlays using the OMS shell command should print all overlays (besides static android RROs). Bug: 132645448 Test: adb shell cmd overlay list Test: adb shell cmd overlay list android Change-Id: I17e90e2ad90bce40d3aebed56a429f46f09673db --- .../server/om/OverlayManagerShellCommand.java | 73 ++++++++++++------- 1 file changed, 48 insertions(+), 25 deletions(-) diff --git a/services/core/java/com/android/server/om/OverlayManagerShellCommand.java b/services/core/java/com/android/server/om/OverlayManagerShellCommand.java index 7ee167adfd380..99f5839785351 100644 --- a/services/core/java/com/android/server/om/OverlayManagerShellCommand.java +++ b/services/core/java/com/android/server/om/OverlayManagerShellCommand.java @@ -120,42 +120,65 @@ final class OverlayManagerShellCommand extends ShellCommand { return 1; } } - final String packageName = getNextArg(); + final String packageName = getNextArg(); + if (packageName != null) { + List overlaysForTarget = mInterface.getOverlayInfosForTarget( + packageName, userId); + + // If the package is not targeted by any overlays, check if the package is an overlay. + if (overlaysForTarget.isEmpty()) { + final OverlayInfo info = mInterface.getOverlayInfo(packageName, userId); + if (info != null) { + printListOverlay(out, info); + } + return 0; + } + + out.println(packageName); + + // Print the overlays for the target. + final int n = overlaysForTarget.size(); + for (int i = 0; i < n; i++) { + printListOverlay(out, overlaysForTarget.get(i)); + } + + return 0; + } + + // Print all overlays grouped by target package name. final Map> allOverlays = mInterface.getAllOverlays(userId); for (final String targetPackageName : allOverlays.keySet()) { - if (targetPackageName.equals(packageName)) { - out.println(targetPackageName); - } + out.println(targetPackageName); + List overlaysForTarget = allOverlays.get(targetPackageName); final int n = overlaysForTarget.size(); for (int i = 0; i < n; i++) { - final OverlayInfo oi = overlaysForTarget.get(i); - if (!targetPackageName.equals(packageName) && !oi.packageName.equals(packageName)) { - continue; - } - String status; - switch (oi.state) { - case OverlayInfo.STATE_ENABLED_STATIC: - case OverlayInfo.STATE_ENABLED: - status = "[x]"; - break; - case OverlayInfo.STATE_DISABLED: - status = "[ ]"; - break; - default: - status = "---"; - break; - } - out.println(String.format("%s %s", status, oi.packageName)); - } - if (targetPackageName.equals(packageName)) { - out.println(); + printListOverlay(out, overlaysForTarget.get(i)); } + out.println(); } + return 0; } + private void printListOverlay(PrintWriter out, OverlayInfo oi) { + String status; + switch (oi.state) { + case OverlayInfo.STATE_ENABLED_STATIC: + case OverlayInfo.STATE_ENABLED: + status = "[x]"; + break; + case OverlayInfo.STATE_DISABLED: + status = "[ ]"; + break; + default: + status = "---"; + break; + } + out.println(String.format("%s %s", status, oi.packageName)); + } + private int runEnableDisable(final boolean enable) throws RemoteException { final PrintWriter err = getErrPrintWriter();