Timeline: compute group position
This commit is contained in:
parent
ae051f0885
commit
a69549bbfc
5 changed files with 26 additions and 13 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,8 @@ data class MessagesViewState(
|
||||||
roomAvatar = null
|
roomAvatar = null
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue