diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 920d8bdeea..cd16d4f022 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -128,7 +128,7 @@ jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" } appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" } timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.10" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.11" sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" } sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-driver", version.ref = "sqldelight" } sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" } 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 27fc15c2c6..991f8dd117 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 @@ -16,12 +16,19 @@ package io.element.android.libraries.matrix.api.notification -import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem +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.UserId +//TODO add content data class NotificationData( - val item: MatrixTimelineItem, - val title: String, - val subtitle: String?, + val senderId: UserId, + val eventId: EventId, + val roomId: RoomId, + val senderAvatarUrl: String? = null, + val senderDisplayName: String? = null, + val roomAvatarUrl: String? = null, + val isDirect: Boolean, + val isEncrypted: Boolean, val isNoisy: Boolean, - val avatarUrl: String?, ) 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 ae47beb700..079b1e0a5a 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 @@ -16,35 +16,28 @@ package io.element.android.libraries.matrix.impl.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.UserId import io.element.android.libraries.matrix.api.notification.NotificationData -import io.element.android.libraries.matrix.impl.timeline.MatrixTimelineItemMapper -import io.element.android.libraries.matrix.impl.timeline.item.event.EventMessageMapper -import io.element.android.libraries.matrix.impl.timeline.item.event.EventTimelineItemMapper -import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper -import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTimelineItemMapper import org.matrix.rustcomponents.sdk.NotificationItem import org.matrix.rustcomponents.sdk.use import javax.inject.Inject class NotificationMapper @Inject constructor() { - // TODO Inject and remove duplicate? - private val timelineItemFactory = MatrixTimelineItemMapper( - virtualTimelineItemMapper = VirtualTimelineItemMapper(), - eventTimelineItemMapper = EventTimelineItemMapper( - contentMapper = TimelineEventContentMapper( - eventMessageMapper = EventMessageMapper() - ) - ) - ) fun map(notificationItem: NotificationItem): NotificationData { return notificationItem.use { NotificationData( - item = timelineItemFactory.map(it.item), - title = it.title, - subtitle = it.subtitle, - isNoisy = it.isNoisy, - avatarUrl = it.avatarUrl, + senderId = UserId(it.event.senderId()), + eventId = EventId(it.event.eventId()), + roomId = RoomId(it.roomId), + senderAvatarUrl = it.senderAvatarUrl, + senderDisplayName = it.senderDisplayName, + roomAvatarUrl = it.roomAvatarUrl, + isDirect = it.isDirect, + isEncrypted = it.isEncrypted, + isNoisy = it.isNoisy ) } } diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt index 242ca6a67d..82e3e43d50 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotifiableEventResolver.kt @@ -24,11 +24,6 @@ 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.NotificationData -import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem -import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem -import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent -import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails -import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType import io.element.android.libraries.push.impl.log.pushLoggerTag import io.element.android.libraries.push.impl.notifications.model.NotifiableEvent import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent @@ -74,28 +69,28 @@ class NotifiableEventResolver @Inject constructor( } ).orDefault(roomId, eventId) - return notificationData.asNotifiableEvent(sessionId, roomId, eventId) + return notificationData.asNotifiableEvent(sessionId) } } -private fun NotificationData.asNotifiableEvent(userId: SessionId, roomId: RoomId, eventId: EventId): NotifiableEvent { +private fun NotificationData.asNotifiableEvent(userId: SessionId): NotifiableEvent { return NotifiableMessageEvent( sessionId = userId, roomId = roomId, eventId = eventId, editedEventId = null, canBeReplaced = true, - noisy = false, + noisy = isNoisy, timestamp = System.currentTimeMillis(), - senderName = null, - senderId = null, + senderName = senderDisplayName, + senderId = senderId.value, body = "Message ${eventId.value.take(8)}… in room ${roomId.value.take(8)}…", imageUriString = null, threadId = null, roomName = null, roomIsDirect = false, - roomAvatarPath = null, - senderAvatarPath = null, + roomAvatarPath = roomAvatarUrl, + senderAvatarPath = senderAvatarUrl, soundName = null, outGoingMessage = false, outGoingMessageFailed = false, @@ -109,33 +104,11 @@ private fun NotificationData.asNotifiableEvent(userId: SessionId, roomId: RoomId */ private fun NotificationData?.orDefault(roomId: RoomId, eventId: EventId): NotificationData { return this ?: NotificationData( - item = MatrixTimelineItem.Event( - event = EventTimelineItem( - uniqueIdentifier = eventId.value, - eventId = eventId, - isEditable = false, - isLocal = false, - isOwn = false, - isRemote = false, - localSendState = null, - reactions = emptyList(), - sender = UserId("@user:domain"), - senderProfile = ProfileTimelineDetails.Unavailable, - timestamp = System.currentTimeMillis(), - content = MessageContent( - body = eventId.value, - inReplyTo = null, - isEdited = false, - type = TextMessageType( - body = eventId.value, - formatted = null - ) - ) - ), - ), - title = roomId.value, - subtitle = eventId.value, + eventId = eventId, + senderId = UserId("@user:domain"), + roomId = roomId, isNoisy = false, - avatarUrl = null, + isEncrypted = false, + isDirect = false ) }