From 6fa585f4c810376bf4793ae4a7730a96dafd7120 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 19 Sep 2024 18:26:36 +0200 Subject: [PATCH] Add unit test on RustNotificationService And fix mapping error. --- .../api/notification/NotificationData.kt | 6 +- .../api/notification/NotificationService.kt | 3 +- .../libraries/matrix/impl/RustMatrixClient.kt | 2 +- .../impl/notification/NotificationMapper.kt | 13 ++-- .../notification/RustNotificationService.kt | 5 +- ...imelineEventToNotificationContentMapper.kt | 5 +- .../fixtures/factories/NotificationItem.kt | 63 +++++++++++++++++++ .../fixtures/factories/TimelineEventType.kt | 45 +++++++++++++ .../fakes/FakeRustNotificationClient.kt | 10 ++- .../fixtures/fakes/FakeRustTimelineEvent.kt | 25 ++++++++ .../RustNotificationServiceTest.kt | 58 +++++++++++++++++ .../notification/FakeNotificationService.kt | 2 - .../DefaultNotifiableEventResolver.kt | 47 +++++++------- .../DefaultOnMissedCallNotificationHandler.kt | 2 +- .../DefaultNotifiableEventResolverTest.kt | 6 +- 15 files changed, 242 insertions(+), 50 deletions(-) create mode 100644 libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/NotificationItem.kt create mode 100644 libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/TimelineEventType.kt create mode 100644 libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustTimelineEvent.kt create mode 100644 libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationServiceTest.kt diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt index 194d354db9..64fdd74241 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationData.kt @@ -94,7 +94,7 @@ sealed interface NotificationContent { data object RoomHistoryVisibility : StateEvent data object RoomJoinRules : StateEvent data class RoomMemberContent( - val userId: String, + val userId: UserId, val membershipState: RoomMembershipState ) : StateEvent @@ -108,6 +108,10 @@ sealed interface NotificationContent { data object SpaceChild : StateEvent data object SpaceParent : StateEvent } + + data class Invite( + val senderId: UserId, + ) : NotificationContent } enum class CallNotifyType { diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationService.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationService.kt index 343b73a123..d3f6a6b5ae 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationService.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/notification/NotificationService.kt @@ -9,8 +9,7 @@ package io.element.android.libraries.matrix.api.notification 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 NotificationService { - suspend fun getNotification(userId: SessionId, roomId: RoomId, eventId: EventId): Result + suspend fun getNotification(roomId: RoomId, eventId: EventId): Result } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index c8e1e93eb4..b47ac6fdc7 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -140,7 +140,7 @@ class RustMatrixClient( ) private val notificationProcessSetup = NotificationProcessSetup.SingleProcess(syncService) private val notificationClient = runBlocking { client.notificationClient(notificationProcessSetup) } - private val notificationService = RustNotificationService(sessionId, notificationClient, dispatchers, clock) + private val notificationService = RustNotificationService(notificationClient, dispatchers, clock) private val notificationSettingsService = RustNotificationSettingsService(client, dispatchers) .apply { start() } private val encryptionService = RustEncryptionService( diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/NotificationMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/NotificationMapper.kt index 7f5dd9bc16..009da11e49 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/NotificationMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/NotificationMapper.kt @@ -10,10 +10,9 @@ package io.element.android.libraries.matrix.impl.notification import io.element.android.libraries.core.bool.orFalse 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.matrix.api.core.UserId import io.element.android.libraries.matrix.api.notification.NotificationContent import io.element.android.libraries.matrix.api.notification.NotificationData -import io.element.android.libraries.matrix.api.room.RoomMembershipState import io.element.android.libraries.matrix.api.room.isDm import io.element.android.services.toolbox.api.systemclock.SystemClock import org.matrix.rustcomponents.sdk.NotificationEvent @@ -21,10 +20,9 @@ import org.matrix.rustcomponents.sdk.NotificationItem import org.matrix.rustcomponents.sdk.use class NotificationMapper( - sessionId: SessionId, private val clock: SystemClock, ) { - private val notificationContentMapper = NotificationContentMapper(sessionId) + private val notificationContentMapper = NotificationContentMapper() fun map( eventId: EventId, @@ -56,15 +54,14 @@ class NotificationMapper( } } -class NotificationContentMapper(private val sessionId: SessionId) { +class NotificationContentMapper { private val timelineEventToNotificationContentMapper = TimelineEventToNotificationContentMapper() fun map(notificationEvent: NotificationEvent): NotificationContent = when (notificationEvent) { is NotificationEvent.Timeline -> timelineEventToNotificationContentMapper.map(notificationEvent.event) - is NotificationEvent.Invite -> NotificationContent.StateEvent.RoomMemberContent( - userId = sessionId.value, - membershipState = RoomMembershipState.INVITE, + is NotificationEvent.Invite -> NotificationContent.Invite( + senderId = UserId(notificationEvent.sender), ) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationService.kt index 7587c092d2..8ed054ac00 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationService.kt @@ -10,7 +10,6 @@ package io.element.android.libraries.matrix.impl.notification import io.element.android.libraries.core.coroutine.CoroutineDispatchers 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.matrix.api.notification.NotificationData import io.element.android.libraries.matrix.api.notification.NotificationService import io.element.android.services.toolbox.api.systemclock.SystemClock @@ -19,15 +18,13 @@ import org.matrix.rustcomponents.sdk.NotificationClient import org.matrix.rustcomponents.sdk.use class RustNotificationService( - sessionId: SessionId, private val notificationClient: NotificationClient, private val dispatchers: CoroutineDispatchers, clock: SystemClock, ) : NotificationService { - private val notificationMapper: NotificationMapper = NotificationMapper(sessionId, clock) + private val notificationMapper: NotificationMapper = NotificationMapper(clock) override suspend fun getNotification( - userId: SessionId, roomId: RoomId, eventId: EventId, ): Result = withContext(dispatchers.io) { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/TimelineEventToNotificationContentMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/TimelineEventToNotificationContentMapper.kt index 0dccf90fa9..84a187a133 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/TimelineEventToNotificationContentMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/notification/TimelineEventToNotificationContentMapper.kt @@ -51,7 +51,10 @@ private fun StateEventContent.toContent(): NotificationContent.StateEvent { StateEventContent.RoomHistoryVisibility -> NotificationContent.StateEvent.RoomHistoryVisibility StateEventContent.RoomJoinRules -> NotificationContent.StateEvent.RoomJoinRules is StateEventContent.RoomMemberContent -> { - NotificationContent.StateEvent.RoomMemberContent(userId, RoomMemberMapper.mapMembership(membershipState)) + NotificationContent.StateEvent.RoomMemberContent( + userId = UserId(userId), + membershipState = RoomMemberMapper.mapMembership(membershipState), + ) } StateEventContent.RoomName -> NotificationContent.StateEvent.RoomName StateEventContent.RoomPinnedEvents -> NotificationContent.StateEvent.RoomPinnedEvents diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/NotificationItem.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/NotificationItem.kt new file mode 100644 index 0000000000..e50e086f63 --- /dev/null +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/NotificationItem.kt @@ -0,0 +1,63 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ + +package io.element.android.libraries.matrix.impl.fixtures.factories + +import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustTimelineEvent +import io.element.android.libraries.matrix.test.A_ROOM_NAME +import io.element.android.libraries.matrix.test.A_USER_NAME +import org.matrix.rustcomponents.sdk.NotificationEvent +import org.matrix.rustcomponents.sdk.NotificationItem +import org.matrix.rustcomponents.sdk.NotificationRoomInfo +import org.matrix.rustcomponents.sdk.NotificationSenderInfo +import org.matrix.rustcomponents.sdk.TimelineEvent + +fun aRustNotificationItem( + event: NotificationEvent = aRustNotificationEventTimeline(), + senderInfo: NotificationSenderInfo = aRustNotificationSenderInfo(), + roomInfo: NotificationRoomInfo = aRustNotificationRoomInfo(), + isNoisy: Boolean? = false, + hasMention: Boolean? = false, +) = NotificationItem( + event = event, + senderInfo = senderInfo, + roomInfo = roomInfo, + isNoisy = isNoisy, + hasMention = hasMention, +) + +fun aRustNotificationSenderInfo( + displayName: String? = A_USER_NAME, + avatarUrl: String? = null, + isNameAmbiguous: Boolean = false, +) = NotificationSenderInfo( + displayName = displayName, + avatarUrl = avatarUrl, + isNameAmbiguous = isNameAmbiguous, +) + +fun aRustNotificationRoomInfo( + displayName: String = A_ROOM_NAME, + avatarUrl: String? = null, + canonicalAlias: String? = null, + joinedMembersCount: ULong = 2u, + isEncrypted: Boolean? = true, + isDirect: Boolean = false, +) = NotificationRoomInfo( + displayName = displayName, + avatarUrl = avatarUrl, + canonicalAlias = canonicalAlias, + joinedMembersCount = joinedMembersCount, + isEncrypted = isEncrypted, + isDirect = isDirect, +) + +fun aRustNotificationEventTimeline( + event: TimelineEvent = FakeRustTimelineEvent(), +) = NotificationEvent.Timeline( + event = event, +) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/TimelineEventType.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/TimelineEventType.kt new file mode 100644 index 0000000000..ddd74714eb --- /dev/null +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/factories/TimelineEventType.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ + +package io.element.android.libraries.matrix.impl.fixtures.factories + +import io.element.android.libraries.matrix.test.A_MESSAGE +import org.matrix.rustcomponents.sdk.FormattedBody +import org.matrix.rustcomponents.sdk.MessageLikeEventContent +import org.matrix.rustcomponents.sdk.MessageType +import org.matrix.rustcomponents.sdk.TextMessageContent +import org.matrix.rustcomponents.sdk.TimelineEventType + +fun aRustTimelineEventTypeMessageLike( + content: MessageLikeEventContent = aRustMessageLikeEventContentRoomMessage(), +): TimelineEventType.MessageLike { + return TimelineEventType.MessageLike( + content = content, + ) +} + +fun aRustMessageLikeEventContentRoomMessage( + messageType: MessageType = aRustMessageTypeText(), + inReplyToEventId: String? = null, +) = MessageLikeEventContent.RoomMessage( + messageType = messageType, + inReplyToEventId = inReplyToEventId, +) + +fun aRustMessageTypeText( + content: TextMessageContent = aRustTextMessageContent(), +) = MessageType.Text( + content = content, +) + +fun aRustTextMessageContent( + body: String = A_MESSAGE, + formatted: FormattedBody? = null, +) = TextMessageContent( + body = body, + formatted = formatted, +) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustNotificationClient.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustNotificationClient.kt index 477913d127..7f5583fc18 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustNotificationClient.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustNotificationClient.kt @@ -7,7 +7,15 @@ package io.element.android.libraries.matrix.impl.fixtures.fakes +import io.element.android.tests.testutils.simulateLongTask import org.matrix.rustcomponents.sdk.NoPointer import org.matrix.rustcomponents.sdk.NotificationClient +import org.matrix.rustcomponents.sdk.NotificationItem -class FakeRustNotificationClient : NotificationClient(NoPointer) +class FakeRustNotificationClient( + var notificationItemResult: NotificationItem? = null +) : NotificationClient(NoPointer) { + override suspend fun getNotification(roomId: String, eventId: String): NotificationItem? = simulateLongTask { + notificationItemResult + } +} diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustTimelineEvent.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustTimelineEvent.kt new file mode 100644 index 0000000000..03611354b7 --- /dev/null +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustTimelineEvent.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ + +package io.element.android.libraries.matrix.impl.fixtures.fakes + +import io.element.android.libraries.matrix.impl.fixtures.factories.aRustTimelineEventTypeMessageLike +import io.element.android.libraries.matrix.test.A_USER_ID_2 +import io.element.android.services.toolbox.test.systemclock.A_FAKE_TIMESTAMP +import org.matrix.rustcomponents.sdk.NoPointer +import org.matrix.rustcomponents.sdk.TimelineEvent +import org.matrix.rustcomponents.sdk.TimelineEventType + +class FakeRustTimelineEvent( + val timestamp: ULong = A_FAKE_TIMESTAMP.toULong(), + val timelineEventType: TimelineEventType = aRustTimelineEventTypeMessageLike(), + val senderId: String = A_USER_ID_2.value, +) : TimelineEvent(NoPointer) { + override fun timestamp(): ULong = timestamp + override fun eventType(): TimelineEventType = timelineEventType + override fun senderId(): String = senderId +} diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationServiceTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationServiceTest.kt new file mode 100644 index 0000000000..95ceccbec7 --- /dev/null +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/notification/RustNotificationServiceTest.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ + +package io.element.android.libraries.matrix.impl.notification + +import com.google.common.truth.Truth.assertThat +import io.element.android.libraries.matrix.api.notification.NotificationContent +import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType +import io.element.android.libraries.matrix.impl.fixtures.factories.aRustNotificationItem +import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustNotificationClient +import io.element.android.libraries.matrix.test.AN_EVENT_ID +import io.element.android.libraries.matrix.test.A_MESSAGE +import io.element.android.libraries.matrix.test.A_ROOM_ID +import io.element.android.libraries.matrix.test.A_USER_ID_2 +import io.element.android.services.toolbox.api.systemclock.SystemClock +import io.element.android.services.toolbox.test.systemclock.FakeSystemClock +import io.element.android.tests.testutils.testCoroutineDispatchers +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.runTest +import org.junit.Test +import org.matrix.rustcomponents.sdk.NotificationClient + +class RustNotificationServiceTest { + @Test + fun test() = runTest { + val notificationClient = FakeRustNotificationClient( + notificationItemResult = aRustNotificationItem(), + ) + val sut = createRustNotificationService( + notificationClient = notificationClient, + ) + val result = sut.getNotification(A_ROOM_ID, AN_EVENT_ID).getOrThrow()!! + assertThat(result.isEncrypted).isTrue() + assertThat(result.content).isEqualTo( + NotificationContent.MessageLike.RoomMessage( + senderId = A_USER_ID_2, + messageType = TextMessageType( + body = A_MESSAGE, + formatted = null, + ) + ) + ) + } + + private fun TestScope.createRustNotificationService( + notificationClient: NotificationClient = FakeRustNotificationClient(), + clock: SystemClock = FakeSystemClock(), + ) = + RustNotificationService( + notificationClient = notificationClient, + dispatchers = testCoroutineDispatchers(), + clock = clock, + ) +} diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/notification/FakeNotificationService.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/notification/FakeNotificationService.kt index 1ea2601e03..a852a2891d 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/notification/FakeNotificationService.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/notification/FakeNotificationService.kt @@ -9,7 +9,6 @@ package io.element.android.libraries.matrix.test.notification 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.matrix.api.notification.NotificationData import io.element.android.libraries.matrix.api.notification.NotificationService @@ -21,7 +20,6 @@ class FakeNotificationService : NotificationService { } override suspend fun getNotification( - userId: SessionId, roomId: RoomId, eventId: EventId, ): Result { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt index 5a352aeb9b..19f9e1f356 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt @@ -24,7 +24,6 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.notification.NotificationContent import io.element.android.libraries.matrix.api.notification.NotificationData import io.element.android.libraries.matrix.api.permalink.PermalinkParser -import io.element.android.libraries.matrix.api.room.RoomMembershipState import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType import io.element.android.libraries.matrix.api.timeline.item.event.EventType @@ -76,7 +75,6 @@ class DefaultNotifiableEventResolver @Inject constructor( val client = matrixClientProvider.getOrRestore(sessionId).getOrNull() ?: return null val notificationService = client.notificationService() val notificationData = notificationService.getNotification( - userId = sessionId, roomId = roomId, eventId = eventId, ).onFailure { @@ -113,30 +111,26 @@ class DefaultNotifiableEventResolver @Inject constructor( hasMentionOrReply = hasMention, ) } - is NotificationContent.StateEvent.RoomMemberContent -> { - if (content.membershipState == RoomMembershipState.INVITE) { - InviteNotifiableEvent( - sessionId = userId, - roomId = roomId, - eventId = eventId, - editedEventId = null, - canBeReplaced = true, - roomName = roomDisplayName, - noisy = isNoisy, - timestamp = this.timestamp, - soundName = null, - isRedacted = false, - isUpdated = false, - description = descriptionFromRoomMembershipInvite(isDirect), - // TODO check if type is needed anymore - type = null, - // TODO check if title is needed anymore - title = null, - ) - } else { - Timber.tag(loggerTag.value).d("Ignoring notification state event for membership ${content.membershipState}") - null - } + is NotificationContent.Invite -> { + InviteNotifiableEvent( + sessionId = userId, + roomId = roomId, + eventId = eventId, + editedEventId = null, + canBeReplaced = true, + roomName = roomDisplayName, + noisy = isNoisy, + timestamp = this.timestamp, + soundName = null, + isRedacted = false, + isUpdated = false, + // TODO We could use the senderId here + description = descriptionFromRoomMembershipInvite(isDirect), + // TODO check if type is needed anymore + type = null, + // TODO check if title is needed anymore + title = null, + ) } NotificationContent.MessageLike.CallAnswer, NotificationContent.MessageLike.CallCandidates, @@ -203,6 +197,7 @@ class DefaultNotifiableEventResolver @Inject constructor( NotificationContent.MessageLike.Sticker -> null.also { Timber.tag(loggerTag.value).d("Ignoring notification for sticker") } + is NotificationContent.StateEvent.RoomMemberContent, NotificationContent.StateEvent.PolicyRuleRoom, NotificationContent.StateEvent.PolicyRuleServer, NotificationContent.StateEvent.PolicyRuleUser, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt index 09b6810775..a976fff18e 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt @@ -30,7 +30,7 @@ class DefaultOnMissedCallNotificationHandler @Inject constructor( // Resolve the event and add a notification for it, at this point it should no longer be a ringing one val notificationData = matrixClientProvider.getOrRestore(sessionId).getOrNull() ?.notificationService() - ?.getNotification(sessionId, roomId, eventId) + ?.getNotification(roomId, eventId) ?.getOrNull() ?: return diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt index 240802d98c..baf6c53c79 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt @@ -370,7 +370,7 @@ class DefaultNotifiableEventResolverTest { notificationResult = Result.success( createNotificationData( content = NotificationContent.StateEvent.RoomMemberContent( - userId = A_USER_ID_2.value, + sender = A_USER_ID_2, membershipState = RoomMembershipState.INVITE ), isDirect = false, @@ -405,7 +405,7 @@ class DefaultNotifiableEventResolverTest { notificationResult = Result.success( createNotificationData( content = NotificationContent.StateEvent.RoomMemberContent( - userId = A_USER_ID_2.value, + sender = A_USER_ID_2, membershipState = RoomMembershipState.INVITE ), isDirect = true, @@ -440,7 +440,7 @@ class DefaultNotifiableEventResolverTest { notificationResult = Result.success( createNotificationData( content = NotificationContent.StateEvent.RoomMemberContent( - userId = A_USER_ID_2.value, + sender = A_USER_ID_2, membershipState = RoomMembershipState.JOIN ) )