Display edited poll indicator in the timeline

This commit is contained in:
jonnyandrew 2023-11-27 13:14:00 +00:00
parent abddf3c3da
commit 583131de6a
No known key found for this signature in database
GPG key ID: 0D58D4EF33D27015
10 changed files with 25 additions and 6 deletions

View file

@ -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(
) {
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(

View file

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

View file

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

View file

@ -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
}

View file

@ -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"
}

View file

@ -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(
question = question,
answerItems = answerItems,
isEnded = isEnded,
isEdited = isEdited,
)
}

View file

@ -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 {
answerItems = answerItems,
pollKind = pollKind,
isEnded = isEnded,
isEdited = false,
)
private fun aPollAnswerItem(

View file

@ -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(

View file

@ -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 -> {

View file

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