Merge pull request #1666 from vector-im/feature/bma/mergeFallbackNotification
Display a single notification for unable to decrypt Event received form push (fallback notification)
This commit is contained in:
1
changelog.d/994.bugfix
Normal file
1
changelog.d/994.bugfix
Normal file
@@ -0,0 +1 @@
|
||||
Group fallback notification to avoid having plenty of them displayed.
|
||||
@@ -195,9 +195,9 @@ class DefaultNotificationDrawerManager @Inject constructor(
|
||||
/**
|
||||
* Clear the notifications for a single event.
|
||||
*/
|
||||
fun clearEvent(eventId: EventId, doRender: Boolean) {
|
||||
fun clearEvent(sessionId: SessionId, eventId: EventId, doRender: Boolean) {
|
||||
updateEvents(doRender = doRender) {
|
||||
it.clearEvent(eventId)
|
||||
it.clearEvent(sessionId, eventId)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() {
|
||||
defaultNotificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId, doRender = false)
|
||||
}
|
||||
actionIds.dismissEvent -> if (eventId != null) {
|
||||
defaultNotificationDrawerManager.clearEvent(eventId, doRender = false)
|
||||
defaultNotificationDrawerManager.clearEvent(sessionId, eventId, doRender = false)
|
||||
}
|
||||
actionIds.markRoomRead -> if (roomId != null) {
|
||||
defaultNotificationDrawerManager.clearMessagesForRoom(sessionId, roomId, doRender = true)
|
||||
|
||||
@@ -135,8 +135,14 @@ data class NotificationEventQueue constructor(
|
||||
)
|
||||
}
|
||||
|
||||
fun clearEvent(eventId: EventId) {
|
||||
queue.removeAll { it.eventId == eventId }
|
||||
fun clearEvent(sessionId: SessionId, 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) {
|
||||
|
||||
@@ -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<OneShotNotification.Removed>()
|
||||
val appendFallback = fallbackNotifications.filterIsInstance<OneShotNotification.Append>()
|
||||
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) {
|
||||
|
||||
Reference in New Issue
Block a user