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)) Spacer(modifier = Modifier.width(16.dp))
} }
Column { Column {
if (messageEvent.groupPosition.showSenderInformation() && !messageEvent.isMine) { if (messageEvent.showSenderInformation) {
MessageSenderInformation(messageEvent.sender, messageEvent.senderAvatar) MessageSenderInformation(messageEvent.sender, messageEvent.senderAvatar)
} }
MessageEventBubble(messageEvent) MessageEventBubble(messageEvent)

View file

@ -73,9 +73,20 @@ class MessagesViewModel(
val currentTimelineItem = timelineItems[index] val currentTimelineItem = timelineItems[index]
val timelineItemState = when (currentTimelineItem) { val timelineItemState = when (currentTimelineItem) {
is MatrixTimelineItem.Event -> { is MatrixTimelineItem.Event -> {
val prevTimelineItem = timelineItems.getOrNull(index - 1) val prevTimelineItem =
val nextTimelineItem = timelineItems.getOrNull(index + 1) 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 = val messageType =
currentTimelineItem.event.content().asMessage()?.msgtype() currentTimelineItem.event.content().asMessage()?.msgtype()
val contentStr = when (messageType) { val contentStr = when (messageType) {
@ -91,7 +102,7 @@ class MessagesViewModel(
sender = currentTimelineItem.event.sender(), sender = currentTimelineItem.event.sender(),
content = contentStr, content = contentStr,
isMine = currentTimelineItem.event.sender() == client.userId().value, isMine = currentTimelineItem.event.sender() == client.userId().value,
groupPosition = MessagesItemGroupPosition.None groupPosition = groupPosition
) )
} }
is MatrixTimelineItem.Virtual -> MessagesTimelineItemState.Virtual( is MatrixTimelineItem.Virtual -> MessagesTimelineItemState.Virtual(

View file

@ -6,12 +6,4 @@ sealed interface MessagesItemGroupPosition {
object Last : MessagesItemGroupPosition object Last : MessagesItemGroupPosition
object None : 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 sentTime: String = "",
val isMine: Boolean = false, val isMine: Boolean = false,
val groupPosition: MessagesItemGroupPosition = MessagesItemGroupPosition.None 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 roomAvatar = null
) )
} }