Display edited poll indicator in the timeline
This commit is contained in:
parent
abddf3c3da
commit
583131de6a
10 changed files with 25 additions and 6 deletions
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -129,7 +129,8 @@ class InReplyToDetailsProvider : PreviewParameterProvider<InReplyToDetails> {
|
|||
maxSelections = 1u,
|
||||
answers = emptyList(),
|
||||
votes = emptyMap(),
|
||||
endTime = null
|
||||
endTime = null,
|
||||
isEdited = false,
|
||||
),
|
||||
).map {
|
||||
aInReplyToDetails(
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ class TimelineItemContentPollFactory @Inject constructor(
|
|||
answerItems = answerItems,
|
||||
pollKind = content.kind,
|
||||
isEnded = isEndedPoll,
|
||||
isEdited = content.isEdited,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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 -> {
|
||||
|
|
|
|||
|
|
@ -188,5 +188,6 @@ fun aPollContent(
|
|||
maxSelections = 1u,
|
||||
answers = answers,
|
||||
votes = mapOf(),
|
||||
endTime = null
|
||||
endTime = null,
|
||||
isEdited = false,
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue