diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index ee0eae1f0b..ab75afdcd0 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -204,11 +204,10 @@ internal fun aGroupedEvents(id: Long = 0): TimelineItem.GroupedEvents { receipts = listOf(aReadReceiptData(1)).toPersistentList(), ), ) + val events = listOf(event1, event2) return TimelineItem.GroupedEvents( id = id.toString(), - events = listOf( - event1, - event2, - ).toImmutableList() + events = events.toImmutableList(), + aggregatedReadReceipts = events.flatMap { it.readReceiptState.receipts }.toImmutableList(), ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt index 970450f0c4..9b7de4ea19 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemGroupedEventsRow.kt @@ -37,7 +37,6 @@ import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId -import kotlinx.collections.immutable.toImmutableList @Composable fun TimelineItemGroupedEventsRow( @@ -147,7 +146,7 @@ private fun TimelineItemGroupedEventsRowContent( state = ReadReceiptViewState( sendState = null, isLastOutgoingMessage = false, - receipts = timelineItem.events.flatMap { it.readReceiptState.receipts }.toImmutableList(), + receipts = timelineItem.aggregatedReadReceipts, ), showReadReceipts = true, onReadReceiptsClicked = { /* No op for group event */ }) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt index e9e9af6445..f819be4161 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt @@ -73,7 +73,8 @@ private fun MutableList.addGroup( add( TimelineItem.GroupedEvents( id = groupId, - events = groupOfItems.toImmutableList() + events = groupOfItems.toImmutableList(), + aggregatedReadReceipts = groupOfItems.flatMap { it.readReceiptState.receipts }.toImmutableList() ) ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt index 68dc8a0790..916a9b88b4 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/model/TimelineItem.kt @@ -88,6 +88,6 @@ sealed interface TimelineItem { data class GroupedEvents( val id: String, val events: ImmutableList, + val aggregatedReadReceipts: ImmutableList, ) : TimelineItem - } diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt index f8579aaf15..1f111f248c 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouperTest.kt @@ -86,11 +86,12 @@ class TimelineItemGrouperTest { assertThat(result).isEqualTo( listOf( TimelineItem.GroupedEvents( - computeGroupIdWith(aGroupableItem), + id = computeGroupIdWith(aGroupableItem), events = listOf( aGroupableItem.copy("0"), aGroupableItem.copy(id = "1"), - ).toImmutableList() + ).toImmutableList(), + aggregatedReadReceipts = emptyList().toImmutableList(), ), ) ) @@ -132,20 +133,22 @@ class TimelineItemGrouperTest { assertThat(result).isEqualTo( listOf( TimelineItem.GroupedEvents( - computeGroupIdWith(aGroupableItem), + id = computeGroupIdWith(aGroupableItem), events = listOf( aGroupableItem, aGroupableItem, - ).toImmutableList() + ).toImmutableList(), + aggregatedReadReceipts = emptyList().toImmutableList(), ), aNonGroupableItem, TimelineItem.GroupedEvents( - computeGroupIdWith(aGroupableItem), + id = computeGroupIdWith(aGroupableItem), events = listOf( aGroupableItem, aGroupableItem, aGroupableItem, - ).toImmutableList() + ).toImmutableList(), + aggregatedReadReceipts = emptyList().toImmutableList(), ) ) )