Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96000b20 authored by Varun Shah's avatar Varun Shah
Browse files

Fix UsageStats dump NPEs.

Update the dump method to handle locked users properly.

Fixes: 149019903
Test: manual (adb shell dumpsys usagestats)
Change-Id: I86e7cfe01bb485f2125c84e6f1013e20b5ac9ba4
parent 66660415
Loading
Loading
Loading
Loading
+22 −8
Original line number Diff line number Diff line
@@ -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,12 +1206,14 @@ public class UsageStatsService extends SystemService implements
                idpw.printPair("user", userId);
                idpw.println();
                idpw.increaseIndent();
                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;
    }