Refactor Archive-related bit of dumpImpl into Archive.

This allows for actually locking the buffer iteration with mBufferLock to avoid accidental concurrent access.

Test: atest NotificationManagerServiceTest; manually inspected dumpsys
Bug: 186860793
Change-Id: I6a97a74833f57ec45c118fcfc63f628703ec2557
This commit is contained in:
Yuri Lin
2021-05-05 14:45:11 -04:00
parent fa50665620
commit 9bb258dfbb

View File

@@ -645,7 +645,7 @@ public class NotificationManagerService extends SystemService {
sb.append("Archive (");
sb.append(N);
sb.append(" notification");
sb.append((N==1)?")":"s)");
sb.append((N == 1) ? ")" : "s)");
return sb.toString();
}
@@ -718,6 +718,22 @@ public class NotificationManagerService extends SystemService {
}
}
}
void dumpImpl(PrintWriter pw, @NonNull DumpFilter filter) {
synchronized (mBufferLock) {
Iterator<Pair<StatusBarNotification, Integer>> iter = descendingIterator();
int i = 0;
while (iter.hasNext()) {
final StatusBarNotification sbn = iter.next().first;
if (filter != null && !filter.matches(sbn)) continue;
pw.println(" " + sbn);
if (++i >= 5) {
if (iter.hasNext()) pw.println(" ...");
break;
}
}
}
}
}
void loadDefaultApprovedServices(int userId) {
@@ -5928,17 +5944,7 @@ public class NotificationManagerService extends SystemService {
+ mPreferencesHelper.shouldHideSilentStatusIcons());
}
pw.println(" mArchive=" + mArchive.toString());
Iterator<Pair<StatusBarNotification, Integer>> iter = mArchive.descendingIterator();
int j=0;
while (iter.hasNext()) {
final StatusBarNotification sbn = iter.next().first;
if (filter != null && !filter.matches(sbn)) continue;
pw.println(" " + sbn);
if (++j >= 5) {
if (iter.hasNext()) pw.println(" ...");
break;
}
}
mArchive.dumpImpl(pw, filter);
if (!zenOnly) {
N = mEnqueuedNotifications.size();