Timeline: compute group position

This commit is contained in:
ganfra
2022-11-08 09:54:23 +01:00
parent ae051f0885
commit a69549bbfc
5 changed files with 26 additions and 13 deletions

View File

@@ -149,7 +149,7 @@ fun MessageEventRow(
Spacer(modifier = Modifier.width(16.dp))
}
Column {
if (messageEvent.groupPosition.showSenderInformation() && !messageEvent.isMine) {
if (messageEvent.showSenderInformation) {
MessageSenderInformation(messageEvent.sender, messageEvent.senderAvatar)
}
MessageEventBubble(messageEvent)

View File

@@ -73,9 +73,20 @@ class MessagesViewModel(
val currentTimelineItem = timelineItems[index]
val timelineItemState = when (currentTimelineItem) {
is MatrixTimelineItem.Event -> {
val prevTimelineItem = timelineItems.getOrNull(index - 1)
val nextTimelineItem = timelineItems.getOrNull(index + 1)
val prevTimelineItem =
timelineItems.getOrNull(index - 1) as? MatrixTimelineItem.Event
val nextTimelineItem =
timelineItems.getOrNull(index + 1) as? MatrixTimelineItem.Event
val currentSender = currentTimelineItem.event.sender()
val previousSender = prevTimelineItem?.event?.sender()
val nextSender = nextTimelineItem?.event?.sender()
val groupPosition = when {
previousSender != currentSender && nextSender == currentSender -> MessagesItemGroupPosition.First
previousSender == currentSender && nextSender == currentSender -> MessagesItemGroupPosition.Middle
previousSender == currentSender && nextSender != currentSender -> MessagesItemGroupPosition.Last
else -> MessagesItemGroupPosition.None
}
val messageType =
currentTimelineItem.event.content().asMessage()?.msgtype()
val contentStr = when (messageType) {
@@ -91,7 +102,7 @@ class MessagesViewModel(
sender = currentTimelineItem.event.sender(),
content = contentStr,
isMine = currentTimelineItem.event.sender() == client.userId().value,
groupPosition = MessagesItemGroupPosition.None
groupPosition = groupPosition
)
}
is MatrixTimelineItem.Virtual -> MessagesTimelineItemState.Virtual(

View File

@@ -6,12 +6,4 @@ sealed interface MessagesItemGroupPosition {
object Last : MessagesItemGroupPosition
object None : MessagesItemGroupPosition
fun showSenderInformation(): Boolean {
return when (this) {
First, None -> true
else -> false
}
}
}

View File

@@ -15,7 +15,13 @@ sealed interface MessagesTimelineItemState {
val sentTime: String = "",
val isMine: Boolean = false,
val groupPosition: MessagesItemGroupPosition = MessagesItemGroupPosition.None
) : MessagesTimelineItemState
) : MessagesTimelineItemState {
val showSenderInformation: Boolean = when (groupPosition) {
MessagesItemGroupPosition.First, MessagesItemGroupPosition.None -> !isMine
else -> false
}
}
}

View File

@@ -21,4 +21,8 @@ data class MessagesViewState(
roomAvatar = null
)
}