Loading services/core/java/com/android/server/pm/ModuleInfoProvider.java +23 −1 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.os.RemoteException; import android.os.UserHandle; import android.os.UserHandle; import android.text.TextUtils; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import android.util.Slog; import com.android.internal.R; import com.android.internal.R; Loading @@ -39,6 +40,7 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.io.IOException; import java.util.ArrayList; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.List; import java.util.Map; import java.util.Map; Loading Loading @@ -165,7 +167,27 @@ public class ModuleInfoProvider { throw new IllegalStateException("Call to getInstalledModules before metadata loaded"); throw new IllegalStateException("Call to getInstalledModules before metadata loaded"); } } return new ArrayList<>(mModuleInfo.values()); ArrayList<ModuleInfo> allModules = new ArrayList<>(mModuleInfo.values()); if ((flags & PackageManager.MATCH_ALL) != 0) { return allModules; } ArraySet<String> allPackages; try { allPackages = new ArraySet<>(mPackageManager.getAllPackages()); } catch (RemoteException e) { Slog.w(TAG, "Unable to retrieve all package names", e); return Collections.emptyList(); } ArrayList<ModuleInfo> installedModules = new ArrayList<>(allPackages.size()); for (int i = allModules.size() - 1; i >= 0; --i) { ModuleInfo mi = allModules.get(i); if (allPackages.contains(mi.getPackageName())) { installedModules.add(mi); } } return installedModules; } } ModuleInfo getModuleInfo(String packageName, int flags) { ModuleInfo getModuleInfo(String packageName, int flags) { Loading services/core/java/com/android/server/pm/PackageManagerShellCommand.java +52 −0 Original line number Original line Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageInstaller; import android.content.pm.IPackageInstaller; import android.content.pm.IPackageManager; import android.content.pm.IPackageManager; import android.content.pm.InstrumentationInfo; import android.content.pm.InstrumentationInfo; import android.content.pm.ModuleInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller.SessionInfo; import android.content.pm.PackageInstaller.SessionInfo; Loading Loading @@ -273,6 +274,8 @@ class PackageManagerShellCommand extends ShellCommand { return uninstallSystemUpdates(); return uninstallSystemUpdates(); case "rollback-app": case "rollback-app": return runRollbackApp(); return runRollbackApp(); case "get-moduleinfo": return runGetModuleInfo(); default: { default: { String nextArg = getNextArg(); String nextArg = getNextArg(); if (nextArg == null) { if (nextArg == null) { Loading @@ -295,6 +298,49 @@ class PackageManagerShellCommand extends ShellCommand { return -1; return -1; } } /** * Shows module info * * Usage: get-moduleinfo [--all | --installed] [module-name] * Example: get-moduleinfo, get-moduleinfo --all, get-moduleinfo xyz */ private int runGetModuleInfo() { final PrintWriter pw = getOutPrintWriter(); int flags = 0; String opt; while ((opt = getNextOption()) != null) { switch (opt) { case "--all": flags |= PackageManager.MATCH_ALL; break; case "--installed": break; default: pw.println("Error: Unknown option: " + opt); return -1; } } String moduleName = getNextArg(); try { if (moduleName != null) { ModuleInfo m = mInterface.getModuleInfo(moduleName, flags); pw.println(m.toString() + " packageName: " + m.getPackageName()); } else { List<ModuleInfo> modules = mInterface.getInstalledModules(flags); for (ModuleInfo m: modules) { pw.println(m.toString() + " packageName: " + m.getPackageName()); } } } catch (RemoteException e) { pw.println("Failure [" + e.getClass().getName() + " - " + e.getMessage() + "]"); return -1; } return 1; } private int getStagedSessions() { private int getStagedSessions() { final PrintWriter pw = getOutPrintWriter(); final PrintWriter pw = getOutPrintWriter(); try { try { Loading Loading @@ -3205,6 +3251,12 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" Remove updates to all system applications and fall back to their /system " + pw.println(" Remove updates to all system applications and fall back to their /system " + "version."); "version."); pw.println(); pw.println(); pw.println(" get-moduleinfo [--all | --installed] [module-name]"); pw.println(" Displays module info. If module-name is specified only that info is shown"); pw.println(" By default, without any argument only installed modules are shown."); pw.println(" --all: show all module info"); pw.println(" --installed: show only installed modules"); pw.println(""); Intent.printIntentArgsHelp(pw , ""); Intent.printIntentArgsHelp(pw , ""); } } Loading Loading
services/core/java/com/android/server/pm/ModuleInfoProvider.java +23 −1 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.os.RemoteException; import android.os.UserHandle; import android.os.UserHandle; import android.text.TextUtils; import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; import android.util.Slog; import com.android.internal.R; import com.android.internal.R; Loading @@ -39,6 +40,7 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.io.IOException; import java.util.ArrayList; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.List; import java.util.Map; import java.util.Map; Loading Loading @@ -165,7 +167,27 @@ public class ModuleInfoProvider { throw new IllegalStateException("Call to getInstalledModules before metadata loaded"); throw new IllegalStateException("Call to getInstalledModules before metadata loaded"); } } return new ArrayList<>(mModuleInfo.values()); ArrayList<ModuleInfo> allModules = new ArrayList<>(mModuleInfo.values()); if ((flags & PackageManager.MATCH_ALL) != 0) { return allModules; } ArraySet<String> allPackages; try { allPackages = new ArraySet<>(mPackageManager.getAllPackages()); } catch (RemoteException e) { Slog.w(TAG, "Unable to retrieve all package names", e); return Collections.emptyList(); } ArrayList<ModuleInfo> installedModules = new ArrayList<>(allPackages.size()); for (int i = allModules.size() - 1; i >= 0; --i) { ModuleInfo mi = allModules.get(i); if (allPackages.contains(mi.getPackageName())) { installedModules.add(mi); } } return installedModules; } } ModuleInfo getModuleInfo(String packageName, int flags) { ModuleInfo getModuleInfo(String packageName, int flags) { Loading
services/core/java/com/android/server/pm/PackageManagerShellCommand.java +52 −0 Original line number Original line Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.content.pm.IPackageDataObserver; import android.content.pm.IPackageInstaller; import android.content.pm.IPackageInstaller; import android.content.pm.IPackageManager; import android.content.pm.IPackageManager; import android.content.pm.InstrumentationInfo; import android.content.pm.InstrumentationInfo; import android.content.pm.ModuleInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller; import android.content.pm.PackageInstaller.SessionInfo; import android.content.pm.PackageInstaller.SessionInfo; Loading Loading @@ -273,6 +274,8 @@ class PackageManagerShellCommand extends ShellCommand { return uninstallSystemUpdates(); return uninstallSystemUpdates(); case "rollback-app": case "rollback-app": return runRollbackApp(); return runRollbackApp(); case "get-moduleinfo": return runGetModuleInfo(); default: { default: { String nextArg = getNextArg(); String nextArg = getNextArg(); if (nextArg == null) { if (nextArg == null) { Loading @@ -295,6 +298,49 @@ class PackageManagerShellCommand extends ShellCommand { return -1; return -1; } } /** * Shows module info * * Usage: get-moduleinfo [--all | --installed] [module-name] * Example: get-moduleinfo, get-moduleinfo --all, get-moduleinfo xyz */ private int runGetModuleInfo() { final PrintWriter pw = getOutPrintWriter(); int flags = 0; String opt; while ((opt = getNextOption()) != null) { switch (opt) { case "--all": flags |= PackageManager.MATCH_ALL; break; case "--installed": break; default: pw.println("Error: Unknown option: " + opt); return -1; } } String moduleName = getNextArg(); try { if (moduleName != null) { ModuleInfo m = mInterface.getModuleInfo(moduleName, flags); pw.println(m.toString() + " packageName: " + m.getPackageName()); } else { List<ModuleInfo> modules = mInterface.getInstalledModules(flags); for (ModuleInfo m: modules) { pw.println(m.toString() + " packageName: " + m.getPackageName()); } } } catch (RemoteException e) { pw.println("Failure [" + e.getClass().getName() + " - " + e.getMessage() + "]"); return -1; } return 1; } private int getStagedSessions() { private int getStagedSessions() { final PrintWriter pw = getOutPrintWriter(); final PrintWriter pw = getOutPrintWriter(); try { try { Loading Loading @@ -3205,6 +3251,12 @@ class PackageManagerShellCommand extends ShellCommand { pw.println(" Remove updates to all system applications and fall back to their /system " + pw.println(" Remove updates to all system applications and fall back to their /system " + "version."); "version."); pw.println(); pw.println(); pw.println(" get-moduleinfo [--all | --installed] [module-name]"); pw.println(" Displays module info. If module-name is specified only that info is shown"); pw.println(" By default, without any argument only installed modules are shown."); pw.println(" --all: show all module info"); pw.println(" --installed: show only installed modules"); pw.println(""); Intent.printIntentArgsHelp(pw , ""); Intent.printIntentArgsHelp(pw , ""); } } Loading