Browse Source

Display edited poll indicator in the timeline

pull/1897/head
jonnyandrew 10 months ago
parent
commit
583131de6a
No known key found for this signature in database
GPG Key ID: D58D4EF33D27015
  1. 5
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt
  2. 3
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt
  3. 1
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactory.kt
  4. 10
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContent.kt
  5. 1
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemPollContent.kt
  6. 2
      features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemPollContentProvider.kt
  7. 2
      features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactoryTest.kt
  8. 3
      libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventContent.kt
  9. 1
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt
  10. 3
      libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt

5
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt

@ -36,8 +36,7 @@ import androidx.compose.ui.unit.dp @@ -36,8 +36,7 @@ import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextBasedContent
import io.element.android.libraries.core.bool.orFalse
import io.element.android.features.messages.impl.timeline.model.event.isEdited
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Icon
@ -55,7 +54,7 @@ fun TimelineEventTimestampView( @@ -55,7 +54,7 @@ fun TimelineEventTimestampView(
) {
val formattedTime = event.sentTime
val hasMessageSendingFailed = event.localSendState is LocalEventSendState.SendingFailed
val isMessageEdited = (event.content as? TimelineItemTextBasedContent)?.isEdited.orFalse()
val isMessageEdited = event.content.isEdited()
val tint = if (hasMessageSendingFailed) MaterialTheme.colorScheme.error else null
val clickModifier = if (hasMessageSendingFailed) {
Modifier.combinedClickable(

3
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRowWithReplyPreview.kt

@ -129,7 +129,8 @@ class InReplyToDetailsProvider : PreviewParameterProvider<InReplyToDetails> { @@ -129,7 +129,8 @@ class InReplyToDetailsProvider : PreviewParameterProvider<InReplyToDetails> {
maxSelections = 1u,
answers = emptyList(),
votes = emptyMap(),
endTime = null
endTime = null,
isEdited = false,
),
).map {
aInReplyToDetails(

1
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactory.kt

@ -76,6 +76,7 @@ class TimelineItemContentPollFactory @Inject constructor( @@ -76,6 +76,7 @@ class TimelineItemContentPollFactory @Inject constructor(
answerItems = answerItems,
pollKind = content.kind,
isEnded = isEndedPoll,
isEdited = content.isEdited,
)
}
}

10
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemEventContent.kt

@ -63,3 +63,13 @@ fun TimelineItemEventContent.canReact(): Boolean = @@ -63,3 +63,13 @@ fun TimelineItemEventContent.canReact(): Boolean =
is TimelineItemRedactedContent,
TimelineItemUnknownContent -> false
}
/**
* Whether the event content has been edited.
*/
fun TimelineItemEventContent.isEdited(): Boolean =
when (this) {
is TimelineItemTextBasedContent -> isEdited
is TimelineItemPollContent -> isEdited
else -> false
}

1
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemPollContent.kt

@ -26,6 +26,7 @@ data class TimelineItemPollContent( @@ -26,6 +26,7 @@ data class TimelineItemPollContent(
val answerItems: List<PollAnswerItem>,
val pollKind: PollKind,
val isEnded: Boolean,
val isEdited: Boolean
) : TimelineItemEventContent {
override val type: String = "TimelineItemPollContent"
}

2
features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/event/TimelineItemPollContentProvider.kt

@ -35,6 +35,7 @@ fun aTimelineItemPollContent( @@ -35,6 +35,7 @@ fun aTimelineItemPollContent(
question: String = aPollQuestion(),
answerItems: List<PollAnswerItem> = aPollAnswerItemList(),
isEnded: Boolean = false,
isEdited: Boolean = false,
): TimelineItemPollContent {
return TimelineItemPollContent(
eventId = EventId("\$anEventId"),
@ -42,5 +43,6 @@ fun aTimelineItemPollContent( @@ -42,5 +43,6 @@ fun aTimelineItemPollContent(
question = question,
answerItems = answerItems,
isEnded = isEnded,
isEdited = isEdited,
)
}

2
features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactoryTest.kt

@ -230,6 +230,7 @@ internal class TimelineItemContentPollFactoryTest { @@ -230,6 +230,7 @@ internal class TimelineItemContentPollFactoryTest {
answers = listOf(A_POLL_ANSWER_1, A_POLL_ANSWER_2, A_POLL_ANSWER_3, A_POLL_ANSWER_4),
votes = votes,
endTime = endTime,
isEdited = false,
)
private fun aTimelineItemPollContent(
@ -248,6 +249,7 @@ internal class TimelineItemContentPollFactoryTest { @@ -248,6 +249,7 @@ internal class TimelineItemContentPollFactoryTest {
answerItems = answerItems,
pollKind = pollKind,
isEnded = isEnded,
isEdited = false,
)
private fun aPollAnswerItem(

3
libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/EventContent.kt

@ -45,7 +45,8 @@ data class PollContent( @@ -45,7 +45,8 @@ data class PollContent(
val maxSelections: ULong,
val answers: List<PollAnswer>,
val votes: Map<String, List<UserId>>,
val endTime: ULong?
val endTime: ULong?,
val isEdited: Boolean,
) : EventContent
data class UnableToDecryptContent(

1
libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt

@ -111,6 +111,7 @@ class TimelineEventContentMapper(private val eventMessageMapper: EventMessageMap @@ -111,6 +111,7 @@ class TimelineEventContentMapper(private val eventMessageMapper: EventMessageMap
vote.value.map { userId -> UserId(userId) }
},
endTime = kind.endTime,
isEdited = kind.hasBeenEdited,
)
}
is TimelineItemContentKind.UnableToDecrypt -> {

3
libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt

@ -188,5 +188,6 @@ fun aPollContent( @@ -188,5 +188,6 @@ fun aPollContent(
maxSelections = 1u,
answers = answers,
votes = mapOf(),
endTime = null
endTime = null,
isEdited = false,
)

Loading…
Cancel
Save