diff --git a/stream-chat-android-compose/api/stream-chat-android-compose.api b/stream-chat-android-compose/api/stream-chat-android-compose.api index 88349d60d38..c52793990eb 100644 --- a/stream-chat-android-compose/api/stream-chat-android-compose.api +++ b/stream-chat-android-compose/api/stream-chat-android-compose.api @@ -2653,6 +2653,13 @@ public final class io/getstream/chat/android/compose/ui/messages/header/MessageL public static final fun MessageListHeader-LIL5028 (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Lio/getstream/chat/android/models/ConnectionState;Landroidx/compose/ui/Modifier;Ljava/util/List;Lio/getstream/chat/android/ui/common/state/messages/MessageMode;JLandroidx/compose/ui/graphics/Shape;FLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V } +public final class io/getstream/chat/android/compose/ui/messages/list/ComposableSingletons$MessageDividerKt { + public static final field INSTANCE Lio/getstream/chat/android/compose/ui/messages/list/ComposableSingletons$MessageDividerKt; + public static field lambda-1 Lkotlin/jvm/functions/Function2; + public fun ()V + public final fun getLambda-1$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; +} + public final class io/getstream/chat/android/compose/ui/messages/list/ComposableSingletons$MessageListKt { public static final field INSTANCE Lio/getstream/chat/android/compose/ui/messages/list/ComposableSingletons$MessageListKt; public static field lambda-1 Lkotlin/jvm/functions/Function3; @@ -3279,12 +3286,10 @@ public final class io/getstream/chat/android/compose/ui/theme/ChatTheme { public final fun getMessageAlignmentProvider (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/util/MessageAlignmentProvider; public final fun getMessageComposerFloatingStyleEnabled (Landroidx/compose/runtime/Composer;I)Z public final fun getMessageComposerTheme (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/theme/MessageComposerTheme; - public final fun getMessageDateSeparatorTheme (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme; public final fun getMessageOptionsTheme (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/theme/MessageOptionsTheme; public final fun getMessagePreviewFormatter (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/util/MessagePreviewFormatter; public final fun getMessagePreviewIconFactory (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/util/MessagePreviewIconFactory; public final fun getMessageTextFormatter (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/util/MessageTextFormatter; - public final fun getMessageUnreadSeparatorTheme (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme; public final fun getPollSwitchitemFactory (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/util/PollSwitchItemFactory; public final fun getReactionOptionsTheme (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/theme/ReactionOptionsTheme; public final fun getReactionResolver (Landroidx/compose/runtime/Composer;I)Lio/getstream/chat/android/compose/ui/util/ReactionResolver; @@ -3306,7 +3311,7 @@ public final class io/getstream/chat/android/compose/ui/theme/ChatTheme { } public final class io/getstream/chat/android/compose/ui/theme/ChatThemeKt { - public static final fun ChatTheme (ZLio/getstream/chat/android/compose/ui/theme/ChatConfig;ZZZLio/getstream/chat/android/compose/state/messages/attachments/AttachmentPickerConfig;ZLio/getstream/chat/android/compose/ui/theme/StreamColors;Lio/getstream/chat/android/compose/ui/theme/StreamDimens;Lio/getstream/chat/android/compose/ui/theme/StreamTypography;Lio/getstream/chat/android/compose/ui/theme/StreamShapes;Lio/getstream/chat/android/compose/ui/theme/StreamRippleConfiguration;Lio/getstream/chat/android/ui/common/model/UserPresence;Lio/getstream/chat/android/compose/ui/theme/ChatComponentFactory;Ljava/util/List;Ljava/util/List;Lio/getstream/chat/android/compose/ui/util/ReactionResolver;Lio/getstream/chat/android/compose/ui/theme/ReactionOptionsTheme;Lio/getstream/chat/android/compose/ui/util/MessagePreviewIconFactory;Lio/getstream/chat/android/compose/ui/util/PollSwitchItemFactory;ZLio/getstream/chat/android/ui/common/helper/DateFormatter;Lio/getstream/chat/android/ui/common/helper/TimeProvider;Lio/getstream/chat/android/ui/common/helper/DurationFormatter;Lio/getstream/chat/android/ui/common/utils/ChannelNameFormatter;Lio/getstream/chat/android/compose/ui/util/MessagePreviewFormatter;Lio/getstream/chat/android/compose/ui/util/SearchResultNameFormatter;Lio/getstream/chat/android/compose/ui/util/StreamCoilImageLoaderFactory;Lio/getstream/chat/android/ui/common/helper/ImageHeadersProvider;Lio/getstream/chat/android/ui/common/helper/DownloadAttachmentUriGenerator;Lio/getstream/chat/android/ui/common/helper/DownloadRequestInterceptor;Lio/getstream/chat/android/ui/common/helper/ImageAssetTransformer;Lio/getstream/chat/android/compose/ui/util/MessageAlignmentProvider;Lio/getstream/chat/android/compose/ui/theme/MessageOptionsTheme;Lio/getstream/chat/android/compose/ui/theme/ChannelOptionsTheme;ZLio/getstream/chat/android/ui/common/images/resizing/StreamCdnImageResizing;ZLio/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme;Lio/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme;Lio/getstream/chat/android/compose/ui/theme/MessageComposerTheme;Lio/getstream/chat/android/compose/ui/theme/AttachmentPickerTheme;Lio/getstream/chat/android/compose/ui/util/MessageTextFormatter;Lio/getstream/sdk/chat/audio/recording/StreamMediaRecorder;Lio/getstream/chat/android/compose/ui/theme/StreamKeyboardBehaviour;Lio/getstream/chat/android/compose/ui/attachments/preview/MediaGalleryConfig;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;IIIIIII)V + public static final fun ChatTheme (ZLio/getstream/chat/android/compose/ui/theme/ChatConfig;ZZZLio/getstream/chat/android/compose/state/messages/attachments/AttachmentPickerConfig;ZLio/getstream/chat/android/compose/ui/theme/StreamColors;Lio/getstream/chat/android/compose/ui/theme/StreamDimens;Lio/getstream/chat/android/compose/ui/theme/StreamTypography;Lio/getstream/chat/android/compose/ui/theme/StreamShapes;Lio/getstream/chat/android/compose/ui/theme/StreamRippleConfiguration;Lio/getstream/chat/android/ui/common/model/UserPresence;Lio/getstream/chat/android/compose/ui/theme/ChatComponentFactory;Ljava/util/List;Ljava/util/List;Lio/getstream/chat/android/compose/ui/util/ReactionResolver;Lio/getstream/chat/android/compose/ui/theme/ReactionOptionsTheme;Lio/getstream/chat/android/compose/ui/util/MessagePreviewIconFactory;Lio/getstream/chat/android/compose/ui/util/PollSwitchItemFactory;ZLio/getstream/chat/android/ui/common/helper/DateFormatter;Lio/getstream/chat/android/ui/common/helper/TimeProvider;Lio/getstream/chat/android/ui/common/helper/DurationFormatter;Lio/getstream/chat/android/ui/common/utils/ChannelNameFormatter;Lio/getstream/chat/android/compose/ui/util/MessagePreviewFormatter;Lio/getstream/chat/android/compose/ui/util/SearchResultNameFormatter;Lio/getstream/chat/android/compose/ui/util/StreamCoilImageLoaderFactory;Lio/getstream/chat/android/ui/common/helper/ImageHeadersProvider;Lio/getstream/chat/android/ui/common/helper/DownloadAttachmentUriGenerator;Lio/getstream/chat/android/ui/common/helper/DownloadRequestInterceptor;Lio/getstream/chat/android/ui/common/helper/ImageAssetTransformer;Lio/getstream/chat/android/compose/ui/util/MessageAlignmentProvider;Lio/getstream/chat/android/compose/ui/theme/MessageOptionsTheme;Lio/getstream/chat/android/compose/ui/theme/ChannelOptionsTheme;ZLio/getstream/chat/android/ui/common/images/resizing/StreamCdnImageResizing;ZLio/getstream/chat/android/compose/ui/theme/MessageComposerTheme;Lio/getstream/chat/android/compose/ui/theme/AttachmentPickerTheme;Lio/getstream/chat/android/compose/ui/util/MessageTextFormatter;Lio/getstream/sdk/chat/audio/recording/StreamMediaRecorder;Lio/getstream/chat/android/compose/ui/theme/StreamKeyboardBehaviour;Lio/getstream/chat/android/compose/ui/attachments/preview/MediaGalleryConfig;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;IIIIIII)V public static final fun getLocalAttachmentPickerConfig ()Landroidx/compose/runtime/ProvidableCompositionLocal; public static final fun getLocalComponentFactory ()Landroidx/compose/runtime/ProvidableCompositionLocal; public static final fun getLocalComposerLinkPreviewEnabled ()Landroidx/compose/runtime/ProvidableCompositionLocal; @@ -3534,25 +3539,6 @@ public final class io/getstream/chat/android/compose/ui/theme/MessageComposerThe public final fun defaultTheme (ZLio/getstream/chat/android/compose/ui/theme/StreamTypography;Lio/getstream/chat/android/compose/ui/theme/StreamShapes;Lio/getstream/chat/android/compose/ui/theme/StreamColors;Landroidx/compose/runtime/Composer;II)Lio/getstream/chat/android/compose/ui/theme/MessageComposerTheme; } -public final class io/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme { - public static final field $stable I - public static final field Companion Lio/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme$Companion; - public synthetic fun (Landroidx/compose/ui/text/TextStyle;JLkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1 ()Landroidx/compose/ui/text/TextStyle; - public final fun component2-0d7_KjU ()J - public final fun copy-4WTKRHQ (Landroidx/compose/ui/text/TextStyle;J)Lio/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme; - public static synthetic fun copy-4WTKRHQ$default (Lio/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme;Landroidx/compose/ui/text/TextStyle;JILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme; - public fun equals (Ljava/lang/Object;)Z - public final fun getBackgroundColor-0d7_KjU ()J - public final fun getTextStyle ()Landroidx/compose/ui/text/TextStyle; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class io/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme$Companion { - public final fun defaultTheme (Lio/getstream/chat/android/compose/ui/theme/StreamTypography;Lio/getstream/chat/android/compose/ui/theme/StreamColors;Landroidx/compose/runtime/Composer;II)Lio/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme; -} - public final class io/getstream/chat/android/compose/ui/theme/MessageFooterStatusIndicatorParams { public static final field $stable I public fun (Lio/getstream/chat/android/ui/common/state/messages/list/MessageItemState;Landroidx/compose/ui/Modifier;)V @@ -3605,25 +3591,6 @@ public final class io/getstream/chat/android/compose/ui/theme/MessageReactionsPa public fun toString ()Ljava/lang/String; } -public final class io/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme { - public static final field $stable I - public static final field Companion Lio/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme$Companion; - public synthetic fun (Landroidx/compose/ui/text/TextStyle;JLkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun component1 ()Landroidx/compose/ui/text/TextStyle; - public final fun component2-0d7_KjU ()J - public final fun copy-4WTKRHQ (Landroidx/compose/ui/text/TextStyle;J)Lio/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme; - public static synthetic fun copy-4WTKRHQ$default (Lio/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme;Landroidx/compose/ui/text/TextStyle;JILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme; - public fun equals (Ljava/lang/Object;)Z - public final fun getBackgroundColor-0d7_KjU ()J - public final fun getTextStyle ()Landroidx/compose/ui/text/TextStyle; - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class io/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme$Companion { - public final fun defaultTheme (Lio/getstream/chat/android/compose/ui/theme/StreamTypography;Lio/getstream/chat/android/compose/ui/theme/StreamColors;Landroidx/compose/runtime/Composer;II)Lio/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme; -} - public final class io/getstream/chat/android/compose/ui/theme/ReactionOptionsTheme { public static final field $stable I public static final field Companion Lio/getstream/chat/android/compose/ui/theme/ReactionOptionsTheme$Companion; @@ -3645,14 +3612,15 @@ public final class io/getstream/chat/android/compose/ui/theme/ReactionOptionsThe public final class io/getstream/chat/android/compose/ui/theme/StreamColors { public static final field $stable I public static final field Companion Lio/getstream/chat/android/compose/ui/theme/StreamColors$Companion; - public synthetic fun (Lio/getstream/chat/android/compose/ui/theme/StreamLegacyColors;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIIIILkotlin/jvm/internal/DefaultConstructorMarker;)V - public synthetic fun (Lio/getstream/chat/android/compose/ui/theme/StreamLegacyColors;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Lio/getstream/chat/android/compose/ui/theme/StreamLegacyColors;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIIIILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Lio/getstream/chat/android/compose/ui/theme/StreamLegacyColors;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lio/getstream/chat/android/compose/ui/theme/StreamLegacyColors; public final fun component10-0d7_KjU ()J public final fun component100-0d7_KjU ()J public final fun component101-0d7_KjU ()J public final fun component102-0d7_KjU ()J public final fun component103-0d7_KjU ()J + public final fun component104-0d7_KjU ()J public final fun component11-0d7_KjU ()J public final fun component12-0d7_KjU ()J public final fun component13-0d7_KjU ()J @@ -3750,8 +3718,8 @@ public final class io/getstream/chat/android/compose/ui/theme/StreamColors { public final fun component97-0d7_KjU ()J public final fun component98-0d7_KjU ()J public final fun component99-0d7_KjU ()J - public final fun copy-Oxz7aI8 (Lio/getstream/chat/android/compose/ui/theme/StreamLegacyColors;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)Lio/getstream/chat/android/compose/ui/theme/StreamColors; - public static synthetic fun copy-Oxz7aI8$default (Lio/getstream/chat/android/compose/ui/theme/StreamColors;Lio/getstream/chat/android/compose/ui/theme/StreamLegacyColors;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIIIILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/StreamColors; + public final fun copy-wfSMY9o (Lio/getstream/chat/android/compose/ui/theme/StreamLegacyColors;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)Lio/getstream/chat/android/compose/ui/theme/StreamColors; + public static synthetic fun copy-wfSMY9o$default (Lio/getstream/chat/android/compose/ui/theme/StreamColors;Lio/getstream/chat/android/compose/ui/theme/StreamLegacyColors;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIIIILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/StreamColors; public fun equals (Ljava/lang/Object;)Z public final fun getAccentBlack-0d7_KjU ()J public final fun getAccentError-0d7_KjU ()J @@ -3834,6 +3802,7 @@ public final class io/getstream/chat/android/compose/ui/theme/StreamColors { public final fun getChatTextLink-0d7_KjU ()J public final fun getChatTextMention-0d7_KjU ()J public final fun getChatTextOutgoing-0d7_KjU ()J + public final fun getChatTextSystem-0d7_KjU ()J public final fun getChatTextTimestamp-0d7_KjU ()J public final fun getChatWaveformBar-0d7_KjU ()J public final fun getChatWaveformBarPlaying-0d7_KjU ()J diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageDivider.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageDivider.kt new file mode 100644 index 00000000000..ec8254d9161 --- /dev/null +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageDivider.kt @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2014-2026 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-chat-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.getstream.chat.android.compose.ui.messages.list + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import io.getstream.chat.android.compose.ui.theme.ChatTheme +import io.getstream.chat.android.compose.ui.theme.StreamTokens + +@Composable +internal fun MessageDivider(text: String, modifier: Modifier = Modifier) { + val colors = ChatTheme.colors + + Box(modifier, contentAlignment = Alignment.Center) { + Text( + text = text, + style = ChatTheme.typography.metadataEmphasis, + color = colors.chatTextSystem, + modifier = Modifier + .background(colors.backgroundCoreSurfaceSubtle, CircleShape) + .padding(vertical = StreamTokens.spacing2xs, horizontal = StreamTokens.spacingSm), + ) + } +} + +@Preview +@Composable +private fun MessageDividerPreview() { + ChatTheme { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(StreamTokens.spacingXs), + ) { + MessageDivider("Unread messages") + MessageDivider("Today") + MessageDivider("Tue, 25 Dec") + } + } +} diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageItem.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageItem.kt index 1519b6d6fbf..7800c228e2d 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageItem.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/list/MessageItem.kt @@ -21,8 +21,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyItemScope -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -38,6 +36,7 @@ import androidx.compose.ui.unit.dp import io.getstream.chat.android.compose.R import io.getstream.chat.android.compose.state.mediagallerypreview.MediaGalleryPreviewResult import io.getstream.chat.android.compose.ui.theme.ChatTheme +import io.getstream.chat.android.compose.ui.theme.StreamTokens import io.getstream.chat.android.models.Message import io.getstream.chat.android.models.Option import io.getstream.chat.android.models.Poll @@ -145,27 +144,15 @@ public fun LazyItemScope.MessageItem( */ @Composable internal fun DefaultMessageDateSeparatorContent(dateSeparator: DateSeparatorItemState) { - Box( + MessageDivider( + text = ChatTheme.dateFormatter.formatRelativeDate(dateSeparator.date), modifier = Modifier - .semantics(mergeDescendants = true) {} + .semantics(mergeDescendants = true) { + testTag = "Stream_MessageDateSeparator" + } + .padding(vertical = StreamTokens.spacingXs) .fillMaxWidth(), - contentAlignment = Alignment.Center, - ) { - Surface( - modifier = Modifier - .padding(vertical = 8.dp), - color = ChatTheme.messageDateSeparatorTheme.backgroundColor, - shape = RoundedCornerShape(16.dp), - ) { - Text( - modifier = Modifier - .padding(vertical = 2.dp, horizontal = 16.dp) - .testTag("Stream_MessageDateSeparator"), - text = ChatTheme.dateFormatter.formatRelativeDate(dateSeparator.date), - style = ChatTheme.messageDateSeparatorTheme.textStyle, - ) - } - } + ) } /** @@ -175,24 +162,15 @@ internal fun DefaultMessageDateSeparatorContent(dateSeparator: DateSeparatorItem */ @Composable internal fun DefaultMessageUnreadSeparatorContent(unreadSeparatorItemState: UnreadSeparatorItemState) { - Box( + MessageDivider( + text = stringResource(R.string.stream_compose_message_list_unread_separator), modifier = Modifier .semantics(mergeDescendants = true) { testTag = "Stream_UnreadMessagesBadge" } - .fillMaxWidth() - .padding(bottom = 8.dp) - .background(ChatTheme.messageUnreadSeparatorTheme.backgroundColor), - contentAlignment = Alignment.Center, - ) { - Text( - modifier = Modifier.padding(vertical = 2.dp, horizontal = 16.dp), - text = LocalContext.current.resources.getString( - R.string.stream_compose_message_list_unread_separator, - ), - style = ChatTheme.messageUnreadSeparatorTheme.textStyle, - ) - } + .padding(vertical = StreamTokens.spacingXs) + .fillMaxWidth(), + ) } /** diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatTheme.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatTheme.kt index 39576b9488f..3b16288b7ac 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatTheme.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatTheme.kt @@ -198,12 +198,6 @@ private val LocalReadCountEnabled = compositionLocalOf { "Make sure to wrap all usages of Stream components in a ChatTheme.", ) } -private val LocalMessageDateSeparatorTheme = compositionLocalOf { - error("No MessageDateSeparatorTheme provided! Make sure to wrap all usages of Stream components in a ChatTheme.") -} -private val LocalMessageUnreadSeparatorTheme = compositionLocalOf { - error("No MessageUnreadSeparatorTheme provided! Make sure to wrap all usages of Stream components in a ChatTheme.") -} private val LocalMessageComposerTheme = compositionLocalOf { error("No MessageComposerTheme provided! Make sure to wrap all usages of Stream components in a ChatTheme.") } @@ -284,13 +278,10 @@ private val LocalChatConfig = compositionLocalOf { * @param messageAlignmentProvider [MessageAlignmentProvider] Used to provide message alignment for the given message. * @param messageOptionsTheme [MessageOptionsTheme] Theme for the message option list in the selected message menu. * For theming the reaction option list in the same menu, use [reactionOptionsTheme]. - * @param messageOptionsUserReactionAlignment Alignment of the user reaction inside the message options. * @param videoThumbnailsEnabled Dictates whether video thumbnails will be displayed inside video previews. * @param streamCdnImageResizing Sets the strategy for resizing images hosted on Stream's CDN. Disabled by default, * set [StreamCdnImageResizing.imageResizingEnabled] to true if you wish to enable resizing images. Note that resizing * applies only to images hosted on Stream's CDN which contain the original height (oh) and width (ow) query parameters. - * @param messageDateSeparatorTheme Theme of the message date separator. - * @param messageUnreadSeparatorTheme Theme of the message unread separator. * @param messageComposerTheme Theme of the message composer. * @param attachmentPickerTheme Theme of the attachment picker. * @param streamMediaRecorder Used for recording audio messages. @@ -349,14 +340,6 @@ public fun ChatTheme( videoThumbnailsEnabled: Boolean = true, streamCdnImageResizing: StreamCdnImageResizing = StreamCdnImageResizing.defaultStreamCdnImageResizing(), readCountEnabled: Boolean = true, - messageDateSeparatorTheme: MessageDateSeparatorTheme = MessageDateSeparatorTheme.defaultTheme( - typography = typography, - colors = colors, - ), - messageUnreadSeparatorTheme: MessageUnreadSeparatorTheme = MessageUnreadSeparatorTheme.defaultTheme( - typography = typography, - colors = colors, - ), messageComposerTheme: MessageComposerTheme = MessageComposerTheme.defaultTheme( isInDarkMode = isInDarkMode, typography = typography, @@ -404,8 +387,6 @@ public fun ChatTheme( LocalMessagePreviewFormatter provides messagePreviewFormatter, LocalMessageTextFormatter provides messageTextFormatter, LocalSearchResultNameFormatter provides searchResultNameFormatter, - LocalMessageDateSeparatorTheme provides messageDateSeparatorTheme, - LocalMessageUnreadSeparatorTheme provides messageUnreadSeparatorTheme, LocalMessageComposerTheme provides messageComposerTheme, LocalAttachmentPickerTheme provides attachmentPickerTheme, LocalStreamImageLoader provides imageLoaderFactory.imageLoader(LocalContext.current.applicationContext), @@ -666,22 +647,6 @@ public object ChatTheme { @ReadOnlyComposable get() = LocalReadCountEnabled.current - /** - * Retrieves the current [MessageDateSeparatorTheme] at the call site's position in the hierarchy. - */ - public val messageDateSeparatorTheme: MessageDateSeparatorTheme - @Composable - @ReadOnlyComposable - get() = LocalMessageDateSeparatorTheme.current - - /** - * Retrieves the current [MessageUnreadSeparatorTheme] at the call site's position in the hierarchy. - */ - public val messageUnreadSeparatorTheme: MessageUnreadSeparatorTheme - @Composable - @ReadOnlyComposable - get() = LocalMessageUnreadSeparatorTheme.current - /** * Retrieves the current [MessageComposerTheme] at the call site's position in the hierarchy. */ diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme.kt deleted file mode 100644 index 1aa914fb58c..00000000000 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/MessageDateSeparatorTheme.kt +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2014-2026 Stream.io Inc. All rights reserved. - * - * Licensed under the Stream License; - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://github.com/GetStream/stream-chat-android/blob/main/LICENSE - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.getstream.chat.android.compose.ui.theme - -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.Immutable -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle - -/** - * Represents message date separator theming. - * - * @param textStyle The text style for the date separator. - * @param backgroundColor The background color for the date separator. - */ -@Immutable -public data class MessageDateSeparatorTheme( - public val textStyle: TextStyle, - public val backgroundColor: Color, -) { - - public companion object { - - /** - * Builds the default message date separator theme. - * - * @return A [MessageDateSeparatorTheme] instance holding the default theming. - */ - @Composable - public fun defaultTheme( - typography: StreamTypography = StreamTypography.defaultTypography(), - colors: StreamColors = when (isSystemInDarkTheme()) { - true -> StreamColors.defaultDarkColors() - else -> StreamColors.defaultColors() - }, - ): MessageDateSeparatorTheme { - return MessageDateSeparatorTheme( - textStyle = typography.body.copy( - color = colors.textHighEmphasisInverse, - ), - backgroundColor = colors.overlayDark, - ) - } - } -} diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme.kt deleted file mode 100644 index ca9c0af9b90..00000000000 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/MessageUnreadSeparatorTheme.kt +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2014-2026 Stream.io Inc. All rights reserved. - * - * Licensed under the Stream License; - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://github.com/GetStream/stream-chat-android/blob/main/LICENSE - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.getstream.chat.android.compose.ui.theme - -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.Immutable -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle - -/** - * Represents message unread separator theming. - * - * @param textStyle The text style for the unread separator. - * @param backgroundColor The background color for the unread separator. - */ -@Immutable -public data class MessageUnreadSeparatorTheme( - public val textStyle: TextStyle, - public val backgroundColor: Color, -) { - - public companion object { - - /** - * Builds the default message unread separator theme. - * - * @return A [MessageUnreadSeparatorTheme] instance holding the default theming. - */ - @Composable - public fun defaultTheme( - typography: StreamTypography = StreamTypography.defaultTypography(), - colors: StreamColors = when (isSystemInDarkTheme()) { - true -> StreamColors.defaultDarkColors() - else -> StreamColors.defaultColors() - }, - ): MessageUnreadSeparatorTheme { - return MessageUnreadSeparatorTheme( - textStyle = typography.body.copy( - color = colors.textHighEmphasisInverse, - ), - backgroundColor = colors.overlayDark, - ) - } - } -} diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/StreamColors.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/StreamColors.kt index 1e9b6a810cf..91ee8c65427 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/StreamColors.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/StreamColors.kt @@ -205,6 +205,7 @@ public data class StreamColors( public val chatTextOutgoing: Color = textPrimary, public val chatTextLink: Color = accentPrimary, public val chatTextMention: Color = chatTextLink, + public val chatTextSystem: Color = textSecondary, public val chatTextTimestamp: Color = textTertiary, public val chatWaveformBar: Color = borderCoreOpacity25, public val chatWaveformBarPlaying: Color = accentPrimary, diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_loaded_messages.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_loaded_messages.png index b552cee7af6..6c8e57db08d 100644 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_loaded_messages.png and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_loaded_messages.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_loaded_messages_in_dark_mode.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_loaded_messages_in_dark_mode.png index 7f82f03b597..8306d2d6153 100644 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_loaded_messages_in_dark_mode.png and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_loaded_messages_in_dark_mode.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_scroll_to_bottom_button.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_scroll_to_bottom_button.png index 083248b9109..9b8b73beb63 100644 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_scroll_to_bottom_button.png and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_scroll_to_bottom_button.png differ diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_scroll_to_bottom_button_in_dark_mode.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_scroll_to_bottom_button_in_dark_mode.png index 052df353f5e..45d5d0777cc 100644 Binary files a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_scroll_to_bottom_button_in_dark_mode.png and b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.messages_MessageListTest_scroll_to_bottom_button_in_dark_mode.png differ