From 682c681fb2f502de2965b7bf96abc84502293923 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 28 Nov 2023 14:26:37 +0100 Subject: [PATCH] Add read receipt on GroupedEvents --- .../messages/impl/timeline/TimelineStateProvider.kt | 13 ++++++++++--- .../components/TimelineItemGroupedEventsRow.kt | 12 ++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) 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 8cfcb56ca0..ee0eae1f0b 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 @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.timeline +import io.element.android.features.messages.impl.timeline.components.receipt.aReadReceiptData import io.element.android.features.messages.impl.timeline.model.InReplyToDetails import io.element.android.features.messages.impl.timeline.model.ReadReceiptData import io.element.android.features.messages.impl.timeline.model.TimelineItem @@ -186,16 +187,22 @@ internal fun aTimelineItemReadReceipts(): TimelineItemReadReceipts { ) } -fun aGroupedEvents(id: Long = 0): TimelineItem.GroupedEvents { +internal fun aGroupedEvents(id: Long = 0): TimelineItem.GroupedEvents { val event1 = aTimelineItemEvent( isMine = true, content = aTimelineItemStateEventContent(), - groupPosition = TimelineItemGroupPosition.None + groupPosition = TimelineItemGroupPosition.None, + readReceiptState = TimelineItemReadReceipts( + receipts = listOf(aReadReceiptData(0)).toPersistentList(), + ), ) val event2 = aTimelineItemEvent( isMine = true, content = aTimelineItemStateEventContent(body = "Another state event"), - groupPosition = TimelineItemGroupPosition.None + groupPosition = TimelineItemGroupPosition.None, + readReceiptState = TimelineItemReadReceipts( + receipts = listOf(aReadReceiptData(1)).toPersistentList(), + ), ) return TimelineItem.GroupedEvents( id = id.toString(), 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 51b103b51f..970450f0c4 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 @@ -28,6 +28,8 @@ import io.element.android.features.messages.impl.timeline.TimelineEvents import io.element.android.features.messages.impl.timeline.TimelineItemRow import io.element.android.features.messages.impl.timeline.aGroupedEvents import io.element.android.features.messages.impl.timeline.components.group.GroupHeaderView +import io.element.android.features.messages.impl.timeline.components.receipt.ReadReceiptViewState +import io.element.android.features.messages.impl.timeline.components.receipt.TimelineItemReadReceiptView import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.session.SessionState import io.element.android.features.messages.impl.timeline.session.aSessionState @@ -35,6 +37,7 @@ 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( @@ -139,6 +142,15 @@ private fun TimelineItemGroupedEventsRowContent( ) } } + } else if (showReadReceipts) { + TimelineItemReadReceiptView( + state = ReadReceiptViewState( + sendState = null, + isLastOutgoingMessage = false, + receipts = timelineItem.events.flatMap { it.readReceiptState.receipts }.toImmutableList(), + ), + showReadReceipts = true, + onReadReceiptsClicked = { /* No op for group event */ }) } } }