From bd2899608c69691e4da65fac499c6fe228b9b86c Mon Sep 17 00:00:00 2001 From: yueg Date: Fri, 18 May 2018 11:43:36 -0700 Subject: Don't post throttled notifications again. Throttled missed call notification can be post again since they are in the newCalls list and not in activeNotifications list. We should record them and don't post again. Test: MissedCallNotifierTest, NotificationThrottlerTest PiperOrigin-RevId: 197177610 Change-Id: I1b03029663621f0a0c06951564eadf78bad016a1 --- .../dialer/notification/NotificationThrottler.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'java/com/android/dialer/notification/NotificationThrottler.java') diff --git a/java/com/android/dialer/notification/NotificationThrottler.java b/java/com/android/dialer/notification/NotificationThrottler.java index 329a084e8..1f60920c6 100644 --- a/java/com/android/dialer/notification/NotificationThrottler.java +++ b/java/com/android/dialer/notification/NotificationThrottler.java @@ -29,13 +29,15 @@ import com.android.dialer.logging.Logger; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * Utility to ensure that only a certain number of notifications are shown for a particular * notification type. Once the limit is reached, older notifications are cancelled. */ -/* package */ class NotificationThrottler { +class NotificationThrottler { /** * For gropued bundled notifications, the system UI will only display the last 8. For grouped * unbundled notifications, the system displays all notifications until a global maximum of 50 is @@ -47,14 +49,23 @@ import java.util.List; private static boolean didLogHighGlobalNotificationCountReached; - /* package */ static void throttle(@NonNull Context context, @NonNull Notification notification) { + /** + * For all the active notifications in the same group as the provided notification, cancel the + * earliest ones until the left ones is under limit. + * + * @param notification the provided notification to determine group + * @return a set of cancelled notification + */ + static Set throttle( + @NonNull Context context, @NonNull Notification notification) { Assert.isNotNull(context); Assert.isNotNull(notification); + Set throttledNotificationSet = new HashSet<>(); // No limiting for non-grouped notifications. String groupKey = notification.getGroup(); if (TextUtils.isEmpty(groupKey)) { - return; + return throttledNotificationSet; } NotificationManager notificationManager = context.getSystemService(NotificationManager.class); @@ -88,8 +99,10 @@ import java.util.List; List notifications = getSortedMatchingNotifications(context, groupKey); for (int i = 0; i < (count - MAX_NOTIFICATIONS_PER_TAG); i++) { notificationManager.cancel(notifications.get(i).getTag(), notifications.get(i).getId()); + throttledNotificationSet.add(notifications.get(i)); } } + return throttledNotificationSet; } private static List getSortedMatchingNotifications( -- cgit v1.2.3