diff options
| -rw-r--r-- | services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java index 7ea42daa617b..28d6d07e583d 100644 --- a/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/notification/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -831,6 +831,77 @@ public class NotificationManagerServiceTest extends NotificationTestCase { } @Test + public void testCancelAllCancelNotificationsFromListener_ForegroundServiceFlag() + throws Exception { + final NotificationRecord parent = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord child = generateNotificationRecord( + mTestNotificationChannel, 2, "group", false); + final NotificationRecord child2 = generateNotificationRecord( + mTestNotificationChannel, 3, "group", false); + child2.getNotification().flags |= Notification.FLAG_FOREGROUND_SERVICE; + final NotificationRecord newGroup = generateNotificationRecord( + mTestNotificationChannel, 4, "group2", false); + mNotificationManagerService.addNotification(parent); + mNotificationManagerService.addNotification(child); + mNotificationManagerService.addNotification(child2); + mNotificationManagerService.addNotification(newGroup); + mNotificationManagerService.getBinderService().cancelNotificationsFromListener(null, null); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(parent.sbn.getPackageName()); + assertEquals(0, notifs.length); + } + + @Test + public void testCancelAllCancelNotificationsFromListener_ForegroundServiceFlagWithParameter() + throws Exception { + final NotificationRecord parent = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord child = generateNotificationRecord( + mTestNotificationChannel, 2, "group", false); + final NotificationRecord child2 = generateNotificationRecord( + mTestNotificationChannel, 3, "group", false); + child2.getNotification().flags |= Notification.FLAG_FOREGROUND_SERVICE; + final NotificationRecord newGroup = generateNotificationRecord( + mTestNotificationChannel, 4, "group2", false); + mNotificationManagerService.addNotification(parent); + mNotificationManagerService.addNotification(child); + mNotificationManagerService.addNotification(child2); + mNotificationManagerService.addNotification(newGroup); + String[] keys = {parent.sbn.getKey(), child.sbn.getKey(), + child2.sbn.getKey(), newGroup.sbn.getKey()}; + mNotificationManagerService.getBinderService().cancelNotificationsFromListener(null, keys); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(parent.sbn.getPackageName()); + assertEquals(1, notifs.length); + } + + @Test + public void testUserInitiatedCancelAllWithGroup_ForegroundServiceFlag() throws Exception { + final NotificationRecord parent = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord child = generateNotificationRecord( + mTestNotificationChannel, 2, "group", false); + final NotificationRecord child2 = generateNotificationRecord( + mTestNotificationChannel, 3, "group", false); + child2.getNotification().flags |= Notification.FLAG_FOREGROUND_SERVICE; + final NotificationRecord newGroup = generateNotificationRecord( + mTestNotificationChannel, 4, "group2", false); + mNotificationManagerService.addNotification(parent); + mNotificationManagerService.addNotification(child); + mNotificationManagerService.addNotification(child2); + mNotificationManagerService.addNotification(newGroup); + mNotificationManagerService.mNotificationDelegate.onClearAll(mUid, Binder.getCallingPid(), + parent.getUserId()); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(parent.sbn.getPackageName()); + assertEquals(0, notifs.length); + } + + @Test public void testFindGroupNotificationsLocked() throws Exception { // make sure the same notification can be found in both lists and returned final NotificationRecord group1 = generateNotificationRecord( @@ -1692,4 +1763,157 @@ public class NotificationManagerServiceTest extends NotificationTestCase { preOPkg, NotificationChannel.DEFAULT_CHANNEL_ID); assertEquals(IMPORTANCE_UNSPECIFIED, defaultChannel.getImportance()); } + + @Test + public void testCancelAllNotifications_CancelsNoClearFlagOnGoing() throws Exception { + final NotificationRecord notif = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + notif.getNotification().flags |= Notification.FLAG_NO_CLEAR; + mNotificationManagerService.addNotification(notif); + mNotificationManagerService.cancelAllNotificationsInt(mUid, 0, PKG, null, 0, + Notification.FLAG_ONGOING_EVENT, true, notif.getUserId(), 0, null); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(notif.sbn.getPackageName()); + assertEquals(0, notifs.length); + } + + @Test + public void testCancelAllCancelNotificationsFromListener_NoClearFlagWithParameter() + throws Exception { + final NotificationRecord parent = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord child = generateNotificationRecord( + mTestNotificationChannel, 2, "group", false); + final NotificationRecord child2 = generateNotificationRecord( + mTestNotificationChannel, 3, "group", false); + child2.getNotification().flags |= Notification.FLAG_NO_CLEAR; + final NotificationRecord newGroup = generateNotificationRecord( + mTestNotificationChannel, 4, "group2", false); + mNotificationManagerService.addNotification(parent); + mNotificationManagerService.addNotification(child); + mNotificationManagerService.addNotification(child2); + mNotificationManagerService.addNotification(newGroup); + String[] keys = {parent.sbn.getKey(), child.sbn.getKey(), + child2.sbn.getKey(), newGroup.sbn.getKey()}; + mNotificationManagerService.getBinderService().cancelNotificationsFromListener(null, keys); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(parent.sbn.getPackageName()); + assertEquals(0, notifs.length); + } + + @Test + public void testAppInitiatedCancelAllNotifications_CancelsOnGoingFlag() throws Exception { + final StatusBarNotification sbn = generateNotificationRecord(null).sbn; + sbn.getNotification().flags |= Notification.FLAG_ONGOING_EVENT; + mBinderService.enqueueNotificationWithTag(PKG, "opPkg", "tag", + sbn.getId(), sbn.getNotification(), sbn.getUserId()); + mBinderService.cancelAllNotifications(PKG, sbn.getUserId()); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(sbn.getPackageName()); + assertEquals(0, notifs.length); + } + + @Test + public void testCancelAllNotifications_CancelsOnGoingFlag() throws Exception { + final NotificationRecord notif = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + notif.getNotification().flags |= Notification.FLAG_ONGOING_EVENT; + mNotificationManagerService.addNotification(notif); + mNotificationManagerService.cancelAllNotificationsInt(mUid, 0, PKG, null, 0, 0, true, + notif.getUserId(), 0, null); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(notif.sbn.getPackageName()); + assertEquals(0, notifs.length); + } + + @Test + public void testUserInitiatedCancelAllOnClearAll_OnGoingFlag() throws Exception { + final NotificationRecord notif = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + notif.getNotification().flags |= Notification.FLAG_ONGOING_EVENT; + mNotificationManagerService.addNotification(notif); + + mNotificationManagerService.mNotificationDelegate.onClearAll(mUid, Binder.getCallingPid(), + notif.getUserId()); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(notif.sbn.getPackageName()); + assertEquals(1, notifs.length); + } + + @Test + public void testCancelAllCancelNotificationsFromListener_OnGoingFlag() throws Exception { + final NotificationRecord parent = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord child = generateNotificationRecord( + mTestNotificationChannel, 2, "group", false); + final NotificationRecord child2 = generateNotificationRecord( + mTestNotificationChannel, 3, "group", false); + child2.getNotification().flags |= Notification.FLAG_ONGOING_EVENT; + final NotificationRecord newGroup = generateNotificationRecord( + mTestNotificationChannel, 4, "group2", false); + mNotificationManagerService.addNotification(parent); + mNotificationManagerService.addNotification(child); + mNotificationManagerService.addNotification(child2); + mNotificationManagerService.addNotification(newGroup); + mNotificationManagerService.getBinderService().cancelNotificationsFromListener(null, null); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(parent.sbn.getPackageName()); + assertEquals(1, notifs.length); + } + + @Test + public void testCancelAllCancelNotificationsFromListener_OnGoingFlagWithParameter() + throws Exception { + final NotificationRecord parent = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord child = generateNotificationRecord( + mTestNotificationChannel, 2, "group", false); + final NotificationRecord child2 = generateNotificationRecord( + mTestNotificationChannel, 3, "group", false); + child2.getNotification().flags |= Notification.FLAG_ONGOING_EVENT; + final NotificationRecord newGroup = generateNotificationRecord( + mTestNotificationChannel, 4, "group2", false); + mNotificationManagerService.addNotification(parent); + mNotificationManagerService.addNotification(child); + mNotificationManagerService.addNotification(child2); + mNotificationManagerService.addNotification(newGroup); + String[] keys = {parent.sbn.getKey(), child.sbn.getKey(), + child2.sbn.getKey(), newGroup.sbn.getKey()}; + mNotificationManagerService.getBinderService().cancelNotificationsFromListener(null, keys); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(parent.sbn.getPackageName()); + // Flags aren't checked in the cancel children call, + // so all of the notifications are canceled (expected value is 0) + assertEquals(0, notifs.length); + } + + @Test + public void testUserInitiatedCancelAllWithGroup_OnGoingFlag() throws Exception { + final NotificationRecord parent = generateNotificationRecord( + mTestNotificationChannel, 1, "group", true); + final NotificationRecord child = generateNotificationRecord( + mTestNotificationChannel, 2, "group", false); + final NotificationRecord child2 = generateNotificationRecord( + mTestNotificationChannel, 3, "group", false); + child2.getNotification().flags |= Notification.FLAG_ONGOING_EVENT; + final NotificationRecord newGroup = generateNotificationRecord( + mTestNotificationChannel, 4, "group2", false); + mNotificationManagerService.addNotification(parent); + mNotificationManagerService.addNotification(child); + mNotificationManagerService.addNotification(child2); + mNotificationManagerService.addNotification(newGroup); + mNotificationManagerService.mNotificationDelegate.onClearAll(mUid, Binder.getCallingPid(), + parent.getUserId()); + waitForIdle(); + StatusBarNotification[] notifs = + mBinderService.getActiveNotifications(parent.sbn.getPackageName()); + assertEquals(1, notifs.length); + } } |