Merge "Use an iterator in removeChannelNotifications rather than index." into sc-dev

This commit is contained in:
Yuri Lin
2021-04-27 20:40:09 +00:00
committed by Android (Google) Code Review
2 changed files with 14 additions and 7 deletions

View File

@@ -695,14 +695,15 @@ public class NotificationManagerService extends SystemService {
// Remove notifications with the specified user & channel ID.
public void removeChannelNotifications(String pkg, @UserIdInt int userId,
String channelId) {
for (int i = 0; i < mBuffer.size(); i++) {
final Pair<StatusBarNotification, Integer> pair = mBuffer.get(i);
Iterator<Pair<StatusBarNotification, Integer>> bufferIter = mBuffer.iterator();
while (bufferIter.hasNext()) {
final Pair<StatusBarNotification, Integer> pair = bufferIter.next();
if (pair.first != null
&& userId == pair.first.getNormalizedUserId()
&& pkg != null && pkg.equals(pair.first.getPackageName())
&& pair.first.getNotification() != null
&& Objects.equals(channelId, pair.first.getNotification().getChannelId())) {
mBuffer.remove(i);
bufferIter.remove();
}
}
}

View File

@@ -144,15 +144,21 @@ public class ArchiveTest extends UiServiceTestCase {
@Test
public void testRemoveChannelNotifications() {
List<String> expected = new ArrayList<>();
for (int i = 0; i < SIZE; i++) {
// Add one extra notification to the beginning to test when 2 adjacent notifications will be
// removed in the same pass.
StatusBarNotification sbn0 = getNotification("pkg", 0, UserHandle.of(USER_CURRENT));
mArchive.record(sbn0, REASON_CANCEL);
for (int i = 0; i < SIZE - 1; i++) {
StatusBarNotification sbn = getNotification("pkg", i, UserHandle.of(USER_CURRENT));
mArchive.record(sbn, REASON_CANCEL);
if (i != 3) {
// Will delete notification for this user in channel "test3".
if (i != 0 && i != SIZE - 2) {
// Will delete notification for this user in channel "test0", and also the last
// element in the list.
expected.add(sbn.getKey());
}
}
mArchive.removeChannelNotifications("pkg", USER_CURRENT, "test3");
mArchive.removeChannelNotifications("pkg", USER_CURRENT, "test0");
mArchive.removeChannelNotifications("pkg", USER_CURRENT, "test" + (SIZE - 2));
List<StatusBarNotification> actual = Arrays.asList(mArchive.getArray(SIZE, true));
assertThat(actual).hasSize(expected.size());
for (StatusBarNotification sbn : actual) {