diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt index 54282c8e49..efcd0bd6e0 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesScreen.kt @@ -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) diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt index 7fdf2739c9..3229265fb0 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/MessagesViewModel.kt @@ -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( diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesItemGroupPosition.kt b/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesItemGroupPosition.kt index c9c884b196..63f873773e 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesItemGroupPosition.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesItemGroupPosition.kt @@ -6,12 +6,4 @@ sealed interface MessagesItemGroupPosition { object Last : MessagesItemGroupPosition object None : MessagesItemGroupPosition - fun showSenderInformation(): Boolean { - return when (this) { - First, None -> true - else -> false - } - } - - } diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesTimelineItemState.kt b/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesTimelineItemState.kt index 50ca2d487e..da5e028593 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesTimelineItemState.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesTimelineItemState.kt @@ -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 + } + } } diff --git a/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesViewState.kt b/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesViewState.kt index fe0368a0b3..72fff2a4c5 100644 --- a/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesViewState.kt +++ b/features/messages/src/main/java/io/element/android/x/features/messages/model/MessagesViewState.kt @@ -21,4 +21,8 @@ data class MessagesViewState( roomAvatar = null ) + + + + }