From 4e887388ae983fa3aeecde9ff644226b9456dcef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 12:57:05 +0000 Subject: [PATCH 1/6] Update dependency org.matrix.rustcomponents:sdk-android to v0.2.40 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2f5294ae10..a9bc7ec95b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -163,7 +163,7 @@ jsoup = "org.jsoup:jsoup:1.18.1" appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } molecule-runtime = "app.cash.molecule:molecule-runtime:2.0.0" timber = "com.jakewharton.timber:timber:5.0.1" -matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.39" +matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.2.40" matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" } matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" } sqldelight-driver-android = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } From e5b21c389e5a67a2eb5c133e4821eea2eac68523 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 27 Aug 2024 17:42:00 +0200 Subject: [PATCH 2/6] Rust sdk : use newMessageShield state --- .../messages/impl/timeline/components/MessageShieldView.kt | 7 ++++++- .../matrix/api/timeline/item/event/MessageShield.kt | 4 ++++ .../impl/timeline/item/event/EventTimelineItemMapper.kt | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageShieldView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageShieldView.kt index 73d4c9ba88..9f9dc0ba05 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageShieldView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/MessageShieldView.kt @@ -88,6 +88,7 @@ internal fun MessageShield.toText(): String { is MessageShield.UnsignedDevice -> CommonStrings.event_shield_reason_unsigned_device is MessageShield.UnverifiedIdentity -> CommonStrings.event_shield_reason_unverified_identity is MessageShield.SentInClear -> CommonStrings.event_shield_reason_sent_in_clear + is MessageShield.PreviouslyVerified -> CommonStrings.event_shield_reason_previously_verified } ) } @@ -98,7 +99,8 @@ internal fun MessageShield.toIcon(): ImageVector { is MessageShield.AuthenticityNotGuaranteed -> CompoundIcons.Info() is MessageShield.UnknownDevice, is MessageShield.UnsignedDevice, - is MessageShield.UnverifiedIdentity -> CompoundIcons.HelpSolid() + is MessageShield.UnverifiedIdentity, + is MessageShield.PreviouslyVerified -> CompoundIcons.HelpSolid() is MessageShield.SentInClear -> CompoundIcons.LockOff() } } @@ -126,6 +128,9 @@ internal fun MessageShieldViewPreview() { MessageShieldView( shield = MessageShield.SentInClear(false) ) + MessageShieldView( + shield = MessageShield.PreviouslyVerified(false) + ) } } } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/MessageShield.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/MessageShield.kt index 9092817569..140df16d66 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/MessageShield.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/MessageShield.kt @@ -34,6 +34,9 @@ sealed interface MessageShield { /** An unencrypted event in an encrypted room. */ data class SentInClear(val isCritical: Boolean) : MessageShield + + /** The sender was previously verified but changed their identity. */ + data class PreviouslyVerified(val isCritical: Boolean) : MessageShield } val MessageShield.isCritical: Boolean @@ -43,4 +46,5 @@ val MessageShield.isCritical: Boolean is MessageShield.UnsignedDevice -> isCritical is MessageShield.UnverifiedIdentity -> isCritical is MessageShield.SentInClear -> isCritical + is MessageShield.PreviouslyVerified -> isCritical } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt index 523b8e1fb5..8a155b2826 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt @@ -152,5 +152,6 @@ private fun ShieldState?.map(): MessageShield? { ShieldStateCode.UNSIGNED_DEVICE -> MessageShield.UnsignedDevice(isCritical) ShieldStateCode.UNVERIFIED_IDENTITY -> MessageShield.UnverifiedIdentity(isCritical) ShieldStateCode.SENT_IN_CLEAR -> MessageShield.SentInClear(isCritical) + ShieldStateCode.PREVIOUSLY_VERIFIED -> MessageShield.PreviouslyVerified(isCritical) } } From 88a581427c9bf0f84ae3f6e9a0c4c8bc5aa2e14c Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 27 Aug 2024 17:45:22 +0200 Subject: [PATCH 3/6] Rust sdk : refactor LocalSendState to use the new failure states as iOS does --- .../impl/timeline/TimelineStateProvider.kt | 4 +-- .../components/TimelineEventTimestampView.kt | 6 ++-- ...melineItemEventForTimestampViewProvider.kt | 8 ++--- ...iewStateForTimelineItemEventRowProvider.kt | 2 +- .../receipt/ReadReceiptViewStateProvider.kt | 2 +- .../receipt/TimelineItemReadReceiptView.kt | 33 +++++++++---------- .../impl/timeline/model/TimelineItem.kt | 2 +- .../item/event/LocalEventSendState.kt | 22 ++++++++++--- .../item/event/EventTimelineItemMapper.kt | 16 ++++++--- 9 files changed, 57 insertions(+), 38 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index 677989a81a..f1abc52725 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -84,7 +84,7 @@ internal fun aTimelineItemList(content: TimelineItemEventContent): ImmutableList isMine = false, content = content, groupPosition = TimelineItemGroupPosition.Middle, - sendState = LocalEventSendState.SendingFailed.Unrecoverable("Message failed to send"), + sendState = LocalEventSendState.Failed.Unknown("Message failed to send"), ), aTimelineItemEvent( isMine = false, @@ -107,7 +107,7 @@ internal fun aTimelineItemList(content: TimelineItemEventContent): ImmutableList isMine = true, content = content, groupPosition = TimelineItemGroupPosition.Middle, - sendState = LocalEventSendState.SendingFailed.Unrecoverable("Message failed to send"), + sendState = LocalEventSendState.Failed.Unknown("Message failed to send"), ), aTimelineItemEvent( isMine = true, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt index 69c2a807a2..86781e5c87 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt @@ -51,10 +51,10 @@ fun TimelineEventTimestampView( modifier: Modifier = Modifier, ) { val formattedTime = event.sentTime - val hasUnrecoverableError = event.localSendState is LocalEventSendState.SendingFailed.Unrecoverable + val hasError = event.localSendState is LocalEventSendState.Failed val hasEncryptionCritical = event.messageShield?.isCritical.orFalse() val isMessageEdited = event.content.isEdited() - val tint = if (hasUnrecoverableError || hasEncryptionCritical) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.secondary + val tint = if (hasError || hasEncryptionCritical) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.secondary Row( modifier = Modifier .padding(PaddingValues(start = TimelineEventTimestampViewDefaults.spacing)) @@ -74,7 +74,7 @@ fun TimelineEventTimestampView( style = ElementTheme.typography.fontBodyXsRegular, color = tint, ) - if (hasUnrecoverableError) { + if (hasError) { Spacer(modifier = Modifier.width(2.dp)) Icon( imageVector = CompoundIcons.Error(), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventForTimestampViewProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventForTimestampViewProvider.kt index 705ac36df5..b7237720bd 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventForTimestampViewProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventForTimestampViewProvider.kt @@ -27,15 +27,13 @@ class TimelineItemEventForTimestampViewProvider : PreviewParameterProvider get() = sequenceOf( aTimelineItemEvent(), - // Sending failed recoverable - aTimelineItemEvent().copy(localSendState = LocalEventSendState.SendingFailed.Recoverable("AN_ERROR")), - // Sending failed unrecoverable - aTimelineItemEvent().copy(localSendState = LocalEventSendState.SendingFailed.Unrecoverable("AN_ERROR")), + aTimelineItemEvent().copy(localSendState = LocalEventSendState.Sending), + aTimelineItemEvent().copy(localSendState = LocalEventSendState.Failed.Unknown("AN_ERROR")), // Edited aTimelineItemEvent().copy(content = aTimelineItemTextContent().copy(isEdited = true)), // Sending failed + Edited (not sure this is possible IRL, but should be covered by test) aTimelineItemEvent().copy( - localSendState = LocalEventSendState.SendingFailed.Unrecoverable("AN_ERROR"), + localSendState = LocalEventSendState.Failed.Unknown("AN_ERROR"), content = aTimelineItemTextContent().copy(isEdited = true), ), aTimelineItemEvent().copy( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/ReadReceiptViewStateForTimelineItemEventRowProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/ReadReceiptViewStateForTimelineItemEventRowProvider.kt index 1595e59f54..20bca9fbd7 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/ReadReceiptViewStateForTimelineItemEventRowProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/ReadReceiptViewStateForTimelineItemEventRowProvider.kt @@ -26,7 +26,7 @@ class ReadReceiptViewStateForTimelineItemEventRowProvider : override val values: Sequence get() = sequenceOf( aReadReceiptViewState( - sendState = LocalEventSendState.NotSentYet + sendState = LocalEventSendState.Sending, ), aReadReceiptViewState( sendState = LocalEventSendState.Sent(EventId("\$eventId")), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/ReadReceiptViewStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/ReadReceiptViewStateProvider.kt index a40e94c529..6288919abe 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/ReadReceiptViewStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/ReadReceiptViewStateProvider.kt @@ -29,7 +29,7 @@ class ReadReceiptViewStateProvider : PreviewParameterProvider get() = sequenceOf( aReadReceiptViewState(), - aReadReceiptViewState(sendState = LocalEventSendState.NotSentYet), + aReadReceiptViewState(sendState = LocalEventSendState.Sending), aReadReceiptViewState(sendState = LocalEventSendState.Sent(EventId("\$eventId"))), aReadReceiptViewState( sendState = LocalEventSendState.Sent(EventId("\$eventId")), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt index 0342f684dd..d8cdcbe05f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt @@ -70,19 +70,18 @@ fun TimelineItemReadReceiptView( ReadReceiptsAvatars( receipts = state.receipts, modifier = Modifier - .testTag(TestTags.messageReadReceipts) - .clip(RoundedCornerShape(4.dp)) - .clickable { - onReadReceiptsClick() - } - .padding(2.dp) + .testTag(TestTags.messageReadReceipts) + .clip(RoundedCornerShape(4.dp)) + .clickable { + onReadReceiptsClick() + } + .padding(2.dp) ) } } } else { when (state.sendState) { - LocalEventSendState.NotSentYet, - is LocalEventSendState.SendingFailed.Recoverable -> { + LocalEventSendState.Sending -> { ReadReceiptsRow(modifier) { Icon( modifier = Modifier.padding(2.dp), @@ -92,7 +91,7 @@ fun TimelineItemReadReceiptView( ) } } - is LocalEventSendState.SendingFailed.Unrecoverable -> { + is LocalEventSendState.Failed -> { // Error? The timestamp is already displayed in red } null, @@ -119,9 +118,9 @@ private fun ReadReceiptsRow( ) { Row( modifier = modifier - .fillMaxWidth() - .height(AvatarSize.TimelineReadReceipt.dp + 8.dp) - .padding(horizontal = 18.dp), + .fillMaxWidth() + .height(AvatarSize.TimelineReadReceipt.dp + 8.dp) + .padding(horizontal = 18.dp), horizontalArrangement = Arrangement.End, verticalAlignment = Alignment.CenterVertically, ) { @@ -160,11 +159,11 @@ private fun ReadReceiptsAvatars( .forEachIndexed { index, readReceiptData -> Box( modifier = Modifier - .padding(end = (12.dp + avatarStrokeSize * 2) * index) - .size(size = avatarSize + avatarStrokeSize * 2) - .clip(CircleShape) - .background(avatarStrokeColor) - .zIndex(index.toFloat()), + .padding(end = (12.dp + avatarStrokeSize * 2) * index) + .size(size = avatarSize + avatarStrokeSize * 2) + .clip(CircleShape) + .background(avatarStrokeColor) + .zIndex(index.toFloat()), contentAlignment = Alignment.Center, ) { Avatar( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt index 208a6b07dc..2cb872e95f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt @@ -90,7 +90,7 @@ sealed interface TimelineItem { val safeSenderName: String = senderProfile.getDisambiguatedDisplayName(senderId) - val failedToSend: Boolean = localSendState is LocalEventSendState.SendingFailed + val failedToSend: Boolean = localSendState is LocalEventSendState.Failed val isTextMessage: Boolean = content is TimelineItemTextBasedContent diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/LocalEventSendState.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/LocalEventSendState.kt index b956e51168..8e5f539d81 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/LocalEventSendState.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/LocalEventSendState.kt @@ -18,13 +18,27 @@ package io.element.android.libraries.matrix.api.timeline.item.event import androidx.compose.runtime.Immutable import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.core.UserId @Immutable sealed interface LocalEventSendState { - data object NotSentYet : LocalEventSendState - sealed class SendingFailed(open val error: String) : LocalEventSendState { - data class Recoverable(override val error: String) : SendingFailed(error) - data class Unrecoverable(override val error: String) : SendingFailed(error) + data object Sending : LocalEventSendState + sealed interface Failed : LocalEventSendState { + data class Unknown(val error: String) : Failed + data class VerifiedUserHasUnsignedDevice( + /** + * The unsigned devices belonging to verified users. A map from user ID + * to a list of device IDs. + */ + val devices: Map> + ) : Failed + + data class VerifiedUserChangedIdentity( + /** + * The users that were previously verified but are no longer. + */ + val users: List + ) : Failed } data class Sent( val eventId: EventId diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt index 8a155b2826..d51e4bf3c8 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/EventTimelineItemMapper.kt @@ -81,15 +81,23 @@ fun RustProfileDetails.map(): ProfileTimelineDetails { fun RustEventSendState?.map(): LocalEventSendState? { return when (this) { null -> null - RustEventSendState.NotSentYet -> LocalEventSendState.NotSentYet + RustEventSendState.NotSentYet -> LocalEventSendState.Sending is RustEventSendState.SendingFailed -> { - if (this.isRecoverable) { - LocalEventSendState.SendingFailed.Recoverable(this.error) + if (isRecoverable) { + LocalEventSendState.Sending } else { - LocalEventSendState.SendingFailed.Unrecoverable(this.error) + LocalEventSendState.Failed.Unknown(error) } } is RustEventSendState.Sent -> LocalEventSendState.Sent(EventId(eventId)) + is RustEventSendState.VerifiedUserChangedIdentity -> { + LocalEventSendState.Failed.VerifiedUserChangedIdentity(users.map { UserId(it) }) + } + is RustEventSendState.VerifiedUserHasUnsignedDevice -> { + LocalEventSendState.Failed.VerifiedUserHasUnsignedDevice( + devices = devices.mapKeys { UserId(it.key) } + ) + } } } From 2361b597d96b88786c95e7489139a67a802f5e89 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 27 Aug 2024 17:45:32 +0200 Subject: [PATCH 4/6] Rust sdk : handle the remaining changes --- .../libraries/matrix/api/notification/NotificationData.kt | 7 ++++++- .../libraries/matrix/impl/RustMatrixClientFactory.kt | 3 ++- .../TimelineEventToNotificationContentMapper.kt | 2 +- .../libraries/matrix/impl/room/MatrixRoomInfoMapper.kt | 2 +- .../matrix/impl/roomlist/RoomSummaryDetailsFactory.kt | 2 +- .../impl/notifications/DefaultNotifiableEventResolver.kt | 2 +- 6 files changed, 12 insertions(+), 6 deletions(-) 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 1696375bcb..74bd2d8e14 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 @@ -53,6 +53,7 @@ sealed interface NotificationContent { data class CallInvite( val senderId: UserId, ) : MessageLike + data class CallNotify( val senderId: UserId, val type: CallNotifyType, @@ -77,7 +78,11 @@ sealed interface NotificationContent { val messageType: MessageType ) : MessageLike - data object RoomRedaction : MessageLike + data class RoomRedaction( + val redactedEventId: String?, + val reason: String? + ) : MessageLike + data object Sticker : MessageLike data class Poll( val senderId: UserId, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt index 51e71f3855..a3304dc5bf 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt @@ -93,7 +93,8 @@ class RustMatrixClientFactory @Inject constructor( slidingSync: ClientBuilderSlidingSync, ): ClientBuilder { return ClientBuilder() - .sessionPath(sessionPath) + // TODO SDK claims it's valid to use the same path for data and cache, but would be better to use different paths + .sessionPaths(dataPath = sessionPath, cachePath = sessionPath) .passphrase(passphrase) .slidingSyncProxy(slidingSyncProxy) .userAgent(userAgentProvider.provide()) 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 4591a2ef52..fa0b6365f3 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 @@ -94,7 +94,7 @@ private fun MessageLikeEventContent.toContent(senderId: UserId): NotificationCon is MessageLikeEventContent.RoomMessage -> { NotificationContent.MessageLike.RoomMessage(senderId, EventMessageMapper().mapMessageType(messageType)) } - MessageLikeEventContent.RoomRedaction -> NotificationContent.MessageLike.RoomRedaction + is MessageLikeEventContent.RoomRedaction -> NotificationContent.MessageLike.RoomRedaction(redactedEventId = redactedEventId, reason = reason) MessageLikeEventContent.Sticker -> NotificationContent.MessageLike.Sticker is MessageLikeEventContent.Poll -> NotificationContent.MessageLike.Poll(senderId, question) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt index a7461d6b0a..b53b7629fd 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt @@ -56,7 +56,7 @@ class MatrixRoomInfoMapper { userPowerLevels = mapPowerLevels(it.userPowerLevels), highlightCount = it.highlightCount.toLong(), notificationCount = it.notificationCount.toLong(), - userDefinedNotificationMode = it.userDefinedNotificationMode?.map(), + userDefinedNotificationMode = it.cachedUserDefinedNotificationMode?.map(), hasRoomCall = it.hasRoomCall, activeRoomCallParticipants = it.activeRoomCallParticipants.toImmutableList(), heroes = it.elementHeroes().toImmutableList(), diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt index 9c67eb1221..8f0863ec2c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryDetailsFactory.kt @@ -47,7 +47,7 @@ class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFacto isMarkedUnread = roomInfo.isMarkedUnread, lastMessage = latestRoomMessage, inviter = roomInfo.inviter?.let(RoomMemberMapper::map), - userDefinedNotificationMode = roomInfo.userDefinedNotificationMode?.let(RoomNotificationSettingsMapper::mapMode), + userDefinedNotificationMode = roomInfo.cachedUserDefinedNotificationMode?.let(RoomNotificationSettingsMapper::mapMode), hasRoomCall = roomInfo.hasRoomCall, isDm = isDm(isDirect = roomInfo.isDirect, activeMembersCount = roomInfo.activeMembersCount.toInt()), isFavorite = roomInfo.isFavourite, 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 953215feb2..ef97dbf002 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 @@ -204,7 +204,7 @@ class DefaultNotifiableEventResolver @Inject constructor( NotificationContent.MessageLike.RoomEncrypted -> fallbackNotifiableEvent(userId, roomId, eventId).also { Timber.tag(loggerTag.value).w("Notification with encrypted content -> fallback") } - NotificationContent.MessageLike.RoomRedaction -> null.also { + is NotificationContent.MessageLike.RoomRedaction -> null.also { Timber.tag(loggerTag.value).d("Ignoring notification for redaction") } NotificationContent.MessageLike.Sticker -> null.also { From 2aa49d40a4d565eb1f7cc2f801af7b89363000c1 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Tue, 27 Aug 2024 15:55:18 +0000 Subject: [PATCH 5/6] Update screenshots --- ...es.impl.timeline.components_MessageShieldView_Day_0_en.png | 4 ++-- ....impl.timeline.components_MessageShieldView_Night_0_en.png | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_MessageShieldView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_MessageShieldView_Day_0_en.png index aa89a718dc..4a3994d148 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_MessageShieldView_Day_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_MessageShieldView_Day_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18808ed71ef0cbc10be0eda977ab077a0eaa83afbfd2ae50c500b802aa4c7976 -size 30901 +oid sha256:df2ef6fe59cddc72475c85750cf76384056152c8271bc480748fde31e7d2ef13 +size 36201 diff --git a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_MessageShieldView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_MessageShieldView_Night_0_en.png index 9b49043ac6..d60d1bd163 100644 --- a/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_MessageShieldView_Night_0_en.png +++ b/tests/uitests/src/test/snapshots/images/features.messages.impl.timeline.components_MessageShieldView_Night_0_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d0ad0c7f690d07d67a13fcad3ee8901a77602affe063d2f8222345de3aff934 -size 30039 +oid sha256:a1ed76be54d00c0290b315b2322288d5bce83834c8b382b11b83bc4f82bb9cdc +size 35103 From 7310adcf079656a8a4996c430e923d29e28a8da8 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 27 Aug 2024 20:46:15 +0200 Subject: [PATCH 6/6] Rust sdk : fix tests after api breaks --- .../matrix/impl/roomlist/RoomSummaryListProcessorTest.kt | 2 +- .../impl/notifications/DefaultNotifiableEventResolverTest.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTest.kt index abaae99397..5458c2dd1a 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomlist/RoomSummaryListProcessorTest.kt @@ -246,7 +246,7 @@ private fun aRustRoomInfo( userPowerLevels = userPowerLevels, highlightCount = highlightCount, notificationCount = notificationCount, - userDefinedNotificationMode = userDefinedNotificationMode, + cachedUserDefinedNotificationMode = userDefinedNotificationMode, hasRoomCall = hasRoomCall, activeRoomCallParticipants = activeRoomCallParticipants, isMarkedUnread = isMarkedUnread, 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 0fa3f730aa..0c0dbcc495 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 @@ -598,7 +598,7 @@ class DefaultNotifiableEventResolverTest { testNull(NotificationContent.MessageLike.KeyVerificationMac) testNull(NotificationContent.MessageLike.KeyVerificationDone) testNull(NotificationContent.MessageLike.ReactionContent(relatedEventId = AN_EVENT_ID_2.value)) - testNull(NotificationContent.MessageLike.RoomRedaction) + testNull(NotificationContent.MessageLike.RoomRedaction(redactedEventId = AN_EVENT_ID_2.value, reason = null)) testNull(NotificationContent.MessageLike.Sticker) testNull(NotificationContent.StateEvent.PolicyRuleRoom) testNull(NotificationContent.StateEvent.PolicyRuleServer)