From 1684e89b7c9e64bac1b161d41a8541b8a3f28696 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 16 Nov 2023 14:02:06 +0100 Subject: [PATCH] Read receipt: Open room member page when clicking on a read receipt from the bottom sheet. --- .../features/messages/impl/MessagesView.kt | 7 +++++-- .../bottomsheet/ReadReceiptBottomSheet.kt | 21 +++++++++++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt index 0ba868ba8a..d07afd43b5 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesView.kt @@ -70,8 +70,8 @@ import io.element.android.features.messages.impl.timeline.components.customreact import io.element.android.features.messages.impl.timeline.components.customreaction.CustomReactionEvents import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryEvents import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryView -import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheet +import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetEvents import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMenuEvents import io.element.android.features.messages.impl.timeline.components.retrysendmenu.RetrySendMessageMenu import io.element.android.features.messages.impl.timeline.model.TimelineItem @@ -252,7 +252,10 @@ fun MessagesView( ReactionSummaryView(state = state.reactionSummaryState) RetrySendMessageMenu(state = state.retrySendMenuState) - ReadReceiptBottomSheet(state = state.readReceiptBottomSheetState) + ReadReceiptBottomSheet( + state = state.readReceiptBottomSheetState, + onUserDataClicked = onUserDataClicked, + ) ReinviteDialog(state = state) // Since the textfield is now based on an Android view, this is no longer done automatically. diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheet.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheet.kt index d4fd994e3e..32c34ea2f9 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheet.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheet.kt @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Spacer @@ -43,6 +44,7 @@ import kotlinx.coroutines.launch @Composable internal fun ReadReceiptBottomSheet( state: ReadReceiptBottomSheetState, + onUserDataClicked: (UserId) -> Unit, modifier: Modifier = Modifier, ) { val isVisible = state.selectedEvent != null @@ -64,6 +66,13 @@ internal fun ReadReceiptBottomSheet( ) { ReadReceiptBottomSheetContent( state = state, + onUserDataClicked = { + coroutineScope.launch { + sheetState.hide() + state.eventSink(ReadReceiptBottomSheetEvents.Dismiss) + onUserDataClicked.invoke(it) + } + }, ) // FIXME remove after https://issuetracker.google.com/issues/275849044 Spacer(modifier = Modifier.height(32.dp)) @@ -74,14 +83,17 @@ internal fun ReadReceiptBottomSheet( @Composable private fun ColumnScope.ReadReceiptBottomSheetContent( state: ReadReceiptBottomSheetState, + onUserDataClicked: (UserId) -> Unit, ) { val receipts = state.selectedEvent?.readReceiptState?.receipts().orEmpty() receipts.forEach { + val userId = UserId(it.avatarData.id) MatrixUserRow( + modifier = Modifier.clickable { onUserDataClicked(userId) }, matrixUser = MatrixUser( - UserId(it.avatarData.id), - it.avatarData.name, - it.avatarData.url, + userId = userId, + displayName = it.avatarData.name, + avatarUrl = it.avatarData.url, ), avatarSize = AvatarSize.ReadReceiptList, trailingContent = { @@ -101,7 +113,8 @@ internal fun ReadReceiptBottomSheetPreview(@PreviewParameter(ReadReceiptBottomSh // TODO restore RetrySendMessageMenuBottomSheet once the issue with bottom sheet not being previewable is fixed Column { ReadReceiptBottomSheetContent( - state = state + state = state, + onUserDataClicked = {}, ) } }