Issue #13308712: Add --checkin to package manager dump.
Change-Id: I50a559ea4bded47a792e1b5b319a5bbed41b4233
This commit is contained in:
@@ -10576,7 +10576,8 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
|
||||
DumpState dumpState = new DumpState();
|
||||
boolean fullPreferred = false;
|
||||
|
||||
boolean checkin = false;
|
||||
|
||||
String packageName = null;
|
||||
|
||||
int opti = 0;
|
||||
@@ -10590,7 +10591,8 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
// Right now we only know how to print all.
|
||||
} else if ("-h".equals(opt)) {
|
||||
pw.println("Package manager dump options:");
|
||||
pw.println(" [-h] [-f] [cmd] ...");
|
||||
pw.println(" [-h] [-f] [--checkin] [cmd] ...");
|
||||
pw.println(" --checkin: dump for a checkin");
|
||||
pw.println(" -f: print details of intent filters");
|
||||
pw.println(" -h: print this help");
|
||||
pw.println(" cmd may be one of:");
|
||||
@@ -10608,13 +10610,15 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
pw.println(" <package.name>: info about given package");
|
||||
pw.println(" k[eysets]: print known keysets");
|
||||
return;
|
||||
} else if ("--checkin".equals(opt)) {
|
||||
checkin = true;
|
||||
} else if ("-f".equals(opt)) {
|
||||
dumpState.setOptionEnabled(DumpState.OPTION_SHOW_FILTERS);
|
||||
} else {
|
||||
pw.println("Unknown argument: " + opt + "; use -h for help");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Is the caller requesting to dump a particular piece of data?
|
||||
if (opti < args.length) {
|
||||
String cmd = args[opti];
|
||||
@@ -10656,17 +10660,26 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
if (checkin) {
|
||||
pw.println("vers,1");
|
||||
}
|
||||
|
||||
// reader
|
||||
synchronized (mPackages) {
|
||||
if (dumpState.isDumping(DumpState.DUMP_VERIFIERS) && packageName == null) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println();
|
||||
pw.println("Verifiers:");
|
||||
pw.print(" Required: ");
|
||||
pw.print(mRequiredVerifierPackage);
|
||||
pw.print(" (uid=");
|
||||
pw.print(getPackageUid(mRequiredVerifierPackage, 0));
|
||||
pw.println(")");
|
||||
if (!checkin) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println();
|
||||
pw.println("Verifiers:");
|
||||
pw.print(" Required: ");
|
||||
pw.print(mRequiredVerifierPackage);
|
||||
pw.print(" (uid=");
|
||||
pw.print(getPackageUid(mRequiredVerifierPackage, 0));
|
||||
pw.println(")");
|
||||
} else if (mRequiredVerifierPackage != null) {
|
||||
pw.print("vrfy,"); pw.print(mRequiredVerifierPackage);
|
||||
pw.print(","); pw.println(getPackageUid(mRequiredVerifierPackage, 0));
|
||||
}
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_LIBS) && packageName == null) {
|
||||
@@ -10675,21 +10688,37 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
while (it.hasNext()) {
|
||||
String name = it.next();
|
||||
SharedLibraryEntry ent = mSharedLibraries.get(name);
|
||||
if (!printedHeader) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println();
|
||||
pw.println("Libraries:");
|
||||
printedHeader = true;
|
||||
}
|
||||
pw.print(" ");
|
||||
pw.print(name);
|
||||
pw.print(" -> ");
|
||||
if (ent.path != null) {
|
||||
pw.print("(jar) ");
|
||||
pw.print(ent.path);
|
||||
if (!checkin) {
|
||||
if (!printedHeader) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println();
|
||||
pw.println("Libraries:");
|
||||
printedHeader = true;
|
||||
}
|
||||
pw.print(" ");
|
||||
} else {
|
||||
pw.print("(apk) ");
|
||||
pw.print(ent.apk);
|
||||
pw.print("lib,");
|
||||
}
|
||||
pw.print(name);
|
||||
if (!checkin) {
|
||||
pw.print(" -> ");
|
||||
}
|
||||
if (ent.path != null) {
|
||||
if (!checkin) {
|
||||
pw.print("(jar) ");
|
||||
pw.print(ent.path);
|
||||
} else {
|
||||
pw.print(",jar,");
|
||||
pw.print(ent.path);
|
||||
}
|
||||
} else {
|
||||
if (!checkin) {
|
||||
pw.print("(apk) ");
|
||||
pw.print(ent.apk);
|
||||
} else {
|
||||
pw.print(",apk,");
|
||||
pw.print(ent.apk);
|
||||
}
|
||||
}
|
||||
pw.println();
|
||||
}
|
||||
@@ -10698,16 +10727,22 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
if (dumpState.isDumping(DumpState.DUMP_FEATURES) && packageName == null) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println();
|
||||
pw.println("Features:");
|
||||
if (!checkin) {
|
||||
pw.println("Features:");
|
||||
}
|
||||
Iterator<String> it = mAvailableFeatures.keySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
String name = it.next();
|
||||
pw.print(" ");
|
||||
if (!checkin) {
|
||||
pw.print(" ");
|
||||
} else {
|
||||
pw.print("feat,");
|
||||
}
|
||||
pw.println(name);
|
||||
}
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_RESOLVERS)) {
|
||||
if (!checkin && dumpState.isDumping(DumpState.DUMP_RESOLVERS)) {
|
||||
if (mActivities.dump(pw, dumpState.getTitlePrinted() ? "\nActivity Resolver Table:"
|
||||
: "Activity Resolver Table:", " ", packageName,
|
||||
dumpState.isOptionEnabled(DumpState.OPTION_SHOW_FILTERS))) {
|
||||
@@ -10730,7 +10765,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_PREFERRED)) {
|
||||
if (!checkin && dumpState.isDumping(DumpState.DUMP_PREFERRED)) {
|
||||
for (int i=0; i<mSettings.mPreferredActivities.size(); i++) {
|
||||
PreferredIntentResolver pir = mSettings.mPreferredActivities.valueAt(i);
|
||||
int user = mSettings.mPreferredActivities.keyAt(i);
|
||||
@@ -10744,7 +10779,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_PREFERRED_XML)) {
|
||||
if (!checkin && dumpState.isDumping(DumpState.DUMP_PREFERRED_XML)) {
|
||||
pw.flush();
|
||||
FileOutputStream fout = new FileOutputStream(fd);
|
||||
BufferedOutputStream str = new BufferedOutputStream(fout);
|
||||
@@ -10766,11 +10801,11 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_PERMISSIONS)) {
|
||||
if (!checkin && dumpState.isDumping(DumpState.DUMP_PERMISSIONS)) {
|
||||
mSettings.dumpPermissionsLPr(pw, packageName, dumpState);
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_PROVIDERS)) {
|
||||
if (!checkin && dumpState.isDumping(DumpState.DUMP_PROVIDERS)) {
|
||||
boolean printedSomething = false;
|
||||
for (PackageParser.Provider p : mProviders.mProviders.values()) {
|
||||
if (packageName != null && !packageName.equals(p.info.packageName)) {
|
||||
@@ -10807,19 +10842,19 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_KEYSETS)) {
|
||||
if (!checkin && dumpState.isDumping(DumpState.DUMP_KEYSETS)) {
|
||||
mSettings.mKeySetManager.dump(pw, packageName, dumpState);
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_PACKAGES)) {
|
||||
mSettings.dumpPackagesLPr(pw, packageName, dumpState);
|
||||
mSettings.dumpPackagesLPr(pw, packageName, dumpState, checkin);
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_SHARED_USERS)) {
|
||||
if (!checkin && dumpState.isDumping(DumpState.DUMP_SHARED_USERS)) {
|
||||
mSettings.dumpSharedUsersLPr(pw, packageName, dumpState);
|
||||
}
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_MESSAGES) && packageName == null) {
|
||||
if (!checkin && dumpState.isDumping(DumpState.DUMP_MESSAGES) && packageName == null) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println();
|
||||
mSettings.dumpReadMessagesLPr(pw, dumpState);
|
||||
|
||||
@@ -2891,8 +2891,44 @@ final class Settings {
|
||||
ApplicationInfo.FLAG_CANT_SAVE_STATE, "CANT_SAVE_STATE",
|
||||
};
|
||||
|
||||
void dumpPackageLPr(PrintWriter pw, String prefix, PackageSetting ps, SimpleDateFormat sdf,
|
||||
Date date, List<UserInfo> users) {
|
||||
void dumpPackageLPr(PrintWriter pw, String prefix, String checkinTag, PackageSetting ps,
|
||||
SimpleDateFormat sdf, Date date, List<UserInfo> users) {
|
||||
if (checkinTag != null) {
|
||||
pw.print(checkinTag);
|
||||
pw.print(",");
|
||||
pw.print(ps.realName != null ? ps.realName : ps.name);
|
||||
pw.print(",");
|
||||
pw.print(ps.appId);
|
||||
pw.print(",");
|
||||
pw.print(ps.versionCode);
|
||||
pw.print(",");
|
||||
pw.print(ps.firstInstallTime);
|
||||
pw.print(",");
|
||||
pw.print(ps.lastUpdateTime);
|
||||
pw.print(",");
|
||||
pw.print(ps.installerPackageName != null ? ps.installerPackageName : "?");
|
||||
pw.println();
|
||||
for (UserInfo user : users) {
|
||||
pw.print(checkinTag);
|
||||
pw.print("-");
|
||||
pw.print("usr");
|
||||
pw.print(",");
|
||||
pw.print(user.id);
|
||||
pw.print(",");
|
||||
pw.print(ps.getInstalled(user.id) ? "I" : "i");
|
||||
pw.print(ps.getBlocked(user.id) ? "B" : "b");
|
||||
pw.print(ps.getStopped(user.id) ? "S" : "s");
|
||||
pw.print(ps.getNotLaunched(user.id) ? "l" : "L");
|
||||
pw.print(",");
|
||||
pw.print(ps.getEnabled(user.id));
|
||||
String lastDisabledAppCaller = ps.getLastDisabledAppCaller(user.id);
|
||||
pw.print(",");
|
||||
pw.print(lastDisabledAppCaller != null ? lastDisabledAppCaller : "?");
|
||||
pw.println();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
pw.print(prefix); pw.print("Package [");
|
||||
pw.print(ps.realName != null ? ps.realName : ps.name);
|
||||
pw.print("] (");
|
||||
@@ -3054,7 +3090,7 @@ final class Settings {
|
||||
}
|
||||
}
|
||||
|
||||
void dumpPackagesLPr(PrintWriter pw, String packageName, DumpState dumpState) {
|
||||
void dumpPackagesLPr(PrintWriter pw, String packageName, DumpState dumpState, boolean checkin) {
|
||||
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
final Date date = new Date();
|
||||
boolean printedSomething = false;
|
||||
@@ -3065,35 +3101,39 @@ final class Settings {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (packageName != null) {
|
||||
if (!checkin && packageName != null) {
|
||||
dumpState.setSharedUser(ps.sharedUser);
|
||||
}
|
||||
|
||||
if (!printedSomething) {
|
||||
if (!checkin && !printedSomething) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println();
|
||||
pw.println("Packages:");
|
||||
printedSomething = true;
|
||||
}
|
||||
dumpPackageLPr(pw, " ", ps, sdf, date, users);
|
||||
dumpPackageLPr(pw, " ", checkin ? "pkg" : null, ps, sdf, date, users);
|
||||
}
|
||||
|
||||
printedSomething = false;
|
||||
if (mRenamedPackages.size() > 0) {
|
||||
if (!checkin && mRenamedPackages.size() > 0) {
|
||||
for (final Map.Entry<String, String> e : mRenamedPackages.entrySet()) {
|
||||
if (packageName != null && !packageName.equals(e.getKey())
|
||||
&& !packageName.equals(e.getValue())) {
|
||||
continue;
|
||||
}
|
||||
if (!printedSomething) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println();
|
||||
pw.println("Renamed packages:");
|
||||
printedSomething = true;
|
||||
if (!checkin) {
|
||||
if (!printedSomething) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println();
|
||||
pw.println("Renamed packages:");
|
||||
printedSomething = true;
|
||||
}
|
||||
pw.print(" ");
|
||||
} else {
|
||||
pw.print("ren,");
|
||||
}
|
||||
pw.print(" ");
|
||||
pw.print(e.getKey());
|
||||
pw.print(" -> ");
|
||||
pw.print(checkin ? " -> " : ",");
|
||||
pw.println(e.getValue());
|
||||
}
|
||||
}
|
||||
@@ -3105,13 +3145,13 @@ final class Settings {
|
||||
&& !packageName.equals(ps.name)) {
|
||||
continue;
|
||||
}
|
||||
if (!printedSomething) {
|
||||
if (!checkin && !printedSomething) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println();
|
||||
pw.println("Hidden system packages:");
|
||||
printedSomething = true;
|
||||
}
|
||||
dumpPackageLPr(pw, " ", ps, sdf, date, users);
|
||||
dumpPackageLPr(pw, " ", checkin ? "dis" : null, ps, sdf, date, users);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user