Update UI of replies.

This commit is contained in:
Benoit Marty
2026-03-25 15:27:36 +01:00
parent 24f897917f
commit 0aa1084fb3
3 changed files with 49 additions and 34 deletions

View File

@@ -10,6 +10,7 @@ package io.element.android.features.messages.impl.timeline.components
import android.annotation.SuppressLint import android.annotation.SuppressLint
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.draggable import androidx.compose.foundation.gestures.draggable
@@ -269,7 +270,9 @@ fun TimelineItemEventRow(
if (displayThreadSummaries && timelineMode !is Timeline.Mode.Thread && event.threadInfo is TimelineItemThreadInfo.ThreadRoot) { if (displayThreadSummaries && timelineMode !is Timeline.Mode.Thread && event.threadInfo is TimelineItemThreadInfo.ThreadRoot) {
ThreadSummaryView( ThreadSummaryView(
modifier = if (event.isMine) { modifier = if (event.isMine) {
Modifier.align(Alignment.End).padding(end = 16.dp) Modifier
.align(Alignment.End)
.padding(end = 16.dp)
} else { } else {
if (timelineRoomInfo.isDm) Modifier else Modifier.padding(start = 16.dp) if (timelineRoomInfo.isDm) Modifier else Modifier.padding(start = 16.dp)
}.padding(top = 2.dp), }.padding(top = 2.dp),
@@ -742,12 +745,18 @@ private fun MessageEventBubbleContent(
} else { } else {
inReplyToModifier.clickable(onClick = inReplyToClick) inReplyToModifier.clickable(onClick = inReplyToClick)
} }
Row(
talkbackCompatModifier
.border(1.dp, ElementTheme.colors.borderInteractiveSecondary, RoundedCornerShape(6.dp))
.background(ElementTheme.colors.bgCanvasDefault, RoundedCornerShape(6.dp))
.padding(4.dp)
) {
InReplyToView( InReplyToView(
inReplyTo = inReplyTo, inReplyTo = inReplyTo,
hideImage = timelineProtectionState.hideMediaContent(inReplyTo.eventId()), hideImage = timelineProtectionState.hideMediaContent(inReplyTo.eventId()),
modifier = talkbackCompatModifier,
) )
} }
}
if (inReplyToDetails != null) { if (inReplyToDetails != null) {
// Use SubComposeLayout only if necessary as it can have consequences on the performance. // Use SubComposeLayout only if necessary as it can have consequences on the performance.
EqualWidthColumn(spacing = 8.dp) { EqualWidthColumn(spacing = 8.dp) {
@@ -833,7 +842,8 @@ internal fun TimelineItemEventRowWithThreadSummaryPreview() = ElementPreview {
groupPosition = TimelineItemGroupPosition.First, groupPosition = TimelineItemGroupPosition.First,
threadInfo = TimelineItemThreadInfo.ThreadRoot( threadInfo = TimelineItemThreadInfo.ThreadRoot(
latestEventText = "This is the latest message in the thread", latestEventText = "This is the latest message in the thread",
summary = ThreadSummary(AsyncData.Success( summary = ThreadSummary(
AsyncData.Success(
EmbeddedEventInfo( EmbeddedEventInfo(
eventOrTransactionId = EventOrTransactionId.Event(EventId("\$event-id")), eventOrTransactionId = EventOrTransactionId.Event(EventId("\$event-id")),
content = MessageContent( content = MessageContent(
@@ -851,7 +861,8 @@ internal fun TimelineItemEventRowWithThreadSummaryPreview() = ElementPreview {
), ),
timestamp = 0L, timestamp = 0L,
) )
), numberOfReplies = 20L) ), numberOfReplies = 20L
)
) )
), ),
displayThreadSummaries = true, displayThreadSummaries = true,

View File

@@ -18,7 +18,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@@ -82,19 +81,19 @@ private fun ReplyToReadyContent(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
val paddings = if (metadata is InReplyToMetadata.Thumbnail) { val paddings = if (metadata is InReplyToMetadata.Thumbnail) {
PaddingValues(start = 4.dp, end = 12.dp, top = 4.dp, bottom = 4.dp) PaddingValues(end = 8.dp)
} else { } else {
PaddingValues(horizontal = 12.dp, vertical = 4.dp) PaddingValues(start = 8.dp, end = 8.dp)
} }
Row( Row(
modifier modifier
.background(MaterialTheme.colorScheme.surface) .background(ElementTheme.colors.bgCanvasDefault)
.padding(paddings) .padding(paddings)
) { ) {
if (metadata is InReplyToMetadata.Thumbnail) { if (metadata is InReplyToMetadata.Thumbnail) {
AttachmentThumbnail( AttachmentThumbnail(
info = metadata.attachmentThumbnailInfo, info = metadata.attachmentThumbnailInfo,
backgroundColor = MaterialTheme.colorScheme.surfaceVariant, backgroundColor = ElementTheme.colors.bgSubtlePrimary,
modifier = Modifier modifier = Modifier
.size(36.dp) .size(36.dp)
.clip(RoundedCornerShape(4.dp)) .clip(RoundedCornerShape(4.dp))
@@ -128,7 +127,7 @@ private fun ReplyToLoadingContent(
val paddings = PaddingValues(horizontal = 12.dp, vertical = 4.dp) val paddings = PaddingValues(horizontal = 12.dp, vertical = 4.dp)
Row( Row(
modifier modifier
.background(MaterialTheme.colorScheme.surface) .background(ElementTheme.colors.bgCanvasDefault)
.padding(paddings) .padding(paddings)
) { ) {
Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {
@@ -146,7 +145,7 @@ private fun ReplyToErrorContent(
val paddings = PaddingValues(horizontal = 12.dp, vertical = 4.dp) val paddings = PaddingValues(horizontal = 12.dp, vertical = 4.dp)
Row( Row(
modifier modifier
.background(MaterialTheme.colorScheme.surface) .background(ElementTheme.colors.bgCanvasDefault)
.padding(paddings) .padding(paddings)
) { ) {
Text( Text(

View File

@@ -9,6 +9,7 @@
package io.element.android.libraries.textcomposer package io.element.android.libraries.textcomposer
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@@ -120,6 +121,9 @@ private fun EditingModeView(
} }
} }
/**
* https://www.figma.com/design/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?node-id=2019-6286
*/
@Composable @Composable
private fun ReplyToModeView( private fun ReplyToModeView(
replyToDetails: InReplyToDetails, replyToDetails: InReplyToDetails,
@@ -129,8 +133,9 @@ private fun ReplyToModeView(
) { ) {
Row( Row(
modifier modifier
.clip(RoundedCornerShape(13.dp)) .clip(RoundedCornerShape(6.dp))
.background(MaterialTheme.colorScheme.surface) .background(ElementTheme.colors.bgCanvasDefault)
.border(1.dp, ElementTheme.colors.borderInteractiveSecondary, RoundedCornerShape(6.dp))
.padding(4.dp) .padding(4.dp)
) { ) {
InReplyToView( InReplyToView(