From 431f7a4182c54fd7c301a1bfd54135b9e0002b20 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 5 Jun 2024 17:41:31 +0200 Subject: [PATCH] Message queuing : remove timestamp error state and timestamp click in timeline item. --- .../features/messages/impl/MessagesView.kt | 4 -- .../messages/impl/timeline/TimelineView.kt | 11 ++-- .../components/ATimelineItemEventRow.kt | 1 - .../components/TimelineEventTimestampView.kt | 51 +++---------------- .../components/TimelineItemEventRow.kt | 24 +++------ .../TimelineItemGroupedEventsRow.kt | 6 --- .../timeline/components/TimelineItemRow.kt | 3 -- .../receipt/TimelineItemReadReceiptView.kt | 6 +-- 8 files changed, 19 insertions(+), 87 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 5d25e5a273..f1eb0894a6 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 @@ -103,7 +103,6 @@ import io.element.android.libraries.designsystem.utils.OnLifecycleEvent import io.element.android.libraries.designsystem.utils.snackbar.SnackbarHost import io.element.android.libraries.designsystem.utils.snackbar.rememberSnackbarHostState import io.element.android.libraries.matrix.api.core.UserId -import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.collections.immutable.ImmutableList import timber.log.Timber @@ -213,7 +212,6 @@ fun MessagesView( onMessageLongClick = ::onMessageLongClick, onUserDataClick = onUserDataClick, onLinkClick = onLinkClick, - onTimestampClick = { /* no-op */ }, onReactionClick = ::onEmojiReactionClick, onReactionLongClick = ::onEmojiReactionLongClick, onMoreReactionsClick = ::onMoreReactionsClick, @@ -314,7 +312,6 @@ private fun MessagesViewContent( onMoreReactionsClick: (TimelineItem.Event) -> Unit, onReadReceiptClick: (TimelineItem.Event) -> Unit, onMessageLongClick: (TimelineItem.Event) -> Unit, - onTimestampClick: (TimelineItem.Event) -> Unit, onSendLocationClick: () -> Unit, onCreatePollClick: () -> Unit, forceJumpToBottomVisibility: Boolean, @@ -381,7 +378,6 @@ private fun MessagesViewContent( onLinkClick = onLinkClick, onMessageClick = onMessageClick, onMessageLongClick = onMessageLongClick, - onTimestampClick = onTimestampClick, onSwipeToReply = onSwipeToReply, onReactionClick = onReactionClick, onReactionLongClick = onReactionLongClick, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt index 46761d15cb..3b52a9fc4c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineView.kt @@ -83,7 +83,6 @@ fun TimelineView( onLinkClick: (String) -> Unit, onMessageClick: (TimelineItem.Event) -> Unit, onMessageLongClick: (TimelineItem.Event) -> Unit, - onTimestampClick: (TimelineItem.Event) -> Unit, onSwipeToReply: (TimelineItem.Event) -> Unit, onReactionClick: (emoji: String, TimelineItem.Event) -> Unit, onReactionLongClick: (emoji: String, TimelineItem.Event) -> Unit, @@ -147,7 +146,6 @@ fun TimelineView( onReactionLongClick = onReactionLongClick, onMoreReactionsClick = onMoreReactionsClick, onReadReceiptClick = onReadReceiptClick, - onTimestampClick = onTimestampClick, eventSink = state.eventSink, onSwipeToReply = onSwipeToReply, ) @@ -243,8 +241,8 @@ private fun BoxScope.TimelineScrollHelper( // Use inverse of canAutoScroll otherwise we might briefly see the before the scroll animation is triggered isVisible = !canAutoScroll || forceJumpToBottomVisibility || !isLive, modifier = Modifier - .align(Alignment.BottomEnd) - .padding(end = 24.dp, bottom = 12.dp), + .align(Alignment.BottomEnd) + .padding(end = 24.dp, bottom = 12.dp), onClick = { jumpToBottom() }, ) } @@ -271,8 +269,8 @@ private fun JumpToBottomButton( ) { Icon( modifier = Modifier - .size(24.dp) - .rotate(90f), + .size(24.dp) + .rotate(90f), imageVector = CompoundIcons.ArrowRight(), contentDescription = stringResource(id = CommonStrings.a11y_jump_to_bottom) ) @@ -299,7 +297,6 @@ internal fun TimelineViewPreview( onLinkClick = {}, onMessageClick = {}, onMessageLongClick = {}, - onTimestampClick = {}, onSwipeToReply = {}, onReactionClick = { _, _ -> }, onReactionLongClick = { _, _ -> }, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/ATimelineItemEventRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/ATimelineItemEventRow.kt index b6e6646c1e..8e482c020f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/ATimelineItemEventRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/ATimelineItemEventRow.kt @@ -45,6 +45,5 @@ internal fun ATimelineItemEventRow( onMoreReactionsClick = {}, onReadReceiptClick = {}, onSwipeToReply = {}, - onTimestampClick = {}, eventSink = {}, ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt index 9206369a1e..1f68206e17 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineEventTimestampView.kt @@ -16,61 +16,34 @@ package io.element.android.features.messages.impl.timeline.components -import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.combinedClickable -import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.material.ripple.rememberRipple import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme -import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.event.isEdited import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Text -import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState import io.element.android.libraries.ui.strings.CommonStrings -@OptIn(ExperimentalFoundationApi::class) @Composable fun TimelineEventTimestampView( - event: TimelineItem.Event, - onClick: () -> Unit, - onLongClick: () -> Unit, + formattedTime: String, + isMessageEdited: Boolean, modifier: Modifier = Modifier, ) { - val formattedTime = event.sentTime - val hasMessageSendingFailed = event.localSendState is LocalEventSendState.SendingFailed - val isMessageEdited = event.content.isEdited() - val tint = if (hasMessageSendingFailed) MaterialTheme.colorScheme.error else null - val clickModifier = if (hasMessageSendingFailed) { - Modifier.combinedClickable( - onClick = onClick, - onLongClick = onLongClick, - indication = rememberRipple(bounded = false), - interactionSource = remember { MutableInteractionSource() } - ) - } else { - Modifier - } Row( modifier = Modifier - .then(clickModifier) - // Add extra padding for touch target size .padding(PaddingValues(start = TimelineEventTimestampViewDefaults.spacing)) .then(modifier), verticalAlignment = Alignment.CenterVertically, @@ -79,37 +52,25 @@ fun TimelineEventTimestampView( Text( stringResource(CommonStrings.common_edited_suffix), style = ElementTheme.typography.fontBodyXsRegular, - color = tint ?: MaterialTheme.colorScheme.secondary, + color = MaterialTheme.colorScheme.secondary, ) Spacer(modifier = Modifier.width(4.dp)) } Text( formattedTime, style = ElementTheme.typography.fontBodyXsRegular, - color = tint ?: MaterialTheme.colorScheme.secondary, + color = MaterialTheme.colorScheme.secondary, ) - if (hasMessageSendingFailed && tint != null) { - Spacer(modifier = Modifier.width(2.dp)) - Icon( - imageVector = CompoundIcons.Error(), - contentDescription = stringResource(id = CommonStrings.common_sending_failed), - tint = tint, - modifier = Modifier.size(15.dp, 18.dp), - ) - } } } @PreviewsDayNight @Composable internal fun TimelineEventTimestampViewPreview(@PreviewParameter(TimelineItemEventForTimestampViewProvider::class) event: TimelineItem.Event) = ElementPreview { - TimelineEventTimestampView( - event = event, - onClick = {}, - onLongClick = {}, - ) + TimelineEventTimestampView(formattedTime = event.sentTime, isMessageEdited = event.content.isEdited()) } object TimelineEventTimestampViewDefaults { val spacing = 16.dp } + diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt index 993d872852..0c5dec2553 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemEventRow.kt @@ -92,6 +92,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemImageContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.features.messages.impl.timeline.model.event.canBeRepliedTo +import io.element.android.features.messages.impl.timeline.model.event.isEdited import io.element.android.features.messages.impl.timeline.model.eventId import io.element.android.features.messages.impl.timeline.model.metadata import io.element.android.libraries.designsystem.atomic.atoms.PlaceholderAtom @@ -130,7 +131,6 @@ fun TimelineItemEventRow( onLinkClick: (String) -> Unit, onUserDataClick: (UserId) -> Unit, inReplyToClick: (EventId) -> Unit, - onTimestampClick: (TimelineItem.Event) -> Unit, onReactionClick: (emoji: String, eventId: TimelineItem.Event) -> Unit, onReactionLongClick: (emoji: String, eventId: TimelineItem.Event) -> Unit, onMoreReactionsClick: (eventId: TimelineItem.Event) -> Unit, @@ -190,7 +190,6 @@ fun TimelineItemEventRow( interactionSource = interactionSource, onClick = onClick, onLongClick = onLongClick, - onTimestampClick = onTimestampClick, inReplyToClick = ::inReplyToClick, onUserDataClick = ::onUserDataClick, onReactionClick = { emoji -> onReactionClick(emoji, event) }, @@ -209,7 +208,6 @@ fun TimelineItemEventRow( interactionSource = interactionSource, onClick = onClick, onLongClick = onLongClick, - onTimestampClick = onTimestampClick, inReplyToClick = ::inReplyToClick, onUserDataClick = ::onUserDataClick, onReactionClick = { emoji -> onReactionClick(emoji, event) }, @@ -265,7 +263,6 @@ private fun TimelineItemEventRowContent( interactionSource: MutableInteractionSource, onClick: () -> Unit, onLongClick: () -> Unit, - onTimestampClick: (TimelineItem.Event) -> Unit, inReplyToClick: () -> Unit, onUserDataClick: () -> Unit, onReactionClick: (emoji: String) -> Unit, @@ -337,9 +334,6 @@ private fun TimelineItemEventRowContent( event = event, onMessageLongClick = onLongClick, inReplyToClick = inReplyToClick, - onTimestampClick = { - onTimestampClick(event) - }, onLinkClick = onLinkClick, eventSink = eventSink, ) @@ -419,7 +413,6 @@ private fun MessageEventBubbleContent( event: TimelineItem.Event, onMessageLongClick: () -> Unit, inReplyToClick: () -> Unit, - onTimestampClick: () -> Unit, onLinkClick: (String) -> Unit, eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit, @SuppressLint("ModifierParameter") @@ -467,9 +460,8 @@ private fun MessageEventBubbleContent( Box(modifier, contentAlignment = Alignment.Center) { content {} TimelineEventTimestampView( - event = event, - onClick = onTimestampClick, - onLongClick = ::onTimestampLongClick, + formattedTime = event.sentTime, + isMessageEdited = event.content.isEdited(), modifier = Modifier // Outer padding .padding(horizontal = 4.dp, vertical = 4.dp) @@ -489,9 +481,8 @@ private fun MessageEventBubbleContent( content = { content(this::onContentLayoutChange) }, overlay = { TimelineEventTimestampView( - event = event, - onClick = onTimestampClick, - onLongClick = ::onTimestampLongClick, + formattedTime = event.sentTime, + isMessageEdited = event.content.isEdited(), modifier = Modifier .padding(horizontal = 8.dp, vertical = 4.dp) ) @@ -501,9 +492,8 @@ private fun MessageEventBubbleContent( Column(modifier) { content {} TimelineEventTimestampView( - event = event, - onClick = onTimestampClick, - onLongClick = ::onTimestampLongClick, + formattedTime = event.sentTime, + isMessageEdited = event.content.isEdited(), modifier = Modifier .align(Alignment.End) .padding(horizontal = 8.dp, vertical = 4.dp) 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 6f9f8146a2..96857802e0 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 @@ -49,7 +49,6 @@ fun TimelineItemGroupedEventsRow( inReplyToClick: (EventId) -> Unit, onUserDataClick: (UserId) -> Unit, onLinkClick: (String) -> Unit, - onTimestampClick: (TimelineItem.Event) -> Unit, onReactionClick: (key: String, TimelineItem.Event) -> Unit, onReactionLongClick: (key: String, TimelineItem.Event) -> Unit, onMoreReactionsClick: (TimelineItem.Event) -> Unit, @@ -76,7 +75,6 @@ fun TimelineItemGroupedEventsRow( inReplyToClick = inReplyToClick, onUserDataClick = onUserDataClick, onLinkClick = onLinkClick, - onTimestampClick = onTimestampClick, onReactionClick = onReactionClick, onReactionLongClick = onReactionLongClick, onMoreReactionsClick = onMoreReactionsClick, @@ -100,7 +98,6 @@ private fun TimelineItemGroupedEventsRowContent( inReplyToClick: (EventId) -> Unit, onUserDataClick: (UserId) -> Unit, onLinkClick: (String) -> Unit, - onTimestampClick: (TimelineItem.Event) -> Unit, onReactionClick: (key: String, TimelineItem.Event) -> Unit, onReactionLongClick: (key: String, TimelineItem.Event) -> Unit, onMoreReactionsClick: (TimelineItem.Event) -> Unit, @@ -133,7 +130,6 @@ private fun TimelineItemGroupedEventsRowContent( inReplyToClick = inReplyToClick, onUserDataClick = onUserDataClick, onLinkClick = onLinkClick, - onTimestampClick = onTimestampClick, onReactionClick = onReactionClick, onReactionLongClick = onReactionLongClick, onMoreReactionsClick = onMoreReactionsClick, @@ -174,7 +170,6 @@ internal fun TimelineItemGroupedEventsRowContentExpandedPreview() = ElementPrevi inReplyToClick = {}, onUserDataClick = {}, onLinkClick = {}, - onTimestampClick = {}, onReactionClick = { _, _ -> }, onReactionLongClick = { _, _ -> }, onMoreReactionsClick = {}, @@ -199,7 +194,6 @@ internal fun TimelineItemGroupedEventsRowContentCollapsePreview() = ElementPrevi inReplyToClick = {}, onUserDataClick = {}, onLinkClick = {}, - onTimestampClick = {}, onReactionClick = { _, _ -> }, onReactionLongClick = { _, _ -> }, onMoreReactionsClick = {}, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt index d1e49a8c43..4ff835949d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemRow.kt @@ -53,7 +53,6 @@ internal fun TimelineItemRow( onReactionLongClick: (key: String, TimelineItem.Event) -> Unit, onMoreReactionsClick: (TimelineItem.Event) -> Unit, onReadReceiptClick: (TimelineItem.Event) -> Unit, - onTimestampClick: (TimelineItem.Event) -> Unit, onSwipeToReply: (TimelineItem.Event) -> Unit, eventSink: (TimelineEvents.EventFromTimelineItem) -> Unit, modifier: Modifier = Modifier @@ -105,7 +104,6 @@ internal fun TimelineItemRow( onReactionLongClick = onReactionLongClick, onMoreReactionsClick = onMoreReactionsClick, onReadReceiptClick = onReadReceiptClick, - onTimestampClick = onTimestampClick, onSwipeToReply = { onSwipeToReply(timelineItem) }, eventSink = eventSink, ) @@ -123,7 +121,6 @@ internal fun TimelineItemRow( inReplyToClick = inReplyToClick, onUserDataClick = onUserDataClick, onLinkClick = onLinkClick, - onTimestampClick = onTimestampClick, onReactionClick = onReactionClick, onReactionLongClick = onReactionLongClick, onMoreReactionsClick = onMoreReactionsClick, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt index 052358a11d..84f619341c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/TimelineItemReadReceiptView.kt @@ -81,7 +81,8 @@ fun TimelineItemReadReceiptView( } } else { when (state.sendState) { - LocalEventSendState.NotSentYet -> { + is LocalEventSendState.SendingFailed, + is LocalEventSendState.NotSentYet -> { ReadReceiptsRow(modifier) { Icon( modifier = Modifier.padding(2.dp), @@ -91,9 +92,6 @@ fun TimelineItemReadReceiptView( ) } } - is LocalEventSendState.SendingFailed -> { - // Error? The timestamp is already displayed in red - } null, is LocalEventSendState.Sent -> { if (state.isLastOutgoingMessage) {