diff --git a/changelog.d/994.bugfix b/changelog.d/994.bugfix new file mode 100644 index 0000000000..7fe3e828a0 --- /dev/null +++ b/changelog.d/994.bugfix @@ -0,0 +1 @@ +Group fallback notification to avoid having plenty of them displayed. diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationEventQueue.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationEventQueue.kt index b838f53d6f..8eea6a9d5a 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationEventQueue.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationEventQueue.kt @@ -136,7 +136,13 @@ data class NotificationEventQueue constructor( } fun clearEvent(sessionId: SessionId, eventId: EventId) { - queue.removeAll { it.sessionId == sessionId && it.eventId == eventId } + val isFallback = queue.firstOrNull { it.sessionId == sessionId && it.eventId == eventId } is FallbackNotifiableEvent + if (isFallback) { + Timber.d("Removing all the fallbacks") + queue.removeAll { it.sessionId == sessionId && it is FallbackNotifiableEvent } + } else { + queue.removeAll { it.sessionId == sessionId && it.eventId == eventId } + } } fun clearMembershipNotificationForSession(sessionId: SessionId) { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt index 03241bbdb8..713392c695 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt @@ -124,6 +124,7 @@ class NotificationRenderer @Inject constructor( } } + /* fallbackNotifications.forEach { wrapper -> when (wrapper) { is OneShotNotification.Removed -> { @@ -143,6 +144,23 @@ class NotificationRenderer @Inject constructor( } } } + */ + val removedFallback = fallbackNotifications.filterIsInstance() + val appendFallback = fallbackNotifications.filterIsInstance() + if (appendFallback.isEmpty() && removedFallback.isNotEmpty()) { + Timber.tag(loggerTag.value).d("Removing global fallback notification") + notificationDisplayer.cancelNotificationMessage( + tag = "FALLBACK", + id = notificationIdProvider.getFallbackNotificationId(currentUser.userId) + ) + } else if (appendFallback.isNotEmpty()) { + Timber.tag(loggerTag.value).d("Showing fallback notification") + notificationDisplayer.showNotificationMessage( + tag = "FALLBACK", + id = notificationIdProvider.getFallbackNotificationId(currentUser.userId), + notification = appendFallback.first().notification + ) + } // Update summary last to avoid briefly displaying it before other notifications if (summaryNotification is SummaryNotification.Update) {