From 74c69a07999b1dcfc3746005f97fa4392c486216 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 31 Dec 2024 00:25:58 -0600 Subject: [PATCH] Don't cancel bundle for single notification --- .../notifications/NotificationManager.kt | 61 +++++++++++++------ 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/tasks/notifications/NotificationManager.kt b/app/src/main/java/org/tasks/notifications/NotificationManager.kt index 20bc6584e..2527a2b09 100644 --- a/app/src/main/java/org/tasks/notifications/NotificationManager.kt +++ b/app/src/main/java/org/tasks/notifications/NotificationManager.kt @@ -85,20 +85,22 @@ class NotificationManager @Inject constructor( notify = false, nonStop = false, fiveTimes = false, - newNotifications = emptyList()) + newNotifications = emptyList(), + ) createNotifications( - notifications, + notifications = notifications, alert = false, nonstop = false, fiveTimes = false, - useGroupKey = true) + ) } else { createNotifications( - notifications, + notifications = notifications, alert = false, nonstop = false, fiveTimes = false, - useGroupKey = false) + useGroupKey = false, + ) cancelSummaryNotification() } } @@ -113,38 +115,45 @@ class NotificationManager @Inject constructor( val totalCount = existingNotifications.size + newNotifications.size when { totalCount == 0 -> cancelSummaryNotification() - totalCount == 1 -> { - val notifications = existingNotifications + newNotifications - createNotifications(notifications, alert, nonstop, fiveTimes, false) - cancelSummaryNotification() - } preferences.bundleNotifications() -> { updateSummary( notify = false, nonStop = false, fiveTimes = false, - newNotifications = emptyList()) + newNotifications = emptyList(), + ) if (existingNotifications.size == 1) { createNotifications( - existingNotifications, + notifications = existingNotifications, alert = false, nonstop = false, fiveTimes = false, - useGroupKey = true) + ) } if (newNotifications.size == 1) { - createNotifications(newNotifications, alert, nonstop, fiveTimes, true) + createNotifications( + notifications = newNotifications, + alert = alert, + nonstop = nonstop, + fiveTimes = fiveTimes, + ) } else { createNotifications( - newNotifications, + notifications = newNotifications, alert = false, nonstop = false, fiveTimes = false, - useGroupKey = true) + ) updateSummary(alert, nonstop, fiveTimes, newNotifications) } } - else -> createNotifications(newNotifications, alert, nonstop, fiveTimes, false) + else -> createNotifications( + notifications = newNotifications, + alert = alert, + nonstop = nonstop, + fiveTimes = fiveTimes, + useGroupKey = false, + ) } localBroadcastManager.broadcastRefresh() } @@ -154,7 +163,7 @@ class NotificationManager @Inject constructor( alert: Boolean, nonstop: Boolean, fiveTimes: Boolean, - useGroupKey: Boolean + useGroupKey: Boolean = true, ) { if (permissionChecker.canNotify()) { preferences.warnNotificationsDisabled = true @@ -162,6 +171,11 @@ class NotificationManager @Inject constructor( Timber.w("Notifications disabled") return } + if (notifications.isEmpty()) { + Timber.d("No notifications to post") + return + } + Timber.d("Posting notifications alert=$alert nonstop=$nonstop fiveTimes=$fiveTimes useGroupKey=$useGroupKey\n${notifications.joinToString("\n")}") var alert = alert for (notification in notifications) { val builder = getTaskNotification(notification) @@ -186,7 +200,8 @@ class NotificationManager @Inject constructor( builder: NotificationCompat.Builder, alert: Boolean, nonstop: Boolean, - fiveTimes: Boolean) { + fiveTimes: Boolean, + ) { if (preUpsideDownCake()) { builder.setLocalOnly(!preferences.getBoolean(R.string.p_wearable_notifications, true)) } @@ -232,13 +247,18 @@ class NotificationManager @Inject constructor( } private suspend fun updateSummary( - notify: Boolean, nonStop: Boolean, fiveTimes: Boolean, newNotifications: List) { + notify: Boolean, + nonStop: Boolean, + fiveTimes: Boolean, + newNotifications: List, + ) { val tasks = taskDao.activeNotifications() val taskCount = tasks.size if (taskCount == 0) { cancelSummaryNotification() return } + Timber.d("Updating summary taskCount=$taskCount notify=$notify nonStop=$nonStop fiveTimes=$fiveTimes newNotifications=$newNotifications") val taskIds = tasks.map { it.id } var maxPriority = 3 val summaryTitle = context.resources.getQuantityString(R.plurals.task_count, taskCount, taskCount) @@ -434,6 +454,7 @@ class NotificationManager @Inject constructor( } private fun cancelSummaryNotification() { + Timber.d("Cancelling summary notification") notificationManager.cancel(SUMMARY_NOTIFICATION_ID) }