Let NotificationBroadcastReceiver inject NotificationDrawerManager instead of implementation
This commit is contained in:
parent
8b218e3992
commit
6f12820e0b
4 changed files with 27 additions and 11 deletions
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue