Fix UsageStats dump NPEs.

Update the dump method to handle locked users properly.

Fixes: 149019903
Test: manual (adb shell dumpsys usagestats)
Change-Id: I86e7cfe01bb485f2125c84e6f1013e20b5ac9ba4
This commit is contained in:
Varun Shah
2020-02-11 11:22:56 -08:00
parent 6666041589
commit 96000b20cd

View File

@@ -1132,7 +1132,11 @@ public class UsageStatsService extends SystemService implements
// dump everything for all users
final int numUsers = mUserState.size();
for (int user = 0; user < numUsers; user++) {
ipw.println("user=" + mUserState.keyAt(user));
final int userId = mUserState.keyAt(user);
if (!mUserUnlockedStates.get(userId)) {
continue;
}
ipw.println("user=" + userId);
ipw.increaseIndent();
mUserState.valueAt(user).dumpFile(ipw, null);
ipw.decreaseIndent();
@@ -1153,7 +1157,11 @@ public class UsageStatsService extends SystemService implements
// dump info for all users
final int numUsers = mUserState.size();
for (int user = 0; user < numUsers; user++) {
ipw.println("user=" + mUserState.keyAt(user));
final int userId = mUserState.keyAt(user);
if (!mUserUnlockedStates.get(userId)) {
continue;
}
ipw.println("user=" + userId);
ipw.increaseIndent();
mUserState.valueAt(user).dumpDatabaseInfo(ipw);
ipw.decreaseIndent();
@@ -1198,11 +1206,13 @@ public class UsageStatsService extends SystemService implements
idpw.printPair("user", userId);
idpw.println();
idpw.increaseIndent();
if (checkin) {
mUserState.valueAt(i).checkin(idpw);
} else {
mUserState.valueAt(i).dump(idpw, pkg, compact);
idpw.println();
if (mUserUnlockedStates.get(userId)) {
if (checkin) {
mUserState.valueAt(i).checkin(idpw);
} else {
mUserState.valueAt(i).dump(idpw, pkg, compact);
idpw.println();
}
}
mAppStandby.dumpUser(idpw, userId, pkg);
idpw.decreaseIndent();
@@ -1224,7 +1234,7 @@ public class UsageStatsService extends SystemService implements
private int parseUserIdFromArgs(String[] args, int index, IndentingPrintWriter ipw) {
final int userId;
try {
userId = Integer.valueOf(args[index + 1]);
userId = Integer.parseInt(args[index + 1]);
} catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
ipw.println("invalid user specified.");
return UserHandle.USER_NULL;
@@ -1233,6 +1243,10 @@ public class UsageStatsService extends SystemService implements
ipw.println("the specified user does not exist.");
return UserHandle.USER_NULL;
}
if (!mUserUnlockedStates.get(userId)) {
ipw.println("the specified user is currently in a locked state.");
return UserHandle.USER_NULL;
}
return userId;
}