diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/selectedmessage/SelectedMessageMenu.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/selectedmessage/SelectedMessageMenu.kt index d626a0ff375..80bcf22af81 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/selectedmessage/SelectedMessageMenu.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/selectedmessage/SelectedMessageMenu.kt @@ -113,6 +113,7 @@ public fun SelectedMessageMenu( currentUser = currentUser, ownCapabilities = ownCapabilities, showMessageFooter = false, + isPreviewMode = true, ) val messageAlignment = ChatTheme.messageAlignmentProvider.provideMessageAlignment(messageItemState) val bubbleAlignmentPadding = when (messageAlignment) { diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageContainer.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageContainer.kt index d23c05d7ef8..8e9c30f9430 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageContainer.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageContainer.kt @@ -50,6 +50,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clipToBounds +import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.input.pointer.positionChange @@ -188,9 +189,11 @@ public fun MessageContainer( }, ) - val backgroundColor = when (focusState is MessageFocused || message.isPinned(ChatTheme.timeProvider)) { - true -> ChatTheme.colors.backgroundCoreHighlight - else -> ChatTheme.colors.backgroundCoreHighlight.copy(alpha = 0f) + val highlightColor = ChatTheme.colors.backgroundCoreHighlight + val backgroundColor = when { + messageItem.isPreviewMode -> highlightColor.copy(alpha = 0f) + focusState is MessageFocused || message.isPinned(ChatTheme.timeProvider) -> highlightColor + else -> highlightColor.copy(alpha = 0f) } val color by animateColorAsState( @@ -357,6 +360,10 @@ internal fun DefaultMessageTop(messageItem: MessageItemState, onThreadClick: (Me } } +@Composable +private fun MessageItemState.annotationContentColor(default: Color = ChatTheme.colors.textPrimary): Color = + if (isPreviewMode) ChatTheme.colors.textOnAccent else default + @Composable private fun SavedForLaterAnnotation(item: MessageItemState) { val reminder = item.message.reminder @@ -364,7 +371,7 @@ private fun SavedForLaterAnnotation(item: MessageItemState) { MessageAnnotation( iconId = R.drawable.stream_compose_ic_annotation_bookmark, text = stringResource(R.string.stream_compose_message_list_saved_for_later), - contentColor = ChatTheme.colors.accentPrimary, + contentColor = item.annotationContentColor(default = ChatTheme.colors.accentPrimary), ) } } @@ -383,6 +390,7 @@ private fun PinnedAnnotation(item: MessageItemState) { iconId = R.drawable.stream_compose_ic_annotation_pin, text = pinnedByUser?.let { stringResource(R.string.stream_compose_pinned_to_channel_by, it) } ?: stringResource(R.string.stream_compose_pinned_to_channel), + contentColor = item.annotationContentColor(), ) } } @@ -399,6 +407,7 @@ private fun ShowInChannelAnnotation(item: MessageItemState, onThreadClick: (Mess iconId = R.drawable.stream_compose_ic_annotation_arrow_up_right, text = stringResource(alsoSendToChannelTextRes), trailingText = stringResource(R.string.stream_compose_message_list_view), + contentColor = item.annotationContentColor(), trailingTextColor = ChatTheme.colors.chatTextLink, onClick = { onThreadClick(item.message) }, ) @@ -414,6 +423,7 @@ private fun ReminderAnnotation(item: MessageItemState) { iconId = R.drawable.stream_compose_ic_annotation_reminder, text = stringResource(R.string.stream_compose_message_list_remind_me), trailingText = formatReminderDuration(remindAt.time, timeProvider()), + contentColor = item.annotationContentColor(), ) } } @@ -434,6 +444,7 @@ private fun TranslationAnnotation(item: MessageItemState) { MessageAnnotation( iconId = R.drawable.stream_compose_ic_annotation_translated, text = stringResource(R.string.stream_compose_message_list_auto_translated), + contentColor = item.annotationContentColor(), trailingText = if (item.showOriginalText) { stringResource(R.string.stream_compose_message_list_show_translation) } else { @@ -448,6 +459,7 @@ private fun TranslationAnnotation(item: MessageItemState) { MessageAnnotation( iconId = R.drawable.stream_compose_ic_annotation_translated, text = stringResource(R.string.stream_compose_message_list_auto_translated), + contentColor = item.annotationContentColor(), ) } } diff --git a/stream-chat-android-ui-common/api/stream-chat-android-ui-common.api b/stream-chat-android-ui-common/api/stream-chat-android-ui-common.api index 97ee478ea47..b43c16c3ce4 100644 --- a/stream-chat-android-ui-common/api/stream-chat-android-ui-common.api +++ b/stream-chat-android-ui-common/api/stream-chat-android-ui-common.api @@ -2843,14 +2843,15 @@ public final class io/getstream/chat/android/ui/common/state/messages/list/Messa public final class io/getstream/chat/android/ui/common/state/messages/list/MessageItemState : io/getstream/chat/android/ui/common/state/messages/list/HasMessageListItemState { public static final field $stable I - public fun (Lio/getstream/chat/android/models/Message;Ljava/lang/String;ZZZLio/getstream/chat/android/models/User;Lio/getstream/chat/android/ui/common/state/messages/list/MessagePosition;ZZLio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility;Lio/getstream/chat/android/ui/common/state/messages/list/MessageFocusState;Ljava/util/List;ZLjava/util/Set;)V - public synthetic fun (Lio/getstream/chat/android/models/Message;Ljava/lang/String;ZZZLio/getstream/chat/android/models/User;Lio/getstream/chat/android/ui/common/state/messages/list/MessagePosition;ZZLio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility;Lio/getstream/chat/android/ui/common/state/messages/list/MessageFocusState;Ljava/util/List;ZLjava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lio/getstream/chat/android/models/Message;Ljava/lang/String;ZZZLio/getstream/chat/android/models/User;Lio/getstream/chat/android/ui/common/state/messages/list/MessagePosition;ZZLio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility;Lio/getstream/chat/android/ui/common/state/messages/list/MessageFocusState;Ljava/util/List;ZLjava/util/Set;Z)V + public synthetic fun (Lio/getstream/chat/android/models/Message;Ljava/lang/String;ZZZLio/getstream/chat/android/models/User;Lio/getstream/chat/android/ui/common/state/messages/list/MessagePosition;ZZLio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility;Lio/getstream/chat/android/ui/common/state/messages/list/MessageFocusState;Ljava/util/List;ZLjava/util/Set;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lio/getstream/chat/android/models/Message; public final fun component10 ()Lio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility; public final fun component11 ()Lio/getstream/chat/android/ui/common/state/messages/list/MessageFocusState; public final fun component12 ()Ljava/util/List; public final fun component13 ()Z public final fun component14 ()Ljava/util/Set; + public final fun component15 ()Z public final fun component2 ()Ljava/lang/String; public final fun component3 ()Z public final fun component4 ()Z @@ -2859,8 +2860,8 @@ public final class io/getstream/chat/android/ui/common/state/messages/list/Messa public final fun component7 ()Lio/getstream/chat/android/ui/common/state/messages/list/MessagePosition; public final fun component8 ()Z public final fun component9 ()Z - public final fun copy (Lio/getstream/chat/android/models/Message;Ljava/lang/String;ZZZLio/getstream/chat/android/models/User;Lio/getstream/chat/android/ui/common/state/messages/list/MessagePosition;ZZLio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility;Lio/getstream/chat/android/ui/common/state/messages/list/MessageFocusState;Ljava/util/List;ZLjava/util/Set;)Lio/getstream/chat/android/ui/common/state/messages/list/MessageItemState; - public static synthetic fun copy$default (Lio/getstream/chat/android/ui/common/state/messages/list/MessageItemState;Lio/getstream/chat/android/models/Message;Ljava/lang/String;ZZZLio/getstream/chat/android/models/User;Lio/getstream/chat/android/ui/common/state/messages/list/MessagePosition;ZZLio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility;Lio/getstream/chat/android/ui/common/state/messages/list/MessageFocusState;Ljava/util/List;ZLjava/util/Set;ILjava/lang/Object;)Lio/getstream/chat/android/ui/common/state/messages/list/MessageItemState; + public final fun copy (Lio/getstream/chat/android/models/Message;Ljava/lang/String;ZZZLio/getstream/chat/android/models/User;Lio/getstream/chat/android/ui/common/state/messages/list/MessagePosition;ZZLio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility;Lio/getstream/chat/android/ui/common/state/messages/list/MessageFocusState;Ljava/util/List;ZLjava/util/Set;Z)Lio/getstream/chat/android/ui/common/state/messages/list/MessageItemState; + public static synthetic fun copy$default (Lio/getstream/chat/android/ui/common/state/messages/list/MessageItemState;Lio/getstream/chat/android/models/Message;Ljava/lang/String;ZZZLio/getstream/chat/android/models/User;Lio/getstream/chat/android/ui/common/state/messages/list/MessagePosition;ZZLio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility;Lio/getstream/chat/android/ui/common/state/messages/list/MessageFocusState;Ljava/util/List;ZLjava/util/Set;ZILjava/lang/Object;)Lio/getstream/chat/android/ui/common/state/messages/list/MessageItemState; public fun equals (Ljava/lang/Object;)Z public final fun getCurrentUser ()Lio/getstream/chat/android/models/User; public final fun getDeletedMessageVisibility ()Lio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility; @@ -2877,6 +2878,7 @@ public final class io/getstream/chat/android/ui/common/state/messages/list/Messa public final fun isMessageDelivered ()Z public final fun isMessageRead ()Z public final fun isMine ()Z + public final fun isPreviewMode ()Z public fun toString ()Ljava/lang/String; } diff --git a/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/state/messages/list/MessageListItemState.kt b/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/state/messages/list/MessageListItemState.kt index 54a0b672e03..48878b7c4fa 100644 --- a/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/state/messages/list/MessageListItemState.kt +++ b/stream-chat-android-ui-common/src/main/kotlin/io/getstream/chat/android/ui/common/state/messages/list/MessageListItemState.kt @@ -72,6 +72,7 @@ public sealed class HasMessageListItemState : MessageListItemState() { * @param showOriginalText If the original text of the message should be shown in the UI instead of its translation (if * the message was auto-translated). * @param ownCapabilities The capabilities of the current user in the channel. + * @param isPreviewMode Whether the message is displayed as a preview (e.g. inside the selected message menu). */ public data class MessageItemState( public override val message: Message = Message(), @@ -88,6 +89,7 @@ public data class MessageItemState( public val messageReadBy: List = emptyList(), public val showOriginalText: Boolean = false, public val ownCapabilities: Set, + public val isPreviewMode: Boolean = false, ) : HasMessageListItemState() /**