diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt index ff5ca57c11..867cb694db 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt @@ -87,6 +87,7 @@ class TimelineItemContentMessageFactory @Inject constructor( filename = messageType.filename, caption = messageType.caption?.trimEnd(), formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(), + isEdited = content.isEdited, mediaSource = messageType.source, thumbnailSource = messageType.info?.thumbnailSource, mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream, @@ -106,6 +107,7 @@ class TimelineItemContentMessageFactory @Inject constructor( filename = messageType.filename, caption = messageType.caption?.trimEnd(), formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(), + isEdited = content.isEdited, mediaSource = messageType.source, thumbnailSource = messageType.info?.thumbnailSource, mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream, @@ -143,6 +145,7 @@ class TimelineItemContentMessageFactory @Inject constructor( filename = messageType.filename, caption = messageType.caption?.trimEnd(), formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(), + isEdited = content.isEdited, thumbnailSource = messageType.info?.thumbnailSource, videoSource = messageType.source, mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream, @@ -162,6 +165,7 @@ class TimelineItemContentMessageFactory @Inject constructor( filename = messageType.filename, caption = messageType.caption?.trimEnd(), formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(), + isEdited = content.isEdited, mediaSource = messageType.source, duration = messageType.info?.duration ?: Duration.ZERO, mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream, @@ -177,6 +181,7 @@ class TimelineItemContentMessageFactory @Inject constructor( filename = messageType.filename, caption = messageType.caption?.trimEnd(), formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(), + isEdited = content.isEdited, mediaSource = messageType.source, duration = messageType.info?.duration ?: Duration.ZERO, mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream, @@ -188,6 +193,7 @@ class TimelineItemContentMessageFactory @Inject constructor( filename = messageType.filename, caption = messageType.caption?.trimEnd(), formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(), + isEdited = content.isEdited, mediaSource = messageType.source, duration = messageType.info?.duration ?: Duration.ZERO, mimeType = messageType.info?.mimetype ?: MimeTypes.OctetStream, @@ -203,6 +209,7 @@ class TimelineItemContentMessageFactory @Inject constructor( filename = messageType.filename, caption = messageType.caption?.trimEnd(), formattedCaption = parseHtml(messageType.formattedCaption) ?: messageType.caption?.withLinks(), + isEdited = content.isEdited, thumbnailSource = messageType.info?.thumbnailSource, fileSource = messageType.source, mimeType = messageType.info?.mimetype ?: MimeTypes.fromFileExtension(fileExtension), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt index b76dfdf07b..0d725d0e29 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt @@ -36,6 +36,7 @@ class TimelineItemContentStickerFactory @Inject constructor( filename = content.filename, caption = content.body, formattedCaption = null, + isEdited = false, mediaSource = content.source, thumbnailSource = content.info.thumbnailSource, mimeType = content.info.mimetype ?: MimeTypes.OctetStream, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContent.kt index 0ecf45ec55..46176cc474 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContent.kt @@ -15,6 +15,7 @@ data class TimelineItemAudioContent( override val filename: String, override val caption: String?, override val formattedCaption: CharSequence?, + override val isEdited: Boolean, val duration: Duration, val mediaSource: MediaSource, val mimeType: String, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContentProvider.kt index 7d4f6baf84..41dab0cfb6 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContentProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemAudioContentProvider.kt @@ -25,6 +25,7 @@ fun aTimelineItemAudioContent(fileName: String = "A sound.mp3") = TimelineItemAu filename = fileName, caption = null, formattedCaption = null, + isEdited = false, mimeType = MimeTypes.Mp3, formattedFileSize = "100kB", fileExtension = "mp3", diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContent.kt index fafadcbf79..62c55c22ef 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContent.kt @@ -14,8 +14,15 @@ sealed interface TimelineItemEventContent { val type: String } +interface TimelineItemEventMutableContent { + /** Whether the event has been edited. */ + val isEdited: Boolean +} + @Immutable -sealed interface TimelineItemEventContentWithAttachment : TimelineItemEventContent { +sealed interface TimelineItemEventContentWithAttachment : + TimelineItemEventContent, + TimelineItemEventMutableContent { val filename: String val caption: String? val formattedCaption: CharSequence? @@ -74,9 +81,7 @@ fun TimelineItemEventContent.canReact(): Boolean = /** * Whether the event content has been edited. */ -fun TimelineItemEventContent.isEdited(): Boolean = - when (this) { - is TimelineItemTextBasedContent -> isEdited - is TimelineItemPollContent -> isEdited - else -> false - } +fun TimelineItemEventContent.isEdited(): Boolean = when (this) { + is TimelineItemEventMutableContent -> isEdited + else -> false +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt index b7007c8bbc..3f1d8fe041 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContent.kt @@ -14,6 +14,7 @@ data class TimelineItemFileContent( override val filename: String, override val caption: String?, override val formattedCaption: CharSequence?, + override val isEdited: Boolean, val fileSource: MediaSource, val thumbnailSource: MediaSource?, val formattedFileSize: String, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContentProvider.kt index d7852134a2..405759f45d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContentProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemFileContentProvider.kt @@ -26,6 +26,7 @@ fun aTimelineItemFileContent( filename = fileName, caption = null, formattedCaption = null, + isEdited = false, thumbnailSource = null, fileSource = MediaSource(url = ""), mimeType = MimeTypes.Pdf, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt index b13c7a4e37..78323166b4 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContent.kt @@ -17,6 +17,7 @@ data class TimelineItemImageContent( override val filename: String, override val caption: String?, override val formattedCaption: CharSequence?, + override val isEdited: Boolean, val mediaSource: MediaSource, val thumbnailSource: MediaSource?, val formattedFileSize: String, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContentProvider.kt index 60edb0e6d7..a5d7a8e9f3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContentProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemImageContentProvider.kt @@ -31,6 +31,7 @@ fun aTimelineItemImageContent( filename = filename, caption = caption, formattedCaption = null, + isEdited = false, mediaSource = MediaSource(""), thumbnailSource = null, mimeType = MimeTypes.IMAGE_JPEG, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemPollContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemPollContent.kt index 4355727419..ad4bc1794a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemPollContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemPollContent.kt @@ -19,7 +19,8 @@ data class TimelineItemPollContent( val answerItems: List, val pollKind: PollKind, val isEnded: Boolean, - val isEdited: Boolean -) : TimelineItemEventContent { + override val isEdited: Boolean, +) : TimelineItemEventContent, + TimelineItemEventMutableContent { override val type: String = "TimelineItemPollContent" } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt index 06886307ae..ebaeb53b4b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContent.kt @@ -13,6 +13,7 @@ data class TimelineItemStickerContent( override val filename: String, override val caption: String?, override val formattedCaption: CharSequence?, + override val isEdited: Boolean, val mediaSource: MediaSource, val thumbnailSource: MediaSource?, val formattedFileSize: String, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContentProvider.kt index 7b776a6fd1..76934df3ad 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContentProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemStickerContentProvider.kt @@ -29,6 +29,7 @@ fun aTimelineItemStickerContent( filename = "a sticker.gif", caption = "a body", formattedCaption = null, + isEdited = false, mediaSource = MediaSource(""), thumbnailSource = null, mimeType = MimeTypes.IMAGE_JPEG, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemTextBasedContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemTextBasedContent.kt index 756c59f53e..5d61200d0e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemTextBasedContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemTextBasedContent.kt @@ -14,7 +14,9 @@ import org.jsoup.nodes.Document * Represents a text based content of a timeline item event (a message, a notice, an emote event...). */ @Immutable -sealed interface TimelineItemTextBasedContent : TimelineItemEventContent { +sealed interface TimelineItemTextBasedContent : + TimelineItemEventContent, + TimelineItemEventMutableContent { /** The raw body of the event, in Markdown format. */ val body: String @@ -30,9 +32,6 @@ sealed interface TimelineItemTextBasedContent : TimelineItemEventContent { /** The plain text version of the event body. This is the Markdown version without actual Markdown formatting. */ val plainText: String - /** Whether the event has been edited. */ - val isEdited: Boolean - /** The raw HTML body of the event. */ val htmlBody: String? get() = htmlDocument?.body()?.html() diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt index 486a71b5d4..caee06ef64 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContent.kt @@ -14,6 +14,7 @@ data class TimelineItemVideoContent( override val filename: String, override val caption: String?, override val formattedCaption: CharSequence?, + override val isEdited: Boolean, val duration: Duration, val videoSource: MediaSource, val thumbnailSource: MediaSource?, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContentProvider.kt index b9390b4e52..1ed05fa606 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContentProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVideoContentProvider.kt @@ -30,6 +30,7 @@ fun aTimelineItemVideoContent( filename = "Video.mp4", caption = null, formattedCaption = null, + isEdited = false, thumbnailSource = null, blurHash = blurhash, aspectRatio = aspectRatio, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContent.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContent.kt index ebeabef715..21b6696ffe 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContent.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContent.kt @@ -17,6 +17,7 @@ data class TimelineItemVoiceContent( override val filename: String, override val caption: String?, override val formattedCaption: CharSequence?, + override val isEdited: Boolean, val duration: Duration, val mediaSource: MediaSource, val mimeType: String, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContentProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContentProvider.kt index ddd731eceb..bd7308d970 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContentProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemVoiceContentProvider.kt @@ -48,6 +48,7 @@ fun aTimelineItemVoiceContent( filename = filename, caption = caption, formattedCaption = null, + isEdited = false, duration = duration, mediaSource = mediaSource, mimeType = mimeType, diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt index 9ca5c0b98e..f66c8c50b8 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/MessagesPresenterTest.kt @@ -318,6 +318,7 @@ class MessagesPresenterTest { filename = "image.jpg", caption = null, formattedCaption = null, + isEdited = false, mediaSource = MediaSource(AN_AVATAR_URL), thumbnailSource = null, mimeType = MimeTypes.Jpeg, @@ -359,6 +360,7 @@ class MessagesPresenterTest { filename = "video.mp4", caption = null, formattedCaption = null, + isEdited = false, duration = 10.milliseconds, videoSource = MediaSource(AN_AVATAR_URL), thumbnailSource = MediaSource(AN_AVATAR_URL), @@ -400,6 +402,7 @@ class MessagesPresenterTest { content = TimelineItemFileContent( filename = "file.pdf", caption = null, + isEdited = false, formattedCaption = null, fileSource = MediaSource(AN_AVATAR_URL), thumbnailSource = MediaSource(AN_AVATAR_URL), diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt index a34e601e5d..07ff31690e 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactoryTest.kt @@ -237,6 +237,7 @@ class TimelineItemContentMessageFactoryTest { filename = "filename", caption = null, formattedCaption = null, + isEdited = false, duration = Duration.ZERO, videoSource = MediaSource(url = "url", json = null), thumbnailSource = null, @@ -278,7 +279,8 @@ class TimelineItemContentMessageFactoryTest { thumbnailSource = MediaSource("url_thumbnail"), blurhash = A_BLUR_HASH, ), - ) + ), + isEdited = true, ), senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, @@ -287,6 +289,7 @@ class TimelineItemContentMessageFactoryTest { filename = "body.mp4", caption = "body.mp4 caption", formattedCaption = SpannedString("formatted"), + isEdited = true, duration = 1.minutes, videoSource = MediaSource(url = "url", json = null), thumbnailSource = MediaSource("url_thumbnail"), @@ -315,6 +318,7 @@ class TimelineItemContentMessageFactoryTest { filename = "filename", caption = null, formattedCaption = null, + isEdited = false, duration = Duration.ZERO, mediaSource = MediaSource(url = "url", json = null), mimeType = MimeTypes.OctetStream, @@ -339,7 +343,8 @@ class TimelineItemContentMessageFactoryTest { size = 123L, mimetype = MimeTypes.Mp3, ) - ) + ), + isEdited = true, ), senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, @@ -348,6 +353,7 @@ class TimelineItemContentMessageFactoryTest { filename = "body.mp3", caption = null, formattedCaption = null, + isEdited = true, duration = 1.minutes, mediaSource = MediaSource(url = "url", json = null), mimeType = MimeTypes.Mp3, @@ -370,6 +376,7 @@ class TimelineItemContentMessageFactoryTest { eventId = AN_EVENT_ID, caption = null, formattedCaption = null, + isEdited = false, duration = Duration.ZERO, mediaSource = MediaSource(url = "url", json = null), mimeType = MimeTypes.OctetStream, @@ -397,7 +404,8 @@ class TimelineItemContentMessageFactoryTest { duration = 1.minutes, waveform = persistentListOf(1f, 2f), ), - ) + ), + isEdited = true, ), senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, @@ -407,6 +415,7 @@ class TimelineItemContentMessageFactoryTest { filename = "body.ogg", caption = null, formattedCaption = null, + isEdited = true, duration = 1.minutes, mediaSource = MediaSource(url = "url", json = null), mimeType = MimeTypes.Ogg, @@ -433,6 +442,7 @@ class TimelineItemContentMessageFactoryTest { filename = "filename", caption = null, formattedCaption = null, + isEdited = false, duration = Duration.ZERO, mediaSource = MediaSource(url = "url", json = null), mimeType = MimeTypes.OctetStream, @@ -454,6 +464,7 @@ class TimelineItemContentMessageFactoryTest { filename = "filename", caption = "body", formattedCaption = null, + isEdited = false, mediaSource = MediaSource(url = "url", json = null), thumbnailSource = null, formattedFileSize = "0 Bytes", @@ -483,6 +494,7 @@ class TimelineItemContentMessageFactoryTest { filename = "filename", caption = null, formattedCaption = null, + isEdited = false, mediaSource = MediaSource(url = "url", json = null), thumbnailSource = MediaSource(url = "thumbnail://url", json = null), formattedFileSize = "8192 Bytes", @@ -520,15 +532,17 @@ class TimelineItemContentMessageFactoryTest { thumbnailSource = MediaSource("url_thumbnail"), blurhash = A_BLUR_HASH, ) - ) + ), + isEdited = true, ), senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, ) val expected = TimelineItemImageContent( filename = "body.jpg", - formattedCaption = SpannedString("formatted"), caption = "body.jpg caption", + formattedCaption = SpannedString("formatted"), + isEdited = true, mediaSource = MediaSource(url = "url", json = null), thumbnailSource = MediaSource("url_thumbnail"), formattedFileSize = "888 Bytes", @@ -556,6 +570,7 @@ class TimelineItemContentMessageFactoryTest { filename = "filename", caption = null, formattedCaption = null, + isEdited = false, fileSource = MediaSource(url = "url", json = null), thumbnailSource = null, formattedFileSize = "0 Bytes", @@ -586,7 +601,8 @@ class TimelineItemContentMessageFactoryTest { ), thumbnailSource = MediaSource("url_thumbnail"), ) - ) + ), + isEdited = true, ), senderDisambiguatedDisplayName = "Bob", eventId = AN_EVENT_ID, @@ -595,6 +611,7 @@ class TimelineItemContentMessageFactoryTest { filename = "body.pdf", caption = null, formattedCaption = null, + isEdited = true, fileSource = MediaSource(url = "url", json = null), thumbnailSource = MediaSource("url_thumbnail"), formattedFileSize = "123 Bytes",