From ba9c717cad6865b71a8b42be71e2a34b8259e4ea Mon Sep 17 00:00:00 2001 From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com> Date: Thu, 29 Dec 2022 17:35:42 -0800 Subject: [PATCH 1/2] Fix clearing all notifications when dismissing only one Previously, swiping away the latest notifications (when 4+ are present) would clear all notifications. Fix allows for individual dismissal only of those swiped. --- .../src/main/java/com/onesignal/NotificationSummaryManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OneSignalSDK/onesignal/src/main/java/com/onesignal/NotificationSummaryManager.java b/OneSignalSDK/onesignal/src/main/java/com/onesignal/NotificationSummaryManager.java index 7103b84fb6..5829595230 100644 --- a/OneSignalSDK/onesignal/src/main/java/com/onesignal/NotificationSummaryManager.java +++ b/OneSignalSDK/onesignal/src/main/java/com/onesignal/NotificationSummaryManager.java @@ -65,7 +65,7 @@ private static Cursor internalUpdateSummaryNotificationAfterChildRemoved(Context // If all individual notifications consumed // - Remove summary notification from the shade. // - Mark summary notification as consumed. - if (notificationsInGroup == 0) { + if (notificationsInGroup == 0 && !group.equals(OneSignalNotificationManager.getGrouplessSummaryKey())) { cursor.close(); Integer androidNotifId = getSummaryNotificationId(db, group); From 7c199a63d8938891246eb7b5bba1bf3f251d7274 Mon Sep 17 00:00:00 2001 From: Jenna Antilla <46546946+jennantilla@users.noreply.github.com> Date: Thu, 29 Dec 2022 17:38:05 -0800 Subject: [PATCH 2/2] Add unit test for dismissing individual groupless summary notifications --- .../onesignal/GenerateNotificationRunner.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/OneSignalSDK/unittest/src/test/java/com/test/onesignal/GenerateNotificationRunner.java b/OneSignalSDK/unittest/src/test/java/com/test/onesignal/GenerateNotificationRunner.java index 7775bce82c..66bcc82014 100644 --- a/OneSignalSDK/unittest/src/test/java/com/test/onesignal/GenerateNotificationRunner.java +++ b/OneSignalSDK/unittest/src/test/java/com/test/onesignal/GenerateNotificationRunner.java @@ -74,7 +74,6 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.os.SystemClock; import android.util.Log; import androidx.annotation.NonNull; @@ -450,6 +449,34 @@ public void testGrouplessSummaryNotificationIsDismissedOnClear() throws Exceptio assertEquals(0, postedNotifs.size()); } + @Test + @Config(sdk = Build.VERSION_CODES.N, shadows = { ShadowGenerateNotification.class }) + public void testIndividualGrouplessSummaryNotificationDismissal() throws Exception { + OneSignal.setAppId("b2f7f966-d8cc-11e4-bed1-df8f05be55ba"); + OneSignal.initWithContext(blankActivity.getApplicationContext()); + threadAndTaskWait(); + + // Add 4 groupless notifications + postNotificationWithOptionalGroup(4, null); + threadAndTaskWait(); + + // Obtain the posted notifications + Map postedNotifs = ShadowRoboNotificationManager.notifications; + Iterator> iterator = postedNotifs.entrySet().iterator(); + Map.Entry entry = iterator.next(); + Map.Entry entry2 = iterator.next(); + Map.Entry entry3 = iterator.next(); + Map.Entry entry4 = iterator.next(); + Integer id4 = entry4.getKey(); + assertNotNull(id4); + + assertEquals(5, postedNotifs.size()); + // Clear a OneSignal Notification + OneSignal.removeNotification(id4); + threadAndTaskWait(); + assertEquals(4, postedNotifs.size()); + } + @Test @Config(sdk = Build.VERSION_CODES.LOLLIPOP, shadows = { ShadowGenerateNotification.class }) public void testNotifDismissAllOnGroupSummaryClickForAndroidUnderM() throws Exception {