From 6f12820e0ba15ed3efc9f91d2c5fea99b90da20a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 5 Jun 2024 09:29:51 +0200 Subject: [PATCH] Let NotificationBroadcastReceiver inject NotificationDrawerManager instead of implementation --- .../notifications/NotificationDrawerManager.kt | 5 +++++ .../DefaultNotificationDrawerManager.kt | 6 +++--- .../NotificationBroadcastReceiver.kt | 17 +++++++++-------- .../FakeNotificationDrawerManager.kt | 10 ++++++++++ 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/notifications/NotificationDrawerManager.kt b/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/notifications/NotificationDrawerManager.kt index 9a778195fa..f7babb1e35 100644 --- a/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/notifications/NotificationDrawerManager.kt +++ b/libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/notifications/NotificationDrawerManager.kt @@ -16,10 +16,15 @@ package io.element.android.libraries.push.api.notifications +import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId interface NotificationDrawerManager { + fun clearAllMessagesEvents(sessionId: SessionId) + fun clearMessagesForRoom(sessionId: SessionId, roomId: RoomId) + fun clearEvent(sessionId: SessionId, eventId: EventId) + fun clearMembershipNotificationForSession(sessionId: SessionId) fun clearMembershipNotificationForRoom(sessionId: SessionId, roomId: RoomId) } diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt index cfbf3c6950..03c1cd21a2 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt @@ -123,7 +123,7 @@ class DefaultNotificationDrawerManager @Inject constructor( /** * Clear all known message events for a [sessionId]. */ - fun clearAllMessagesEvents(sessionId: SessionId) { + override fun clearAllMessagesEvents(sessionId: SessionId) { notificationManager.cancel(null, notificationIdProvider.getRoomMessagesNotificationId(sessionId)) clearSummaryNotificationIfNeeded(sessionId) } @@ -141,7 +141,7 @@ class DefaultNotificationDrawerManager @Inject constructor( * Used to ignore events related to that room (no need to display notification) and clean any existing notification on this room. * Can also be called when a notification for this room is dismissed by the user. */ - fun clearMessagesForRoom(sessionId: SessionId, roomId: RoomId) { + override fun clearMessagesForRoom(sessionId: SessionId, roomId: RoomId) { notificationManager.cancel(roomId.value, notificationIdProvider.getRoomMessagesNotificationId(sessionId)) clearSummaryNotificationIfNeeded(sessionId) } @@ -164,7 +164,7 @@ class DefaultNotificationDrawerManager @Inject constructor( /** * Clear the notifications for a single event. */ - fun clearEvent(sessionId: SessionId, eventId: EventId) { + override fun clearEvent(sessionId: SessionId, eventId: EventId) { val id = notificationIdProvider.getRoomEventNotificationId(sessionId) notificationManager.cancel(eventId.value, id) clearSummaryNotificationIfNeeded(sessionId) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt index 6a10f49a3b..12d8bd8b42 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt @@ -31,6 +31,7 @@ import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.core.asEventId import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.timeline.ReceiptType +import io.element.android.libraries.push.api.notifications.NotificationDrawerManager import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent import io.element.android.libraries.push.impl.push.OnNotifiableEventReceived @@ -51,7 +52,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() { @Inject lateinit var appCoroutineScope: CoroutineScope @Inject lateinit var matrixClientProvider: MatrixClientProvider @Inject lateinit var sessionPreferencesStore: SessionPreferencesStoreFactory - @Inject lateinit var defaultNotificationDrawerManager: DefaultNotificationDrawerManager + @Inject lateinit var notificationDrawerManager: NotificationDrawerManager @Inject lateinit var actionIds: NotificationActionIds @Inject lateinit var systemClock: SystemClock @Inject lateinit var onNotifiableEventReceived: OnNotifiableEventReceived @@ -71,26 +72,26 @@ class NotificationBroadcastReceiver : BroadcastReceiver() { handleSmartReply(sessionId, roomId, threadId, intent, context) } actionIds.dismissRoom -> if (roomId != null) { - defaultNotificationDrawerManager.clearMessagesForRoom(sessionId, roomId) + notificationDrawerManager.clearMessagesForRoom(sessionId, roomId) } actionIds.dismissSummary -> - defaultNotificationDrawerManager.clearAllMessagesEvents(sessionId) + notificationDrawerManager.clearAllMessagesEvents(sessionId) actionIds.dismissInvite -> if (roomId != null) { - defaultNotificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId) + notificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId) } actionIds.dismissEvent -> if (eventId != null) { - defaultNotificationDrawerManager.clearEvent(sessionId, eventId) + notificationDrawerManager.clearEvent(sessionId, eventId) } actionIds.markRoomRead -> if (roomId != null) { - defaultNotificationDrawerManager.clearMessagesForRoom(sessionId, roomId) + notificationDrawerManager.clearMessagesForRoom(sessionId, roomId) handleMarkAsRead(sessionId, roomId) } actionIds.join -> if (roomId != null) { - defaultNotificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId) + notificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId) handleJoinRoom(sessionId, roomId) } actionIds.reject -> if (roomId != null) { - defaultNotificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId) + notificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId) handleRejectRoom(sessionId, roomId) } } diff --git a/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/notifications/FakeNotificationDrawerManager.kt b/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/notifications/FakeNotificationDrawerManager.kt index 1531d2df48..9b932cd79a 100644 --- a/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/notifications/FakeNotificationDrawerManager.kt +++ b/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/notifications/FakeNotificationDrawerManager.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.push.test.notifications +import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.push.api.notifications.NotificationDrawerManager @@ -24,6 +25,15 @@ class FakeNotificationDrawerManager : NotificationDrawerManager { private val clearMemberShipNotificationForSessionCallsCount = mutableMapOf() private val clearMemberShipNotificationForRoomCallsCount = mutableMapOf() + override fun clearAllMessagesEvents(sessionId: SessionId) { + } + + override fun clearMessagesForRoom(sessionId: SessionId, roomId: RoomId) { + } + + override fun clearEvent(sessionId: SessionId, eventId: EventId) { + } + override fun clearMembershipNotificationForSession(sessionId: SessionId) { clearMemberShipNotificationForSessionCallsCount.merge(sessionId.value, 1) { oldValue, value -> oldValue + value } }