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
This commit is contained in:
Ryan Mitchell
2019-05-13 16:27:30 -07:00
parent c3e76141ea
commit a76070e146

View File

@@ -120,42 +120,65 @@ final class OverlayManagerShellCommand extends ShellCommand {
return 1;
}
}
final String packageName = getNextArg();
final String packageName = getNextArg();
if (packageName != null) {
List<OverlayInfo> 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<String, List<OverlayInfo>> allOverlays = mInterface.getAllOverlays(userId);
for (final String targetPackageName : allOverlays.keySet()) {
if (targetPackageName.equals(packageName)) {
out.println(targetPackageName);
}
out.println(targetPackageName);
List<OverlayInfo> 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();