Timeline: compute group position
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -6,12 +6,4 @@ sealed interface MessagesItemGroupPosition {
|
||||
object Last : MessagesItemGroupPosition
|
||||
object None : MessagesItemGroupPosition
|
||||
|
||||
fun showSenderInformation(): Boolean {
|
||||
return when (this) {
|
||||
First, None -> true
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -21,4 +21,8 @@ data class MessagesViewState(
|
||||
roomAvatar = null
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user