Let NotificationBroadcastReceiver inject NotificationDrawerManager instead of implementation

This commit is contained in:
Benoit Marty 2024-06-05 09:29:51 +02:00 committed by Benoit Marty
parent 8b218e3992
commit 6f12820e0b
4 changed files with 27 additions and 11 deletions

View file

@ -16,10 +16,15 @@
package io.element.android.libraries.push.api.notifications 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.RoomId
import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.SessionId
interface NotificationDrawerManager { interface NotificationDrawerManager {
fun clearAllMessagesEvents(sessionId: SessionId)
fun clearMessagesForRoom(sessionId: SessionId, roomId: RoomId)
fun clearEvent(sessionId: SessionId, eventId: EventId)
fun clearMembershipNotificationForSession(sessionId: SessionId) fun clearMembershipNotificationForSession(sessionId: SessionId)
fun clearMembershipNotificationForRoom(sessionId: SessionId, roomId: RoomId) fun clearMembershipNotificationForRoom(sessionId: SessionId, roomId: RoomId)
} }

View file

@ -123,7 +123,7 @@ class DefaultNotificationDrawerManager @Inject constructor(
/** /**
* Clear all known message events for a [sessionId]. * Clear all known message events for a [sessionId].
*/ */
fun clearAllMessagesEvents(sessionId: SessionId) { override fun clearAllMessagesEvents(sessionId: SessionId) {
notificationManager.cancel(null, notificationIdProvider.getRoomMessagesNotificationId(sessionId)) notificationManager.cancel(null, notificationIdProvider.getRoomMessagesNotificationId(sessionId))
clearSummaryNotificationIfNeeded(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. * 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. * 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)) notificationManager.cancel(roomId.value, notificationIdProvider.getRoomMessagesNotificationId(sessionId))
clearSummaryNotificationIfNeeded(sessionId) clearSummaryNotificationIfNeeded(sessionId)
} }
@ -164,7 +164,7 @@ class DefaultNotificationDrawerManager @Inject constructor(
/** /**
* Clear the notifications for a single event. * 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) val id = notificationIdProvider.getRoomEventNotificationId(sessionId)
notificationManager.cancel(eventId.value, id) notificationManager.cancel(eventId.value, id)
clearSummaryNotificationIfNeeded(sessionId) clearSummaryNotificationIfNeeded(sessionId)

View file

@ -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.core.asEventId
import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.MatrixRoom
import io.element.android.libraries.matrix.api.timeline.ReceiptType 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.R
import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent
import io.element.android.libraries.push.impl.push.OnNotifiableEventReceived import io.element.android.libraries.push.impl.push.OnNotifiableEventReceived
@ -51,7 +52,7 @@ class NotificationBroadcastReceiver : BroadcastReceiver() {
@Inject lateinit var appCoroutineScope: CoroutineScope @Inject lateinit var appCoroutineScope: CoroutineScope
@Inject lateinit var matrixClientProvider: MatrixClientProvider @Inject lateinit var matrixClientProvider: MatrixClientProvider
@Inject lateinit var sessionPreferencesStore: SessionPreferencesStoreFactory @Inject lateinit var sessionPreferencesStore: SessionPreferencesStoreFactory
@Inject lateinit var defaultNotificationDrawerManager: DefaultNotificationDrawerManager @Inject lateinit var notificationDrawerManager: NotificationDrawerManager
@Inject lateinit var actionIds: NotificationActionIds @Inject lateinit var actionIds: NotificationActionIds
@Inject lateinit var systemClock: SystemClock @Inject lateinit var systemClock: SystemClock
@Inject lateinit var onNotifiableEventReceived: OnNotifiableEventReceived @Inject lateinit var onNotifiableEventReceived: OnNotifiableEventReceived
@ -71,26 +72,26 @@ class NotificationBroadcastReceiver : BroadcastReceiver() {
handleSmartReply(sessionId, roomId, threadId, intent, context) handleSmartReply(sessionId, roomId, threadId, intent, context)
} }
actionIds.dismissRoom -> if (roomId != null) { actionIds.dismissRoom -> if (roomId != null) {
defaultNotificationDrawerManager.clearMessagesForRoom(sessionId, roomId) notificationDrawerManager.clearMessagesForRoom(sessionId, roomId)
} }
actionIds.dismissSummary -> actionIds.dismissSummary ->
defaultNotificationDrawerManager.clearAllMessagesEvents(sessionId) notificationDrawerManager.clearAllMessagesEvents(sessionId)
actionIds.dismissInvite -> if (roomId != null) { actionIds.dismissInvite -> if (roomId != null) {
defaultNotificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId) notificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId)
} }
actionIds.dismissEvent -> if (eventId != null) { actionIds.dismissEvent -> if (eventId != null) {
defaultNotificationDrawerManager.clearEvent(sessionId, eventId) notificationDrawerManager.clearEvent(sessionId, eventId)
} }
actionIds.markRoomRead -> if (roomId != null) { actionIds.markRoomRead -> if (roomId != null) {
defaultNotificationDrawerManager.clearMessagesForRoom(sessionId, roomId) notificationDrawerManager.clearMessagesForRoom(sessionId, roomId)
handleMarkAsRead(sessionId, roomId) handleMarkAsRead(sessionId, roomId)
} }
actionIds.join -> if (roomId != null) { actionIds.join -> if (roomId != null) {
defaultNotificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId) notificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId)
handleJoinRoom(sessionId, roomId) handleJoinRoom(sessionId, roomId)
} }
actionIds.reject -> if (roomId != null) { actionIds.reject -> if (roomId != null) {
defaultNotificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId) notificationDrawerManager.clearMembershipNotificationForRoom(sessionId, roomId)
handleRejectRoom(sessionId, roomId) handleRejectRoom(sessionId, roomId)
} }
} }

View file

@ -16,6 +16,7 @@
package io.element.android.libraries.push.test.notifications 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.RoomId
import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.push.api.notifications.NotificationDrawerManager import io.element.android.libraries.push.api.notifications.NotificationDrawerManager
@ -24,6 +25,15 @@ class FakeNotificationDrawerManager : NotificationDrawerManager {
private val clearMemberShipNotificationForSessionCallsCount = mutableMapOf<String, Int>() private val clearMemberShipNotificationForSessionCallsCount = mutableMapOf<String, Int>()
private val clearMemberShipNotificationForRoomCallsCount = mutableMapOf<String, Int>() private val clearMemberShipNotificationForRoomCallsCount = mutableMapOf<String, Int>()
override fun clearAllMessagesEvents(sessionId: SessionId) {
}
override fun clearMessagesForRoom(sessionId: SessionId, roomId: RoomId) {
}
override fun clearEvent(sessionId: SessionId, eventId: EventId) {
}
override fun clearMembershipNotificationForSession(sessionId: SessionId) { override fun clearMembershipNotificationForSession(sessionId: SessionId) {
clearMemberShipNotificationForSessionCallsCount.merge(sessionId.value, 1) { oldValue, value -> oldValue + value } clearMemberShipNotificationForSessionCallsCount.merge(sessionId.value, 1) { oldValue, value -> oldValue + value }
} }