From bdd92d49c082004c897afc808a30a95ba1c6922a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Mon, 25 May 2026 11:20:41 +0100 Subject: [PATCH 1/7] refactor(compose): move Pin to slot 2 in channel options sheet Aligns the DM action order with the channel-pinning redesign: View Info -> Pin/Unpin Chat -> Mute/Unmute User -> Block/Unblock User -> Archive/Unarchive Chat -> Delete Chat. Group order was already correct; only KDoc refreshed to reflect the actual default flow and the opt-in nature of Pin and Archive. --- .../ui/components/channels/ChannelOptions.kt | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt index a6e167bc295..d461c5e47e6 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt @@ -94,9 +94,12 @@ public fun ChannelOptions( * Each action is self-describing and carries its icon, label, and execution handler. * * Actions vary by channel type: - * - **DM:** View Info, Mute/Unmute User, Block/Unblock User, Archive Chat, Delete Chat - * - **Group (owner):** View Info, Archive Group, Delete Group - * - **Group (member):** View Info, Archive Group, Leave Group + * - **DM:** View Info, Pin/Unpin Chat, Mute/Unmute User, Block/Unblock User, Archive/Unarchive Chat, Delete Chat + * - **Group (owner):** View Info, Pin/Unpin Chat, Archive/Unarchive Chat, Leave Group, Delete Group + * - **Group (member):** View Info, Pin/Unpin Chat, Archive/Unarchive Chat, Leave Group + * + * Pin and Archive actions are opt-in via [ChannelOptionsVisibility.isPinChannelVisible] and + * [ChannelOptionsVisibility.isArchiveChannelVisible] respectively. * * @param selectedChannel The currently selected channel. * @param isMuted If the channel is muted or not. @@ -146,7 +149,7 @@ public fun buildDefaultChannelActions( /** * Builds channel actions for DM (1-to-1) channels. - * Shows: View Info, Mute/Unmute User, Block/Unblock User, Archive Chat, Delete Chat. + * Shows: View Info, Pin/Unpin Chat, Mute/Unmute User, Block/Unblock User, Archive/Unarchive Chat, Delete Chat. */ @Suppress("LongParameterList") @Composable @@ -168,6 +171,11 @@ private fun buildDmChannelActions( selectedChannel = selectedChannel, onViewInfoAction = onViewInfoAction, ), + buildDmPinAction( + canPinChannel = optionVisibility.isPinChannelVisible, + selectedChannel = selectedChannel, + viewModel = viewModel, + ), buildDmMuteUserAction( isVisible = optionVisibility.isMuteUserVisible, otherUserId = otherUserId, @@ -179,11 +187,6 @@ private fun buildDmChannelActions( selectedChannel = selectedChannel, viewModel = viewModel, ), - buildDmPinAction( - canPinChannel = optionVisibility.isPinChannelVisible, - selectedChannel = selectedChannel, - viewModel = viewModel, - ), buildDmArchiveAction( canArchiveChannel = optionVisibility.isArchiveChannelVisible, selectedChannel = selectedChannel, @@ -290,8 +293,8 @@ private fun buildDmDeleteAction( /** * Builds channel actions for group channels. - * - **Owner (has DELETE_CHANNEL):** View Info, Archive Group, Delete Group - * - **Member (no DELETE_CHANNEL):** View Info, Archive Group, Leave Group + * - **Owner (has DELETE_CHANNEL):** View Info, Pin/Unpin Chat, Archive/Unarchive Chat, Leave Group, Delete Group + * - **Member (no DELETE_CHANNEL):** View Info, Pin/Unpin Chat, Archive/Unarchive Chat, Leave Group */ @Suppress("LongMethod", "LongParameterList") @Composable From d19264e9c7882c595f90320d06d491d8e3398437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Mon, 25 May 2026 14:17:27 +0100 Subject: [PATCH 2/7] feat(compose): render muted/pinned icons in SelectedChannelMenu header The selected-channel menu header now renders inline mute and pin icons next to the channel name when the respective attribute is active, in a fixed name -> mute -> pin order matching the redesign. Adds defaulted isMuted/isPinned fields to ChannelMenuParams and ChannelMenuHeaderContentParams; ChannelsScreen composes the channel-mute OR DM-counterpart-user-mute signal inline using existing isChannelMuted/isUserMuted accessors. Extracts a small internal Channel.dmCounterpartId helper to remove a duplicate member-iteration that also appeared in buildDmChannelActions. Localizes stream_compose_channel_item_pinned across the seven supported locales. Enables isPinChannelVisible in the compose sample so the behaviour is reachable from the dogfooding app. The preview-vs-snapshot duplication for SelectedChannelMenu is removed via three internal content composables called by both the previews and the Paparazzi tests. --- .../feature/channel/list/ChannelsActivity.kt | 13 +- .../api/stream-chat-android-compose.api | 27 ++- .../compose/ui/channels/ChannelsScreen.kt | 9 +- .../ui/channels/info/SelectedChannelMenu.kt | 211 +++++++++++++----- .../ui/components/channels/ChannelOptions.kt | 3 +- .../compose/ui/theme/ChatComponentFactory.kt | 4 + .../ui/theme/ChatComponentFactoryParams.kt | 9 + .../android/compose/ui/util/ChannelUtils.kt | 12 + .../src/main/res/values-es/strings.xml | 1 + .../src/main/res/values-fr/strings.xml | 1 + .../src/main/res/values-hi/strings.xml | 1 + .../src/main/res/values-in/strings.xml | 1 + .../src/main/res/values-it/strings.xml | 1 + .../src/main/res/values-ja/strings.xml | 1 + .../src/main/res/values-ko/strings.xml | 1 + .../src/main/res/values/strings.xml | 1 + .../ui/channels/SelectedChannelMenuTest.kt | 58 ++--- .../compose/ui/util/ChannelUtilsTest.kt | 93 ++++++++ ...lectedChannelMenuTest_selected_channel.png | Bin 16889 -> 27899 bytes ...uTest_selected_channel_centered_dialog.png | Bin 0 -> 29308 bytes ...MenuTest_selected_channel_in_dark_mode.png | Bin 15053 -> 0 bytes ...Test_selected_channel_muted_and_pinned.png | Bin 0 -> 29496 bytes 22 files changed, 337 insertions(+), 110 deletions(-) create mode 100644 stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/util/ChannelUtilsTest.kt create mode 100644 stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel_centered_dialog.png delete mode 100644 stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel_in_dark_mode.png create mode 100644 stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel_muted_and_pinned.png diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt index bd4a99ce1ed..fde65556788 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt @@ -81,12 +81,15 @@ import io.getstream.chat.android.compose.ui.channels.info.SelectedChannelMenu import io.getstream.chat.android.compose.ui.channels.list.ChannelItem import io.getstream.chat.android.compose.ui.channels.list.ChannelList import io.getstream.chat.android.compose.ui.components.SearchInput +import io.getstream.chat.android.compose.ui.components.channels.ChannelOptionsVisibility import io.getstream.chat.android.compose.ui.components.channels.buildDefaultChannelActions import io.getstream.chat.android.compose.ui.mentions.MentionList +import io.getstream.chat.android.compose.ui.theme.ChannelListConfig import io.getstream.chat.android.compose.ui.theme.ChannelListDividerItemParams import io.getstream.chat.android.compose.ui.theme.ChannelListItemContentParams import io.getstream.chat.android.compose.ui.theme.ChatComponentFactory import io.getstream.chat.android.compose.ui.theme.ChatTheme +import io.getstream.chat.android.compose.ui.theme.ChatUiConfig import io.getstream.chat.android.compose.ui.threads.ThreadsScreen import io.getstream.chat.android.compose.viewmodel.channels.ChannelListViewModel import io.getstream.chat.android.compose.viewmodel.channels.ChannelListViewModelFactory @@ -161,7 +164,15 @@ class ChannelsActivity : ComponentActivity() { val unreadChannelsCount by unreadChannelsCountFlow.collectAsStateWithLifecycle(0) val unreadThreadsCount by unreadThreadsCountFlow.collectAsStateWithLifecycle(0) - SampleChatTheme { + SampleChatTheme( + config = ChatUiConfig( + channelList = ChannelListConfig( + optionsVisibility = ChannelOptionsVisibility( + isPinChannelVisible = true, + ), + ), + ), + ) { val user by channelsViewModel.user.collectAsStateWithLifecycle() val drawerState = rememberDrawerState(DrawerValue.Closed) val coroutineScope = rememberCoroutineScope() 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 c1ae84f0736..294dc6297cf 100644 --- a/stream-chat-android-compose/api/stream-chat-android-compose.api +++ b/stream-chat-android-compose/api/stream-chat-android-compose.api @@ -881,12 +881,13 @@ public final class io/getstream/chat/android/compose/ui/channels/header/Composab public final class io/getstream/chat/android/compose/ui/channels/info/ComposableSingletons$SelectedChannelMenuKt { public static final field INSTANCE Lio/getstream/chat/android/compose/ui/channels/info/ComposableSingletons$SelectedChannelMenuKt; public fun ()V + public final fun getLambda$1458176636$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$1837108307$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$835101941$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; } public final class io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenuKt { - public static final fun SelectedChannelMenu-Ic2awPA (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V + public static final fun SelectedChannelMenu-j30j4ZQ (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JZZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V } public final class io/getstream/chat/android/compose/ui/channels/list/ChannelItemKt { @@ -3240,18 +3241,22 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelMenuCenterC public final class io/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams { public static final field $stable I - public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;)V - public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ZZ)V + public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lio/getstream/chat/android/models/Channel; public final fun component2 ()Lio/getstream/chat/android/models/User; public final fun component3 ()Landroidx/compose/ui/Modifier; - public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams; - public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams; + public final fun component4 ()Z + public final fun component5 ()Z + public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ZZ)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams; + public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ZZILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams; public fun equals (Ljava/lang/Object;)Z public final fun getCurrentUser ()Lio/getstream/chat/android/models/User; public final fun getModifier ()Landroidx/compose/ui/Modifier; public final fun getSelectedChannel ()Lio/getstream/chat/android/models/Channel; public fun hashCode ()I + public final fun isMuted ()Z + public final fun isPinned ()Z public fun toString ()Ljava/lang/String; } @@ -3274,16 +3279,18 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelMenuOptions public final class io/getstream/chat/android/compose/ui/theme/ChannelMenuParams { public static final field $stable I - public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;)V - public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZ)V + public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lio/getstream/chat/android/models/Channel; public final fun component2 ()Lio/getstream/chat/android/models/User; public final fun component3 ()Ljava/util/List; public final fun component4 ()Lkotlin/jvm/functions/Function1; public final fun component5 ()Lkotlin/jvm/functions/Function0; public final fun component6 ()Landroidx/compose/ui/Modifier; - public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams; - public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams; + public final fun component7 ()Z + public final fun component8 ()Z + public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZ)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams; + public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams; public fun equals (Ljava/lang/Object;)Z public final fun getChannelActions ()Ljava/util/List; public final fun getCurrentUser ()Lio/getstream/chat/android/models/User; @@ -3292,6 +3299,8 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelMenuParams public final fun getOnDismiss ()Lkotlin/jvm/functions/Function0; public final fun getSelectedChannel ()Lio/getstream/chat/android/models/Channel; public fun hashCode ()I + public final fun isMuted ()Z + public final fun isPinned ()Z public fun toString ()Ljava/lang/String; } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt index f0796be33b9..2e64b70a7ba 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt @@ -45,6 +45,7 @@ import androidx.compose.ui.semantics.paneTitle import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel +import io.getstream.chat.android.client.extensions.isPinned import io.getstream.chat.android.compose.state.channels.list.SearchQuery import io.getstream.chat.android.compose.ui.channels.list.ChannelList import io.getstream.chat.android.compose.ui.components.SimpleDialog @@ -54,6 +55,7 @@ import io.getstream.chat.android.compose.ui.theme.ChannelListSearchInputParams import io.getstream.chat.android.compose.ui.theme.ChannelMenuParams import io.getstream.chat.android.compose.ui.theme.ChatTheme import io.getstream.chat.android.compose.ui.theme.StreamTokens +import io.getstream.chat.android.compose.ui.util.dmCounterpartId import io.getstream.chat.android.compose.viewmodel.channels.ChannelListViewModel import io.getstream.chat.android.compose.viewmodel.channels.ChannelListViewModelFactory import io.getstream.chat.android.models.Channel @@ -205,9 +207,12 @@ public fun ChannelsScreen( exit = fadeOut(animationSpec = tween(durationMillis = AnimationConstants.DefaultDurationMillis / 2)), ) { val channel = lastChannel.value + val dmCounterpartId = channel.dmCounterpartId(user) + val isMuted = listViewModel.isChannelMuted(channel.cid) || + (dmCounterpartId != null && listViewModel.isUserMuted(dmCounterpartId)) val channelActions = buildDefaultChannelActions( selectedChannel = channel, - isMuted = listViewModel.isChannelMuted(channel.cid), + isMuted = isMuted, ownCapabilities = channel.ownCapabilities, viewModel = listViewModel, onViewInfoAction = { ch -> @@ -240,6 +245,8 @@ public fun ChannelsScreen( } }, onDismiss = remember(listViewModel) { { listViewModel.dismissChannelAction() } }, + isMuted = isMuted, + isPinned = channel.isPinned(), ), ) } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt index a0518c1c1fa..3021f7a8930 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt @@ -16,6 +16,9 @@ package io.getstream.chat.android.compose.ui.channels.info +import androidx.annotation.DrawableRes +import androidx.annotation.StringRes +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope @@ -26,6 +29,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -33,9 +37,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import io.getstream.chat.android.compose.R import io.getstream.chat.android.compose.ui.components.SimpleMenu import io.getstream.chat.android.compose.ui.components.avatar.AvatarSize import io.getstream.chat.android.compose.ui.theme.ChannelAvatarParams @@ -64,6 +72,11 @@ import io.getstream.chat.android.ui.common.state.channels.actions.ViewInfo * @param modifier Modifier for styling. * @param shape The shape of the component. * @param overlayColor The color applied to the overlay. + * @param isMuted Whether the channel (or its DM counterpart) is muted. Surfaced as an inline icon + * in the default header. Defaults to `false`; pass `true` when the channel-list row would render + * the muted icon for this channel. + * @param isPinned Whether the channel is pinned. Surfaced as an inline icon in the default header. + * Defaults to `false`; pass `true` when the channel-list row would render the pinned icon. * @param headerContent The content shown at the top of the dialog. * @param centerContent The content shown at the center of the dialog. */ @@ -77,12 +90,16 @@ public fun SelectedChannelMenu( modifier: Modifier = Modifier, shape: Shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), overlayColor: Color = ChatTheme.colors.backgroundCoreScrim, + isMuted: Boolean = false, + isPinned: Boolean = false, headerContent: @Composable ColumnScope.() -> Unit = { with(ChatTheme.componentFactory) { ChannelMenuHeaderContent( params = ChannelMenuHeaderContentParams( selectedChannel = selectedChannel, currentUser = currentUser, + isMuted = isMuted, + isPinned = isPinned, ), ) } @@ -113,11 +130,15 @@ public fun SelectedChannelMenu( * * @param selectedChannel The channel the user selected. * @param currentUser The currently logged-in user data. + * @param isMuted Whether to render the muted icon inline with the channel name. + * @param isPinned Whether to render the pinned icon inline with the channel name. */ @Composable internal fun DefaultSelectedChannelMenuHeaderContent( selectedChannel: Channel, currentUser: User?, + isMuted: Boolean = false, + isPinned: Boolean = false, ) { Row( modifier = Modifier @@ -144,15 +165,11 @@ internal fun DefaultSelectedChannelMenuHeaderContent( .padding(start = StreamTokens.spacingSm) .weight(1f), ) { - Text( - text = ChatTheme.channelNameFormatter.formatChannelName( - selectedChannel, - currentUser, - ), - style = ChatTheme.typography.headingSmall, - color = ChatTheme.colors.textPrimary, - maxLines = 1, - overflow = TextOverflow.Ellipsis, + HeaderTitleRow( + selectedChannel = selectedChannel, + currentUser = currentUser, + isMuted = isMuted, + isPinned = isPinned, ) Text( text = selectedChannel.getMembersStatusText( @@ -168,61 +185,145 @@ internal fun DefaultSelectedChannelMenuHeaderContent( } } -/** - * Preview of [SelectedChannelMenu] styled as a centered modal dialog. - * - * Should show a centered dialog with channel members and channel options. - */ -@Preview(showBackground = true, name = "SelectedChannelMenu Preview (Centered dialog)") @Composable -private fun SelectedChannelMenuCenteredDialogPreview() { - ChatTheme { - Box(modifier = Modifier.fillMaxSize()) { - val channel = PreviewChannelData.channelWithManyMembers - SelectedChannelMenu( - modifier = Modifier - .padding(16.dp) - .fillMaxWidth() - .wrapContentHeight() - .align(Alignment.Center), - shape = RoundedCornerShape(16.dp), - selectedChannel = channel, - currentUser = PreviewUserData.user1, - channelActions = listOf( - ViewInfo(channel = channel, label = "Channel Info", onAction = {}), - ), - onChannelOptionConfirm = {}, - onDismiss = {}, +private fun HeaderTitleRow( + selectedChannel: Channel, + currentUser: User?, + isMuted: Boolean, + isPinned: Boolean, +) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(StreamTokens.spacing2xs), + ) { + Text( + modifier = Modifier.weight(1f, fill = false), + text = ChatTheme.channelNameFormatter.formatChannelName(selectedChannel, currentUser), + style = ChatTheme.typography.headingSmall, + color = ChatTheme.colors.textPrimary, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + if (isMuted) { + HeaderStateIcon( + iconRes = R.drawable.stream_design_ic_mute, + contentDescriptionRes = R.string.stream_compose_channel_item_muted, + testTag = "Stream_ChannelMenuHeaderMutedIcon", + ) + } + if (isPinned) { + HeaderStateIcon( + iconRes = R.drawable.stream_design_ic_pin, + contentDescriptionRes = R.string.stream_compose_channel_item_pinned, + testTag = "Stream_ChannelMenuHeaderPinnedIcon", ) } } } +@Composable +private fun HeaderStateIcon( + @DrawableRes iconRes: Int, + @StringRes contentDescriptionRes: Int, + testTag: String, +) { + Icon( + modifier = Modifier + .testTag(testTag) + .size(16.dp), + painter = painterResource(id = iconRes), + contentDescription = stringResource(contentDescriptionRes), + tint = ChatTheme.colors.textTertiary, + ) +} + +@Preview(showBackground = true) +@Composable +private fun SelectedChannelMenuCenteredDialogPreview() { + ChatTheme { + SelectedChannelMenuCenteredDialog() + } +} + +@Composable +internal fun SelectedChannelMenuCenteredDialog() { + SelectedChannelMenuSample( + alignment = Alignment.Center, + modifier = Modifier.padding(16.dp), + shape = RoundedCornerShape(16.dp), + ) +} + +@Preview(showBackground = true) +@Composable +private fun SelectedChannelMenuBottomSheetDialogPreview() { + ChatTheme { + SelectedChannelMenuBottomSheetDialog() + } +} + +@Composable +internal fun SelectedChannelMenuBottomSheetDialog() { + SelectedChannelMenuSample( + alignment = Alignment.BottomCenter, + shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), + ) +} + +@Preview(showBackground = true) +@Composable +private fun SelectedChannelMenuMutedPinnedPreview() { + ChatTheme { + SelectedChannelMenuMutedPinned() + } +} + +@Composable +internal fun SelectedChannelMenuMutedPinned() { + SelectedChannelMenuSample( + alignment = Alignment.BottomCenter, + shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), + isMuted = true, + isPinned = true, + ) +} + /** - * Preview of [SelectedChannelMenu] styled as a bottom sheet dialog. + * Renders a [SelectedChannelMenu] over a full-size [Box] using shared sample data, so the + * previews and snapshot tests only have to vary the surface and the two state-icon flags. * - * Should show a bottom sheet dialog with channel members and channel options. + * @param alignment Where the menu sits inside the parent [Box] (centered vs. bottom sheet). + * @param shape The shape of the menu surface. + * @param modifier Extra modifier applied before `fillMaxWidth`, `wrapContentHeight` and `align` + * are chained on. Used by the centered preview to add outer padding. + * @param isMuted Forwarded to [SelectedChannelMenu] to control the muted-icon visibility in the header. + * @param isPinned Forwarded to [SelectedChannelMenu] to control the pinned-icon visibility in the header. */ -@Preview(showBackground = true, name = "SelectedChannelMenu Preview (Bottom sheet dialog)") @Composable -private fun SelectedChannelMenuBottomSheetDialogPreview() { - ChatTheme { - Box(modifier = Modifier.fillMaxSize()) { - val channel = PreviewChannelData.channelWithManyMembers - SelectedChannelMenu( - modifier = Modifier - .fillMaxWidth() - .wrapContentHeight() - .align(Alignment.BottomCenter), - shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), - selectedChannel = channel, - currentUser = PreviewUserData.user1, - channelActions = listOf( - ViewInfo(channel = channel, label = "Channel Info", onAction = {}), - ), - onChannelOptionConfirm = {}, - onDismiss = {}, - ) - } +private fun SelectedChannelMenuSample( + alignment: Alignment, + shape: Shape, + modifier: Modifier = Modifier, + isMuted: Boolean = false, + isPinned: Boolean = false, +) { + Box(modifier = Modifier.fillMaxSize()) { + val channel = PreviewChannelData.channelWithManyMembers + SelectedChannelMenu( + modifier = modifier + .fillMaxWidth() + .wrapContentHeight() + .align(alignment), + shape = shape, + selectedChannel = channel, + currentUser = PreviewUserData.user1, + channelActions = listOf( + ViewInfo(channel = channel, label = "Channel Info", onAction = {}), + ), + onChannelOptionConfirm = {}, + onDismiss = {}, + isMuted = isMuted, + isPinned = isPinned, + ) } } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt index d461c5e47e6..1ee5dda778c 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt @@ -33,6 +33,7 @@ import io.getstream.chat.android.compose.R import io.getstream.chat.android.compose.ui.theme.ChannelOptionsItemParams import io.getstream.chat.android.compose.ui.theme.ChatTheme import io.getstream.chat.android.compose.ui.theme.StreamTokens +import io.getstream.chat.android.compose.ui.util.dmCounterpartId import io.getstream.chat.android.compose.ui.util.isDistinct import io.getstream.chat.android.compose.viewmodel.channels.ChannelListViewModel import io.getstream.chat.android.models.Channel @@ -162,7 +163,7 @@ private fun buildDmChannelActions( viewModel: ChannelListViewModel, onViewInfoAction: (Channel) -> Unit, ): List { - val otherUserId = selectedChannel.members.firstOrNull { it.user.id != currentUser?.id }?.user?.id + val otherUserId = selectedChannel.dmCounterpartId(currentUser) val canDeleteChannel = ownCapabilities.contains(ChannelCapabilities.DELETE_CHANNEL) return listOfNotNull( diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt index 2a96eaae2c2..0b66e9e2bc1 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt @@ -1805,6 +1805,8 @@ public interface ChatComponentFactory { channelActions = params.channelActions, onChannelOptionConfirm = params.onChannelOptionConfirm, onDismiss = params.onDismiss, + isMuted = params.isMuted, + isPinned = params.isPinned, ) } @@ -1818,6 +1820,8 @@ public interface ChatComponentFactory { DefaultSelectedChannelMenuHeaderContent( selectedChannel = params.selectedChannel, currentUser = params.currentUser, + isMuted = params.isMuted, + isPinned = params.isPinned, ) } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt index 0da471b28a3..536ba9e3d0e 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt @@ -1375,6 +1375,9 @@ public data class ChannelAvatarParams( * @param onChannelOptionConfirm Action invoked when a channel option is confirmed. * @param onDismiss Action invoked when the menu is dismissed. * @param modifier Modifier for styling. + * @param isMuted Whether the channel (or its DM counterpart) is muted. Surfaced as an inline icon + * in the menu header. + * @param isPinned Whether the channel is pinned. Surfaced as an inline icon in the menu header. */ public data class ChannelMenuParams( val selectedChannel: Channel, @@ -1383,6 +1386,8 @@ public data class ChannelMenuParams( val onChannelOptionConfirm: (ChannelAction) -> Unit, val onDismiss: () -> Unit, val modifier: Modifier = Modifier, + val isMuted: Boolean = false, + val isPinned: Boolean = false, ) /** @@ -1391,11 +1396,15 @@ public data class ChannelMenuParams( * @param selectedChannel The selected channel. * @param currentUser The currently logged in user. * @param modifier Modifier for styling. + * @param isMuted Whether to render the muted icon inline with the channel name. + * @param isPinned Whether to render the pinned icon inline with the channel name. */ public data class ChannelMenuHeaderContentParams( val selectedChannel: Channel, val currentUser: User?, val modifier: Modifier = Modifier, + val isMuted: Boolean = false, + val isPinned: Boolean = false, ) /** diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/util/ChannelUtils.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/util/ChannelUtils.kt index 70259436773..edea678e950 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/util/ChannelUtils.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/util/ChannelUtils.kt @@ -120,6 +120,18 @@ public fun Channel.getMembersStatusText( ) } +/** + * Returns the user id of the DM counterpart for this channel — the other member of a one-to-one + * conversation with [currentUser]. Returns `null` when the channel is not a one-to-one (see + * [isOneToOne]) or when the counterpart can't be resolved. + * + * @param currentUser The currently logged in user. + */ +internal fun Channel.dmCounterpartId(currentUser: User?): String? { + if (!isOneToOne(currentUser)) return null + return members.firstOrNull { it.user.id != currentUser?.id }?.user?.id +} + /** * Returns a list of users that are members of the channel excluding the currently * logged in user. diff --git a/stream-chat-android-compose/src/main/res/values-es/strings.xml b/stream-chat-android-compose/src/main/res/values-es/strings.xml index 291e0079939..0e328588b14 100644 --- a/stream-chat-android-compose/src/main/res/values-es/strings.xml +++ b/stream-chat-android-compose/src/main/res/values-es/strings.xml @@ -63,6 +63,7 @@ "Bloquear usuario" "Cancelar" "silenciado" + "fijado" "Abrir conversación" "Abrir opciones de conversación" "Botón de reproducción" diff --git a/stream-chat-android-compose/src/main/res/values-fr/strings.xml b/stream-chat-android-compose/src/main/res/values-fr/strings.xml index ec2c346199f..7f2816a1484 100644 --- a/stream-chat-android-compose/src/main/res/values-fr/strings.xml +++ b/stream-chat-android-compose/src/main/res/values-fr/strings.xml @@ -63,6 +63,7 @@ "Bloquer l\'utilisateur" "Annuler" "en sourdine" + "épinglé" "Ouvrir la conversation" "Ouvrir les options de conversation" "Bouton de lecture" diff --git a/stream-chat-android-compose/src/main/res/values-hi/strings.xml b/stream-chat-android-compose/src/main/res/values-hi/strings.xml index b031e5c08b9..7895f79f6ba 100644 --- a/stream-chat-android-compose/src/main/res/values-hi/strings.xml +++ b/stream-chat-android-compose/src/main/res/values-hi/strings.xml @@ -123,6 +123,7 @@ "उपयोगकर्ता को ब्लॉक करें" "रद्द करें" "म्यूट किया गया" + "पिन किया गया" "बातचीत खोलें" "बातचीत के विकल्प खोलें" "चलाएँ बटन" diff --git a/stream-chat-android-compose/src/main/res/values-in/strings.xml b/stream-chat-android-compose/src/main/res/values-in/strings.xml index c517c558c10..4a95f6f35a5 100644 --- a/stream-chat-android-compose/src/main/res/values-in/strings.xml +++ b/stream-chat-android-compose/src/main/res/values-in/strings.xml @@ -63,6 +63,7 @@ "Blokir pengguna" "Batal" "dibisukan" + "disematkan" "Buka percakapan" "Buka opsi percakapan" "Tombol putar" diff --git a/stream-chat-android-compose/src/main/res/values-it/strings.xml b/stream-chat-android-compose/src/main/res/values-it/strings.xml index fcf558cf0fb..f1c60dd3d8d 100644 --- a/stream-chat-android-compose/src/main/res/values-it/strings.xml +++ b/stream-chat-android-compose/src/main/res/values-it/strings.xml @@ -123,6 +123,7 @@ "Blocca utente" "Annulla" "silenziato" + "fissato" "Apri conversazione" "Apri opzioni conversazione" "Pulsante riproduci" diff --git a/stream-chat-android-compose/src/main/res/values-ja/strings.xml b/stream-chat-android-compose/src/main/res/values-ja/strings.xml index fb988edc981..553a50bcb49 100644 --- a/stream-chat-android-compose/src/main/res/values-ja/strings.xml +++ b/stream-chat-android-compose/src/main/res/values-ja/strings.xml @@ -63,6 +63,7 @@ "ユーザーをブロック" "キャンセル" "ミュート中" + "ピン留め中" "会話を開く" "会話のオプションを開く" "再生ボタン" diff --git a/stream-chat-android-compose/src/main/res/values-ko/strings.xml b/stream-chat-android-compose/src/main/res/values-ko/strings.xml index 50e1710715b..8506f63ca69 100644 --- a/stream-chat-android-compose/src/main/res/values-ko/strings.xml +++ b/stream-chat-android-compose/src/main/res/values-ko/strings.xml @@ -63,6 +63,7 @@ "사용자 차단" "취소" "음소거됨" + "고정됨" "대화 열기" "대화 옵션 열기" "재생 버튼" diff --git a/stream-chat-android-compose/src/main/res/values/strings.xml b/stream-chat-android-compose/src/main/res/values/strings.xml index b2761f4e458..20d4ebaacf8 100644 --- a/stream-chat-android-compose/src/main/res/values/strings.xml +++ b/stream-chat-android-compose/src/main/res/values/strings.xml @@ -311,6 +311,7 @@ Open conversation Open conversation options muted + pinned %d unread message %d unread messages diff --git a/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/channels/SelectedChannelMenuTest.kt b/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/channels/SelectedChannelMenuTest.kt index 693ce4d8d97..ec06ac36a78 100644 --- a/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/channels/SelectedChannelMenuTest.kt +++ b/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/channels/SelectedChannelMenuTest.kt @@ -16,19 +16,12 @@ package io.getstream.chat.android.compose.ui.channels -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier import app.cash.paparazzi.DeviceConfig import app.cash.paparazzi.Paparazzi import io.getstream.chat.android.compose.ui.PaparazziComposeTest -import io.getstream.chat.android.compose.ui.channels.info.SelectedChannelMenu -import io.getstream.chat.android.compose.util.extensions.toSet -import io.getstream.chat.android.models.ChannelCapabilities -import io.getstream.chat.android.previewdata.PreviewChannelData -import io.getstream.chat.android.previewdata.PreviewUserData -import io.getstream.chat.android.ui.common.state.channels.actions.ViewInfo +import io.getstream.chat.android.compose.ui.channels.info.SelectedChannelMenuBottomSheetDialog +import io.getstream.chat.android.compose.ui.channels.info.SelectedChannelMenuCenteredDialog +import io.getstream.chat.android.compose.ui.channels.info.SelectedChannelMenuMutedPinned import org.junit.Rule import org.junit.Test @@ -37,45 +30,24 @@ internal class SelectedChannelMenuTest : PaparazziComposeTest { @get:Rule override val paparazzi = Paparazzi(deviceConfig = DeviceConfig.PIXEL_2) + @Test + fun `selected channel centered dialog`() { + snapshotWithDarkMode { + SelectedChannelMenuCenteredDialog() + } + } + @Test fun `selected channel`() { - snapshot { - val channel = PreviewChannelData.channelWithManyMembers.copy( - ownCapabilities = ChannelCapabilities.toSet(), - ) - Box(modifier = Modifier.fillMaxSize()) { - SelectedChannelMenu( - modifier = Modifier.align(Alignment.BottomCenter), - selectedChannel = channel, - currentUser = PreviewUserData.user1, - channelActions = listOf( - ViewInfo(channel = channel, label = "Channel Info", onAction = {}), - ), - onChannelOptionConfirm = {}, - onDismiss = {}, - ) - } + snapshotWithDarkMode { + SelectedChannelMenuBottomSheetDialog() } } @Test - fun `selected channel in dark mode`() { - snapshot(isInDarkMode = true) { - val channel = PreviewChannelData.channelWithManyMembers.copy( - ownCapabilities = ChannelCapabilities.toSet(), - ) - Box(modifier = Modifier.fillMaxSize()) { - SelectedChannelMenu( - modifier = Modifier.align(Alignment.BottomCenter), - selectedChannel = channel, - currentUser = PreviewUserData.user1, - channelActions = listOf( - ViewInfo(channel = channel, label = "Channel Info", onAction = {}), - ), - onChannelOptionConfirm = {}, - onDismiss = {}, - ) - } + fun `selected channel muted and pinned`() { + snapshotWithDarkMode { + SelectedChannelMenuMutedPinned() } } } diff --git a/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/util/ChannelUtilsTest.kt b/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/util/ChannelUtilsTest.kt new file mode 100644 index 00000000000..07f5a3ee1cd --- /dev/null +++ b/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/util/ChannelUtilsTest.kt @@ -0,0 +1,93 @@ +/* + * 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.util + +import io.getstream.chat.android.models.User +import io.getstream.chat.android.randomChannel +import io.getstream.chat.android.randomMember +import io.getstream.chat.android.randomUser +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.Test + +internal class ChannelUtilsTest { + + @Test + fun `Given a DM with current user and counterpart Should return the counterpart id`() { + val currentUser = randomUser() + val counterpart = randomUser() + val channel = dmChannel(currentUser, counterpart) + + val id = channel.dmCounterpartId(currentUser) + + assertEquals(counterpart.id, id) + } + + @Test + fun `Given a non-distinct channel Should return null`() { + val currentUser = randomUser() + val counterpart = randomUser() + val channel = randomChannel( + id = "regular-id", + type = "messaging", + members = listOf(randomMember(user = currentUser), randomMember(user = counterpart)), + ) + + assertNull(channel.dmCounterpartId(currentUser)) + } + + @Test + fun `Given a distinct channel with three members Should return null`() { + val currentUser = randomUser() + val channel = randomChannel( + id = "!members-${currentUser.id}-a-b", + type = "messaging", + members = listOf( + randomMember(user = currentUser), + randomMember(user = randomUser()), + randomMember(user = randomUser()), + ), + ) + + assertNull(channel.dmCounterpartId(currentUser)) + } + + @Test + fun `Given a distinct two-member channel without the current user Should return null`() { + val currentUser = randomUser() + val channel = randomChannel( + id = "!members-a-b", + type = "messaging", + members = listOf(randomMember(user = randomUser()), randomMember(user = randomUser())), + ) + + assertNull(channel.dmCounterpartId(currentUser)) + } + + @Test + fun `Given a null current user Should return null`() { + val channel = dmChannel(randomUser(), randomUser()) + + assertNull(channel.dmCounterpartId(currentUser = null)) + } + + private fun dmChannel(currentUser: User, counterpart: User) = randomChannel( + id = "!members-${currentUser.id}-${counterpart.id}", + type = "messaging", + members = listOf(randomMember(user = currentUser), randomMember(user = counterpart)), + ) +} diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel.png index e87f4e214c3144f69661219fe7bccb79e062fd17..023756182cee5677bc9b16d805624ec66d1da9d1 100644 GIT binary patch literal 27899 zcmeFZcT`i``ZkIc*&=RbDh5NS%4t`dTDAs{tD0l`W!2!yKAqzj=) zje<%E0V$z{A_9pdK!lJ45)$rYpL5UH=X~RL@3`apeq-GB-x@2)TyxF#KJW89Z=PH? zGu-#v(ck#^`1ToHy==k9w;jUAx8vuY-Qdn=i9hoA_`F+&RUi)p&5ve!TuakG}d7QWBam=3nqQL0ar;bY<-XnWe;DpS?gnVljZG+5S z%9_9w_SVnQ5ZP03+9*0JE9=EN%|XR?{Dc1?zK>R2`h0vlMfv#jck^9H-1hg&-=Y7y z`yZF!`&-}Ly8G{!Tdn-_?tfhVN85jU;(xUL&wl)mZU60w|IzlxZU6r({Cz_HV|e~H zA^)AT@ZZ_?|KeBh|NZ|VEBn8G?|c6*cm;6G{cX4Z?egCbm92%9_BFbDb->&Ouhb?; zC~@IZC_xqBP7L-iwk51hY?6=fy79TI23Kva!mi#=E7d0*stCElh}>jF5{OegCPjx9 zx}Wc3;>k-VjZa#dR7uf`ZJUe3+O;O9ck%HVm{whZd`;Vhw%SpI*v9v@Aw?GLIvCZB zb7odi@P0^4^j&R0-tkM<|vTzCQeyZO>QJ>6b9+3U-Scn93# zdr)+x%2=V}NYPF{6Cdd`iWEvnMQ9J7QcaN-w}n|#5u^mZVg~8{px!)hDzuwViC`2f z${MO`A$;QFE70sznh9J5k23%llia0Xts@{5$ce(n2NP>2H%RKXej#mQ#ly`@L4*=# zMzOu-+HCDnt93~WB5Fgg&dqK})cbqLutK{vy!pOk&1bQ8>zr`v z2Ty$P^AcSy$)B*jLedt$LGdSe70{5_dUAFnyW3sYvJBIs$-u5RI+R^cuV|_SPm}7% z^E0mFqccTicfKlv9ktC;B7dOB!C8vb2*$)racYo&RK=oz>|RDp@;=xxTXE&^O=9Ot z&-LnV2+qn-JjjZH$>El!N+)Pnu?Guv2@2is(Ayq(Xm{kHeBFPBuoUECQXfVc7fN<( zmxoam!uZpAv97;}=iSQv331L7EiZg(M+>|j%vUpp9O@<%xn526e7BAYLh|K{LVx7& z+=MT-Cyg{(BPX_4HtCGAVEVsG9P8UL&WwjcCLEs_NxxroH?b?1}LTJB8c|K|T{{eOci? zwM!-jV*BI*KO4bK-yuAhaT@pIr~N8MOOs(0(=lmpTMibIWcbqVN0}hb#27pd#VLHX zE)-G;oJCe-mp2=Ed@!}VqIsmw^T{N8=)f+tN&N75in=JD$(+6{_e#3yh4x;Jjc=8$ z4r7peTZ&r)H&$R1F{esc`S6_fW&*>M0q91g>(|Y+a={5l`rScM~Y&ymH{@I7rU;^5# zH?Z=$gRR3NibI6EReH4vZ{j5E7n|rkuDqKx1TDPeiilISz3U6L;$0$+-{O8nUN+c% zwr)Him)8)v1kWj1`Y;neR#cd+c}0i3PR_yFdzIA`n@6$-7>^BTJJNoOHi7pyK36(w zSc(mHPO-ON<3fZ!L4NvR$GCxyhNbH9lLP$5J&h)i1Eqs+<)wJbbP; z#4mRU+8`jEYM{{Z8RF+FIETc073c6)3oreqthe52K9=ow_JM|d`*PzH*O$6?IY!v* z2xC}&TW;p9mW?^Z1U57E=A9>$f(&2Jy-Hc-O)FiR3v1VzDc}3GZ4kTAei1WbWkEyw`<7P{?R;to6j7{e z?I?`e&;yPU3z~7ONw)3Tvz+CG$RgWWw&l8>{Y!oz*hre-8jFH~}4(@xXw%Pe#os>tj_*OSsq z?1Ko_CB2b6I-%cK(TR0q-cgQ&?Ktsl5SATEa>mi0g+4lD^Nz@|wfD&P?9m_}Tb(H^ zDqi5!3_BA`Te zSK(8SM4UfRk@-0WW>NLMa$ptcntz@95b=G7_{Vyrj8bG-H15k>ha z>35<`*mAG9loGTwLaU2@wpaQ1$#z{^q@>Bn##Wr8J<%d6;0DG=77^&-Q`5(}o?TSU zOeqwL+NDt8i1iH}pN^fgG}Fju+|)Rig@bP!RekeizA$I9#HMPTl^wn`&+><51q}@? z_a;0aPvJ`&KAkg1a#!t@K_skFI;;iPaMObwQsrCh2ptta{^Z^I5+7 zr3R`EXR*#DXxzV@FfFr5q6H1v75dx_C0oCjb5AtNLACAIYbwjqwa{95Vjl6Jh)UM?B|Z2Rnq0SZ&7YZA|Yk7U4!1(aS=1b$VMbWdjqD>^EvqrQs z!g!2|NNcZ(X68G7^g~Ua(7BGhuf?Sq$jhO6>MXsSxI?y%mB@(|3GcHwFT!Zxt9ux5 ztPLXy)2Wk4&LSaJ%y*>Ze(mXAjugIUE@-VkwPlb!4evLSW3YWY*_U+ADqZ16+cy0; zREA;~&_wMLNAEq_Wlv0}ZN_4=9!7OD;(V-hf;SaQUfHhQ9KHuh+~qQb+=dHop=Y6F zI%Y*2T2^t0?1+_48@0&Uy=Sn$cK-&^_>@e9Z#wuj*DO`v^fewJUf@`0vShEX9*S5o zu86QJKtbIT=e5@h-~mOHNcMaoG20zu=>g`H?`~{%<5EM(QlNcp&Wwd;q-L~9OSN?S zoAq7DiJ;*corHi)3eL$=c*l0Y?o0f5jppHWV`~F*r_=es_qgOQ^R9w zsNL3Jx`~A^)(pR9U&uc!#TgRB<5`ZiH6wSP?K=WJc;}!5uByqre__#eiNHL9`y8iqTF!CF@4$G!Y=l(Biyv4K?B>>l{&C>+H8w9iPHDQiMSwdq{yOH zzPyU$lyvn}t$3Z6E95cjGfP+e+!N)G%gB*032Ef{)^@CrD*Ci@GMiR#ybkGvg`?2) zPp7eixS0h2=bX&H;iXV~)f+3g;kv@mvdlb;iyIfj#kv~aQX_4$f%{lG{_aG!*{t+F zh=}7oeJ2Hid__>56lyb-7z`$0Xi;>Vt*_qtEUIxg`uU#<_}xY5)1Q{7<0K{SVJ)Rc zv~QDIG@cY1ysx<787kq%9qh_0lHPWn=(+pb!Ka+xAVl9rABTM=0+FIgH=P@sDmWDC zK}p`PxRPCmZ@!)b*umRJ#Z(pVHn9}>>l6Plhuf~ls|>=5`8D}}oEZ{?tZPRAeC zRyWzeZWU?yR{J7TX*V6Gie15l%?}c%km?x~T}ZWP6L*yDko<9Zmv31_>S1WV;48AQ zOxhK*QalO@M*DaTeo?(mzsRFQ;GH*iG)L-Fp&di7UrOZ&UJ5f`kWtGl8O6$T&vdbi zK7pTK3sK;K+^;qzh>89Q18C-M$qkR#^omF>)rV`nlAe;7G=?SJUpactYv5X$33z}{ zidmh&QdaKUgJWHY`yepuvYJJU*(lcSx(ieF&bs0An~-EFIB%U?cgE|SicfW)0pi?D zfz3J2;D%!m^U1Z5v$%L&_Rn&CS^QNzEybcOeUZr!HB+KgY#uRD1MuO{&s>A^{u5eL zE0MVYPWcC+yZZ$pmtK8S8B^haLCfoWSDIl~EowF~xIjx3irm3S>NGko$6dJ8vJi0a zZv6TA1ZGH@iBQ2NO{y^t?2e_xutew-DMHpBBLC zT{;T2D4QJr>QR_AWIr_8ev)XuhP#?|jMyz{F~sFeZR-AzLJ5a$w=E11_5}8~&UE`CpmarTOpZ1KJ*~lp({yCS4cK*f86tcHA{V#~w## zvkpNImS?DiW@UwE)cnE4*QxYNp^mogtjZk0(ak~u9;a@c$W~w z5Ao&04eU_=^(d3p&RdZ+Way+zqLJy9*6ZZX!Xm7caQ>g##CgBw{^zek&w-<|^(vX| zaYCMxm>&CSH#$=)gX^iuI0Ow?5i?2b?5xHvCKx1&nz>KyOyn_3Dx?NRl_Ngr7sUJ+ z+@qFJosM?`qNEN7TA)FAlVWga_dL#c01VQayGfj5f~ee_bX zWtIPKb~gwu^MYF6QXOK4Q-UmvmC~dJwC95wt1p5To&NY>SN{RkH;TQ5p^#%ni5})-`Fp(Y-1y6cfILNy(!#C6E&A9;{QEvj7;=YL<%p}n=uQU6=!p9oGRl9E0 zPMrbM?b|O}TaUz8QZMKitW&ivX*8ChMxAh)0;i${Ao!0%KDJ%zzdeCju z4@u7ep{Ladv!h1%)Ida{hx6%`M(JZUtLyo)X6NfD#KHwB6i&`$>4vc=!6Me@oFO?` zaXoW3z0Id_7kc78u`I}eH>JHzjdMrv4`@J@SNyN}1yxQKEuxU%p{{lnuSn!YnIyMp z+GQJkYG4R^?ncAJko49^`1A)!JJF=aFJZUt-Y?D^1Yz+*y6H81Plo709UHK%_5#So zwCwsuhSAOEU0(`ALnqSdY$!H^{t0^dMr3YEItM*mw?2aJbE@CGy9@oC;yKizM*eEF z=qRdu{@ecNeZN8K%QX6nHC~p}gLr_n(Y%#7pLuW^91+M0$s3{!_3M&SX@8QFMnhug z9p24f@8kyTS~NNUO&7_D7;cfk1kX%g+?Vxni zt=R-Def^0FDPF7*jW9e4t&Q9q>0Kb^kUrb22aS|!%pYU)m$H{i5=>e?Xlb!!A4Bsx zZ^c&J*Ny8zU&%n-ojW-`T!C$gGAZuKkoHT@t?8;@0f5(8Xs0l+5MkGnnE}5isMc}v zd0_gCJhxnYLM>OrRjPI+GW&C3_m_yw=nEeH*t=Vg`j`HKM`#-a!Knc$Qk@2 zsPWewrW&o2#OC4`G73$!SwH@=`sUT&TmUa0x zKZ`~=@Rl++rQ4iw=h86+2BhMSldz&sMlTGJNprY{(wrylyE)qZU$ZHT3+BjIO~W(!1ya&xkdvCn?@l3DWf}5SlA)!6 zdwhkK&-P;ALh+g2T~#m@Cti+E-cudquV~3Z=^%@JQ|pfDSw5TwSu1o={kmo_Rog+c z5*(wLKF1W}-)5QG#ST4Hw(*E%=dei;^NokZy zL47{9FL+KDEh%I9Be=2jLizz5FZpO^4?2o|G;g=kw2a#QP^b2QY*dqO{d;KCJze!s zq0qAv?B9Y=#&*f%WR{)#c?Fzin_v33uBx71D_#2f0$EF{{dmrNlcDA%D7`u5!swKY zNPr{Vo}`8+E2gT5cE0Mq4LH**)DJ*c9q5svcRe|NyE!;M;wtN|@tGU+m7TeSzSM`8 zoH2?Q-3`A(PQb2>v-(5TYGe?Pg!yD$6GH)R)bPX`i}jpWKG_riNWCX;(=~>LH+ZE)2@%xwswe|-5xLeTX_myvb}4t0q*EuT0!q7fqt%z3dmyHP`K%K525*?)H^4o zV`N{&l&=mOMdq$DmczE2Jk&3M>!L%Q)vJG5WUfpVWQ@9K-PW4F>S!L`vN}#sPuUD% zd?DDDX|?S8+E9WlAKOroEV*y*8Bh86Xwq4nF)dmwOwN4Io!*`9Gc_zxWk4++7Cfz{ zG;fk2oA+GzTHKF73vXu7whM`(wI%~o+MP5l-1mzntvLD3GBqQWer33+?P5!ZNwm=E zOO;E-3fBCJzfveM8ZJXN#wuyQ!&@^Kj~B$82Gr^vh;o~tO10UlU&y-D#coGo&#M$Z zmG%#w6<1)TLyoR5lm(Pcy(((21+8sVl*RiEegnroEc``_GM|zuKf3!KQF|0iezhYm zZ7}ed+VCpD)`s1k#-C=EQTiUL^Ev#r5{5zqd}YSus;u9id}%{bCUvp}Jv<2hchu1& zgdRJ^Gt1gGefD_4T7Q><~&Rj>|)5gpmMn4 z8q>2(%_hV9c)?YqjOe z&HuzTxU98`$gXE7tGtGtui7umX9-P|zfG#CK=^R3=FES!7Q>$}*L*AYErJ2ZnJFJH z81Y0uD$deXDi7N%8M|cSdB=d-nz+NLtSe~P$u=&@jO+BFQWOet3X8PFkTuUm3GzjC zOEm!k!Ef)b%8_G|nLjR?EElM^RNCgG#Z(yuH9^)L=v|%B)=?(q6)z(>4c}bKzo6#o zJuy-{9!RO|@e9Q{jJ1Axs!)EOvh5_|Qox&5$B-qLO}1?iAV!Dex*bm|;&wM?Id%r0 zKD$TbX8p(nU_jIsr082RQTF-rioHs(^)1fCrQ^LrV&_!-o=LY~Di>GmqP6QKu>ewfq z*6WB25W}ctC1_ZBr^wbThM;$;b728*#TI|Z4B30tIE}Rogp#w=^OR7xXZ^y7L|L4F z0|0_l)W&ZLrPp0*&gpVSdzlSkK9TyewtQwcJB^y^&CWK2bjqX-nwkro$kK-a9;w_9 zcgT1D`R@-XgO=uHb*SHO40QrxriWnb;^ZQzY}<<`R1F+Ux$sgdsbp5-{>W_t;F~Su zs!DSnj0i&N&!ir{n%Eii@}N?H!*(Nh4%}^W9Jy3a9^wR!c@z>j$p{7NY}b&TT>F`X zEUsz$&tn+v)SZpO=Gv7lNAK67g3NW-p)Omq|DA)otcfG-)X9ARa_^E4V8$60v>rDw z98L<=+JN~Y7|CT>g>NyFb>yAeBklGf(~sml;1+Pz8yL7>>qWD%^+>bt0uOiWLLYmk zh?qBKY+6$L9o_R^*%bSk4j1jP*nR_^!yJeA)*=-3Wgixg zs-NOM4G7{lrF#pN?L(1Ul$|ee>EhlqR#VxeJXoTUikUmg%6BSqlN+v6IGzoA z(*tsyV-{X0qGh;6`sfPl?X$CEwa!syzIv2*xnm%eEVFL4)sV$M0E|0*uor_B>f_r3 z@zIy9QFi0K1aKWO3Nlq7U}A^jRzd{$P}1G2GWc^I1@k3-h5`_cA~Mai0ezTb|CA_F^N=XG6THdKF`j1&A44VTm({=;jUO0Yg ze&8im_+!K3fSr35!7uR%y;l!wZJ9iluUaS5v2Fp}DY4_Fs^m;~d}t!TMyu#2gSxZ2 zy*eyM#6hvHnYo?XGP}?_6EhPB#`|3o^z6lK94_&-ua!! z^mr|0$^PE0P46bG;1pfrUQY}9^KVJ2vnL@VQc1$zF1d;6{gpML*f@!>cRuSVb6q?2 zD*#~T(W!Yt5Yd$E@0H9kui&h3nOr}%rd{w}h}+{J0e#Whaoa?VjbCk4EL=W@$Mjc? zHX*}1f0mACCtX|Dl18lr!%i&u<*h>Ujk;WNLH^*6JYfnT0nCsn&5pcH1GA3#BgD)`8F>9H zQ&3Xk9mY?kBk%Bu8nJwhd=1t$K%|x#4t2UJ)(l#dF;+GQBVPTknhtgYCh!BE*{?3E zCgV0}>G|d0BqY=YV|0d#gglR+E9mxl5@iQqwUH6uG1`oGMb*%md0Uu1ATwKU- znKakq1|qPkmV$H30sT40OpS|VI^f*`+PU!uFRug}oXvl7_msXYWKgrN@N0f(xO?Ig zwV|82Y{22&(7WGi;HeVO+PjI%RLupHL|+HQ!&$b?_(3P#gwJPE4>j**ry+qJIm=1z zbDE1v1=3X@MQ1uj*j`1n(BsT)`N+chzP}FbJSmj!Z>|TR0j;L(->zaz;G#Sb>= zm!C0|&CYx? z5c9Fpvw<-d$5|)n?7Wo4k3064k`s;AJS7r9fU8A5_myr4aA>{lS#xmZK9DaOo(!aJ z2k~ZBN_d^1HwO0nPh*TFJ9_qVDsdp@x^HiHB{;IWD=nDB41T_yXwA>FkX>!fJr?PI z^e^(f->0+2b9252OZaY-BG*w4dm{T#!Enm@JA}d6sngZfP}xQS;-w z!Bfj?ARY~(B~mIDqM~`{w(dCJE(lyRE$apnk@lBIY0qId#K7~qAJjlZ&uWh!FmXLj zf33Zrp9TZs^Mzd6|ynP}i6v;B46~4kMx6vpXg3Kz4Y0SR8}`Tb8IrTIcC9 zR4!Uxc&eGzOgnUE>!w|r(QBY$%E%f$FuL1iwK2E+XsZE(W3X#--z$%1H+TJ6GPtc^ zuyv0zpH#1l2$c9idxfXpX|D41A&yLHJpHaPN!aL&6+H_kp!Ln@8J+#ekH zt9k#ld4+G#9(0oD?zEoYrME^y#q)N7%D3k!J?+2W+Umi;1(m~1TSh)K<>CwVZD4Ei z@c{(&01WWoE~PsDb@x9m!I!qayLI>9FSlCx=iUFf{8!s1>c)!AfefJZG>>^>@Wp?r zj9^2O9|6-#x0DKyrmcX?oKXDiY{R<-a0r!vX!j-+ceb%qle2&+0T65I*={})o)rDz z{)pF_AOID6mDd+|h0Nn#Cukk+a6yB&Hd9go*mS~{zUT=w z%%U^Z-!2laDU?|)g6K*BIB&R?!2%IaQ!w-Z$RN;^asUv54*`gY&Bk=Mu;e(}I>ClTWSlGU;2%_Hq6 z5Uh#6w0$n%-dNjq-|F9m9))F;Eq%-Q<*?+_=z(V0RtZkqAF#^Kr z*27)J!e-~+07)>en4A;Y!UXOqTX2D_Y5h%Ml~S5Hw-tEAJqsA>-AtmNi{6yW#t)Gl z%dwXX;Bbit92c(5%kP@lA=%!_N517PY2fbkN% zSyj@l8K^43A7Qyun>-eyp=b^rzEp4MrYHP9JB(7q&I=uO3bu{}E(B_O{qk3_5^{EU zc^KF%l|?m4xc>@Z1} zqHmFLlV<6EAntBUo7IPvl+}6?zHX`Q)ZhuzbEA0;tNq3$!29EMoyhAnM_TxCKrZm} zkanym&=}sCr`1h{dF5a?2DE|jK=i}vMt1`+W@kQ|$~WvHY$qX2g-#5f3UW}V&MK!P z0=p0^=d(B(gA6U215<}H;4_f~g8x_#?-lQIQ4nrV&FaH>!KhFjjIY5vH?6|VfNR{~ zKw{lE*4t~y&YiK1ADjp605aLcy@2;i^L3ure&n^fn^fL)+02n);^b&KYf%sSDK`;(z$8`P~(9q_{s<-Lctz-&2i zMQGk#0QLaaDsJXDhU)}$m=R(}rkch!-Q~~1J9cMh9y4Av7l7nny2oqY%0h1c@QCf2 z+A^7p)mDBz>Q$ZM6gu}RsQt&W+>I>aFtE)y17?!6^WDMt^oJyndn_J;R{72%1#E4d zf~>u`ncp)wsP`|EF36Z<0f$~$Pt9nKOsZo5fNPrDQr`yxAYYxnx)QSGKA{GwEZ^2- zraX8_MqzVR7q4jEPUY~X_eZ{KbIK0(H9jw1a>IvjWB*RHpvze`*)4_o0hMgAbKV>! zoBK)kt77CjE{p>Z&(FuPv8m|^Z{pv{Z<_{6LAjS(SJhUO)O{oS9opQVyfWgNK#-g0 z(Y>&x<}_zn5C;SyGOMZ?&vjY#y#!(>6SpYSaXIQToI9xM#@!hWQ!y*LLOIrzt*c+J za|vgt)p0U8f~1n;p>{y#SPCN&FkaO@?zCoBxu5xWYQ%G=;E5WfnSk^Bj1|xTEMnKl z$XL%EdmwEoE(Dp5)3qaac9iG1klnbSdQ`TQ@qNY8{*e}YuY3L$D+cY?%Y}y;Xt~*4 zG}O2qNwLf+)?I#L9=H!-#{z4fb`*N;h-U-6M~mtP!cF4*IhJX9W>x86)kzbXJ+sP< z1joEsS=_)M=K%atlgXmez@}zY_3&xlD@n$Yyy*-2|Lz|~?fZCrD)a=j(DsB+wW?ko= zfsNF;`ihcwTVwLlg$HE)2BYYD^Ln8H;6p%ua_2h61f1lcg`Hz<5@3n)2utuXEF=D( z+BS9Zr9d?^8@eO_Nzh*DcpcRZoFb#{abpEln*inYA3NVKMej>MRul4uhjo)l`8{TX zTc}sJFI5V)e&Oqhj^v}6tMf;ekOi{uo@a`_v%Dv}>foLg6nhA2VSGLIUZG!C1GU`2 zyft;K*g`>7KDt|%vtYT&O~r2Hvzc|+i9$%2$F<)eqOV>N{Tdf*by;sz7xV9T@=Ji2 zp3*O>Uh{jdI5a?J@lBxYlKH$}cV}1QbxEl!2)xNz*M2UdMv~v<{8z7d_WoPjr*0YKC1+>yI*#HSezSu7lfU zyNVv38or{p4FIL;&j*bMYsBX~2|LPiWK&Bs)-N7*iCESh#yzR)K8|{W14nx10?=+- zte>s7l>GX)JG0&ZA)Y7SmS7p3Tu?Bs2*)KKxPnhq8PYEpOq;9ijvvnq z)u?eoPs#Sy#e9}O(*d<;K86#_=$(B$$LKm$eylg9I_v&eXPh_~F!ate3;0XYE8ft= zmeh&A0z4c+In-C8(Zae1Qw&`7RQ8+H+G*Ao2%M@pG)G%)zw2Bdem)BUpCge3tK9;c zVqzgroX~e7flT)Nr@Wf!XljOULy=mk76(PDmaj3871I3qdI%aLpcwk13*I^N;oC_7 z#qP|XPA|x}7=TH?^J-8q zNNjuN0c$&FQj+}2xWzyc?vL3qGXeEc8+I|2tE%$q)+_8lOuvr{yuWwlVEMs_mEc&* zU)%U}6Y#DLOGEAtOJGg5i zomsVz<{CeL=w3j0q{=1oT0vU?Q>(&mh(`O93Rd!^6zb1p+@aaa1DU&mPaT(5!KVBU z2gs-)TL^rL`U+Bo!QYMxr~$TW@^uMsAWmkuU!G;2BcxKhl@N5EtS$v{piIfa)4f09 z+v1;nNoIBPsHB4IfE-n6!9oN6EfjoO829Rc;T6qAQgNSvyr^38lcj?J>D0@bnVx3b z`M#R=@b`Y3Ib?J5&C-K0Q5((tbF$+1w!n?zF+Qbrkd3}8u(q+w&)!K(yd+d)_$30w zx{388gT3GLg?5@|5b*wji0wg0Z_&5wpzX+Ygf-~5Tgh}-b%qc_9wiP2w(6w zwA}h6*~s~&{>v)>NC|0eq*1cprq zr1QAWDD=9%>~RvXAm1DOtM}+T*Qz@8`6Y)U6Gt~6NZRbzf!?hFoql`D(z%}2!cQsf zcLxrJ@U1q$J!cYBf*`{lKJg3-wo%U4s_?sPyst$8e(Uua$RN@uLINw%!xG z&{)?2LkWi$9EM*{@X3GNqICI%fpQH7 z91%VoU99J{5llO=HD;hu$Y-o%sdEE;_F=Sfp@Y!8fL=n-&NOoI@_wH0FXD$KE$dfD z(FPhn)&?4Pr>-tyL!Cf12vn|oVzvBbCI$gO}|Fod)~Ik8_l?Q?tDuw7V+cu{i+R`VadVX zEYFnSgGYjIf`kOe{m1eiitdK9gcJh@xpplM){4#FB<}c*1dR~G=i^-+GQueH?s13i zJaz9*F5Oyg10ji_)63a>m2FDV?Ls=oN$a)v=8yqo+x{y-dKoAOV%Th7yWt_C4z^c<*NTWqs0mBvy&gECAB1dI~5+DFVqHU9NLRhak)Z^(f^O zuzVQ;8_L_71jea+?c3^b!{9rf%qL{F2_i?bMcK z`7726yfv?F|1tHYKHis*VfoyHcVq)4CM$gmrlif!BW@liy%TPS-Dv_I!6-@_{j?)z z-XnMO$Q041molN!W6?}*#(?@5-E%63^f(J}!hYs>g}wK(`EY`D#1E8$mEkdeZw4R_ z+Y2ibR$BKeRy%KY2vj+&w@LEG?cGzIm}w`NTtEoA*O2U~ws3s&Evi~C$9vxVw2L@m zbvfvxs8Rh)yp{uTVj+WQa-eq|lwnlZY%Clla3=NKy{1U$;3Ur()7p1HNKy8?dj)MD z-M!Xce&lxCxaCoK(t6lz|GQo2L8f-t@@Lc%yw_ID57VA_v0HYEtRK zz<3n0k`Sp$Ap+*}62+%?wPh60t!u;Y{PeJ&Q@Pz;KHCZgL|T5$QRWNPa6t-y-`nfc zP8roT`08};)0MKImgb3IISw)>bV!5HEy=!zt>6HW?A+VmweokN;l11-#>4$R6J)v* zG%24G!3F16D_BrDyk4FQEIwe%!rl9Wl2~cp8c}kJpmQ!3(&TjvSUDCmR7&9J{w&>%(6ku$V%2xu)=sPj3Sg^a^wxxo+!MqizY?PC3>D5umZ z|1Swd3358sx44$K!~+F5KKC_mbyvjbyp%$rz5@};K2o3%mgf-KLe8VlqRfXHtQq9m zRgZcQ4NE|x+RO`(@UH*$R>J)o*Q?M+0$VlK z@VPaEpx$OyZCUuohkD*;u+;KKVoDZ#siOFih+VOd*gWlC>ytu3O3eE{gDLL`nqOpN zDOGa|L=9c%TY+fu~UJoh}3y(78_^;paS_jU}pc=bgf%?!Kf{ja~Zm61Z zRL>A`;X2I_4i-J}weAy>aw*jN+BqAdH7(17S?g1_ng5~~u+|u#iLCoPq*v(0&#BlZ z{|e6Pq2G;-_PN+aK0DJg!N_Z1P4ZiXFRJMiy;gtb63ny^*u^6SE~eXWxc^*G?3h)K z*Q9*#B%z5Jbv6z@ixeQni!!7JT#QaBvhbXGY{0TiYV8mg@aN9KcYK#Ne;A*(#HOx{ z+b)Kl#k+ypZP_4qc27W;d|{2}v!_64$On!SY)}k~JmwkCByJ`Sg_D5(#-qVQ3&_mq z5?17`^4dk8mM^tzKKTLP#L)Sr0fRrFzD>{{+KMwd4gMoU(Ni588~ixyz1W#oI=4yP z)4OWrHb;j%LO^9w#KTC$4Bml-M#Lvr(R=FdQbm4kNZOT>V|X18^huy(#D`j%7GIB7 zY|DJS`%g)ifYBjcP`Fctoy%jas|{0uc6-nZd0Qgz+Z)D;Lpahc@@`6~LtU?OyJ3k2 z$?>(%1aM1yaDeuiSJ&3B9n2}$A$PU$K zR(-zFUGwc~C&M^HRZX%QLUT2}!L1HO6o%Yr^BI57#-$p!V*gC|Fv5ON+R|$O-Q)D;D9`FsXKLUS@4pO&Z8< zWQ+s1bEbXPUF_PN&4cswQn-Ul$P{NX8`vc5!do_st=9(3&DVbPJkfQDkr@}Xy5`;+ z^O|=}!%nSa!Wb~KLig8t&Juc&_hF1Wtdp~%3k?0r9;b4GlAro@xR;UUY6c2|R;W$m z$W>*zY6)`nK+oNYmIz33(4}49_pjrngDdLq8fm_73j0nK<`=LdS>=LoB(wvPmv?|PIV<7Zahv01OA5!#Y2Du`;e#N1ABV^dkUZ3>Ht2RR^eg4y4imq;uDQ<1^{x2LTo+mSx z_h(NrkJP8LW`!UMyt*BWr5OB_*Jyx_+`|=_n`XO#9~ zieIc;S+*7qH-^r9DiMYD%jGZX5HPg4yoT1NC9E-LVD9G~4%O`&r$y-36?4Vpe!>zp zW}ah+wVM-Jve^s9da*#9DX-xM+_}1C37-h`mGDRueGaVDMkNcjm`F>u)+>gs)8aFy zXp_ku`2Ny)h2HSj>5oaBb#^L=J#%>bh9)z3x5o4=8y(Lw9^#m|&N{FgR)My()cWl7 zMDeHjg@IQEr2#pZUY=VHC;Po#nkyGz970WPCA_)GoPPjY3Vey_6?Q^8tM7ERjQlF+ z>KtlL3ozu14rLx`8Oul(Hnac4`zhS88{LCcHa^oFk;9F+=HnBUY{uzQ6@fZ8O>@95 z>ebe$blUim!IJb(6uqj_A!scg2CTiE6>U|%E!TY;=1J$MW!T#lDE&wTbmdX9KsRqC z^%>PAZC(rm%{9Na{%DvH6uJCmC~RGA#6`YFdz~;@W>A0uGVE||ig?7YX<)~}3&RXd zxhqXmgYEF%X4#>e5qSv!fEZ))a?I?8)}Lt;%|nb9+dJhp^Tt9`b;itKpjJ+_tL2Bg zEiHdEwaCGJYQfg?Qk9DwW5HJCd0A7J2zV{kDTcLczjv(Iui1#@e8Qb)k;S$u(*PY5 z1od;sdKDQXdbx6^SwdGtYEueT{9S+otSTG(ygoe3YM`@`P~l4VX+PbOr`SjFDz#L{ zCXYQGydyMNQGTW)qEe?L&!FnGv0ff*-7I%r0k0)sisyEdEA1>wtWwI>rdV$7i5@Ai z@4frq_Rvzy5o`TWj{nZb0(i0I5sjQWO+X^^!BP&BdAbO#b)jf00s3-G3bh0 zvT*o6N{t4*A@-}TISawf7Wn4CUd5IkDHWIh74qe)y_bU!5 zMsGw4L-Y-2h(a~BDED`xk5N~GJz<*0L-IIWMajLEIuQH^RqOUz{ zQHEvldwyXkq{{tb+!s5}v9}M1D{?9EEBE{;o>OetupC4HYGX0Uu4)>EDcbIvpbVyDhr+E@P+@`WFr z>Z^MXzh3SB-E9X#!->Hz<9Gx zE$@)KE+!hyIcF-8+JYwooHd3H6J zqR;^)&ecArgjVKyREA~>o&O$}dl=e78};>k@M8s6u}~8+k^O7jcHhj+ooEr4h@wRV z-KzcW+f}sZzND!DA}C|31x!GHQ_-nS2YnJV7i9Ck&6Hu`$WiT(Ps!p?=P+c|Zgeu_ z+6foUENWpi>AnswrpX-AlxgOj5ff{ON2H&U~J$31p7WrkTQNEzN znI0O(_fxSW4|@5^yzRh(VCIv_hFxgLY6H*0PcWKCs6eX!sb8S+N0aEec)jU%)R~Sv zm&@=GU%IBLp*Ug#{Lv1L))I`Rcc^-~q>G2cBf7%#*V9Q{_NT8AN-|gf(tS6LZvL4& zuIVKpr&=+2&J)zHuGUNgP)$`w>DtX9bpKJ*B#%$>aL*1kBeILsPUBYE++IteR$f(@ zrCHuBK*MP3eaj{Bta&U|*AO4S^c1qV6CIA!1-v2tO1rrrMEXM%^P~X8RXf21i7#tm zYdUdxtjKr6=6dLr{2V1z=LnNX`|gQ5gLOJn{p)2j%wh2`bmhv;mJk(f6=@xapo(19 zo7zV?{-n_t>o-ZoL8`0GBDCg4WS?*-QA5aLkrRk(j7yC zgmi;63?+gvAR#$4N)6p0&G+E@d#`hy?_B4*&L8LBJ!|j1p1s$z)_t#M?LEuKgJp-O zKs`p$skVL5@>GzWZQUf#*zuc96&Jtv3VmqLSvJeQyXnNu)sMpI94hF3cy$H+nJg^fUO!HoBCPk}-ebsU&A zPf;sMl)g}|-<-3rtYtuR+S2hHxYFl${b6nIjEv!FZ`V=n6jU2_>RWxl+VrNHdBh-w z{Q4vTh+?E^CuOEDDXRY-iZVbhHgNEI_fwB#j!11vGPLYHm!$8ZQ%V3(ffFCGU}1or&C6+b zzl4`Hha4soH>=rJXVJEEQ&-uDF0ASk(Oq$0OCw`F_{oLdu{E7N8p*6+hd4B^5k* zrQtr%^HqSDX#y#CHurvYWtqD4ZnD)M*XXt@{XvIw=VzYBlbEl_=T@grrg$xx1_ik3 zfN$37vqPM<(4q&5lE3)Jw*eD4YH)lctJp8BJq{uvXR@F8Evfm*x(Z&~ldn7e+;N{T z&2@q42kq{G3~ZxLujg#r4UoM^2CY(4jd|&QP*e}v zd$b4PJ(Q3S=`t`uf1V?2B1)jOe5p*R%qK&t7C+bd=heJF=Oo<4H}55_x6mLb{&wGF zN_BNp#$YQ(0F&H0Shr%^zGUW34q~YwqiOH-bZvWFzn? z{iT*u6T$8aD#G^4#eA|%QCbPjI_xJa{MwC{W$u}~t*p4X0NCKXw_k|H?EcOn>E4_C zW|hW1q_}LHHGQ=3{l^jC;C(?`8XC-KZF9{Io`H+f&s0k`WrX?uW$|lGkoV`+ZsrxL zcZW&dr3;?it`&RanYptbGdMzRy!OX>h2Oot{`_$HG(S#4<1Xi`#p=j%T19z{z4R_n zd#!d)T1*!U^u&ICTB(U<;=9jffo7t2>9{Cz!?S7Q8Xe%)`A$qiT=ybdk%!#xYTKiX zVrxn7g=QIN{-=u9-8eJ>F%tC9+ARZSSpndfDUtls6&_{;lkCJ-#W;UqC?h?kXeTZL z(g*f4EY-S}Qal6+?yBaLzR70p>NL%2JLsnki0NX5O1<$Usm@-hA~?`Az+8mQTtbzWGbkj>#h7HM(Id3(y%A@-G2->sx~k#*av8troRQl4LUkDe>rJOJmneBNGa(|lG)r(oaw*Z;yAso3+`c`Hg7PxNE}{HvCD%xS7xA&H z@K~1)#rtZt63kC#Fa;q5BDiiAV%U%2Y81Xqk;zPf^#p-KVp*u6@MwXgs%EX8Chgk3 zczDJ#!(Y)gF>K`L9zX6-VYI?+T6)V!eztzAFO&z(CzVU{`}ItmaHjT)Lts!Ewh|Ph zHlq~Obd5VMdG+WBI@UHD|3tcd>mEtyS7xHckaAXH_AGUnTIm?xM#F^XeK_2H|B$!w z8KL$vOr0^@Ug(+NySj$YIb=c>bs$QP#CaKDR3Cf$Dq@?J~Oz!BJ}F#$^koGlfm|W!bXC@bHS@t<>TWmso*w= z=%Kh=#cRR~4I&ZT)ANuB3JHB3>hGcFOKY_jDjG3!t2Qc=ag-_qEjn?jqu3=KYn+%o z6ZGx<^S~b@)9FphV?^X)Z-3Cw7T^g61Kl;(*oQisvJV{BduSyzVd#JgTLC zM4}4PYEYAiAbU=g;|bqeSSBJNv2oGoAU6~(n_d+1DLVY%TvCZjd*dUFbOh6G@aSYV z@0|1)=87g=+3yW=mq7e&iq@)0dOo)2bUO4so~*@up3L^mYBPvWxeBL!zL;e_RV5n~ zo%*?#RjWZ{dsb0pXRlpU5?=F1ZEXXpLNA|QqQ4QQjtC8lifeqB7#hA|PR{F|?OcYX zVkr(Gj7;V8YCQyV$uxTw^j!VwFb!W0OuJM!?bn8AD`v=i&9<$vr;<2)5I*;QzR^&^ zO+L{ZO8_<#plyGGiHmgBrw8^jQVB-QA@#O@aIjtr(O5pvW;eo9qB>!s+cMR9g!uVE zbDUc>6GXnkB5)2GqgXIMJw-8{o~~LXBypQ=U~d@04d^@uK&iZSHhh zC6ktxuO>+G61vJg22StB?X=Dp24G`SUb{spoBDikBOkR}c91Hffg3oSB+xLl2$6%(x^wM+R0|f43xG+$cEyUCE?dzoUNMt&m3d zqHR7`-^y2`;0o%ot&#&I-rHpc&Ol@|ipM^| zOX;Dn=fBYbmtou!!OcQVkVf_l43zKf@BG=OE53&n7st|+x3EA2vap!V&q;f2r}O^( zv@_4K38H=74{7XhSm8XwFtRj9)iSGw73njWQa}02wNGVxo?HRvyn z^=rY1XsxY`lrRu7jn9RW@qqi3-D?)-5tZ_Cxn9dVdgwG)J3G8%CEZep_Wtt<$Khel z(JOIZVG_u}hHX-xAcK@?*M`?Fwdz&}pLlv2HVU1(np_2+raHR#qDvTr`nC7+`n&0! zGt3cttq*1!%M>jfk6V%O*N}A}{^oZmes@QM(OQqvkVonw3u_j<)-HcCE{FFQoh?1i zxTYt-gm&EoDW7+MJS@h~?@q8Jocfl5;0Uat+qI0)r}TJvX(@E@gnSuqzx)@o_{!I; zoOKR+BZ6i2mU-DEAGX=_S+!h|Bno}louo3A=tbf_Gj{Kj)yk>pu6Z@s@JK%cd$S#< z-q!VT(-FxK%chInQ4K*#7%hEX;iaL~(OphcHs-c*tOKjOd;!Mj;+I$Baxi9@{k$JO z#h1E16IRCt3kGxy1>9Prkpv>Bc`4ZFgK;`Kokc{!zKNv_9AXlln+p?#X_V_&p^qLI z(q8f;>OEM>I$VF#XX@pMm~3p)bJi%I%cbh>>?-L-fjPF2jrLnXDX6y@yRN6Ntl&pe zWnDqr$@{bmb_u{HwS55(5pg1zST)X-{}hYSzj-6MwKMC};6Bro*+e6m?<7J>e4O*J z2#UC!gsL3b7i+@T3rxN7JkF9PKg$BjTE(%^qfOPG-3l6mr|7o%_|Z|W zrt;tr5JguP1nSL+rRE=jD-DNK!>6}NAsV^+8snw&`BdPu`AYlBP$tq(;YsDGp%I_P ze=c%ln7nsDi*>8PpkTpb2ZZpW1PkqpvQmX)Ek#mtN9oD+I{pLM!q-+R0iNJ7IA)Wc ziOJ%^(Dz0gbwHbjw+}M--Lff|Ju=Sw>q{cGgetgHRfcmd9I7u@={fTHG3iT3ujZ08 z4LvjyeDb6n8ts=;XPqR|38gJx&f>ejk~Lk)u?z(z^S{sNz2`eho$W_!lpY4jk%ZaX zJB(S?&19gPP%yXvQ*;LCfFm5W)V8`((y$h*oq$^P3omb)m~iDT{!xT6x~h1KOY=CT z7=9Oe%h&C26>;X`)Q(H3n-e2f9~O!B*r|uUxmwW$OG}{|DMCR+-p?jm0-B$Q;eGqI zqxDpDac9)zi+p7jJ=CWeMJSxja)k}Pn9N7rEt~mF^&FiCT~~oIwoDj-{D+imwp(Qeqg=DmQFl}z6BSTM>XgZ}F3pSDyZMjB94KIdnU!q~7{Rw2_!9fn5}P;b9TxVAJd=sKW1v2 ztctsSapQiv1QBk#zl2*t`s#&CzB?Sgu1$zfer3v{Q>Q*ix%S({(2l7(VK_3@+BN|qV=)sc!^j5lVJ5)7``hf}oJyT9aC00yayyx;f(k#q% z^q#(<)&vnDtpJ560+19jFh+3b-=?fyhAbdbQ`-#CuBc)pb5x|H* zBS3Zr9;5Wo?k603C?zNcd-MelkA`>%0h0(<(EpMu1VO0C+F{I`E<1AxySpE_(GfZ8 z{u`2#l9WXLd|5W`v21iV@Gc8Qw(uF#I}uCX$3{#-k`Lh`2tT_84TPD9eIy7Kwy)q0 zeRsniZa@JGCs|Lfq#1A(eb!Z^Cj|;SNNk$(F~zK?yFEvcnyA4CgNrc-V@8g@n&vCO zu)q1)P?dHE{GKF;3JJk&blOM^8y$7@Z>H|WlJ@)hivsyn*zsR+4JcOD*AN<9yljTm z{dRNuzB{0zqW&O5f6Wk(={*c>i6;Y$DgdHtmC`On1L_abGaBaayA{E!Pr&Q@ zan!Vf_XBGhF{X?A1B)JUM=8^P6zPKc-_={HUKR0YyubhM=W+n*z65j(kUktMwX>0P z#_?_E{#RB5s;X>GO&){S$BVUB7>ESoSd%~Vuo0+c-@$o=;=?&tJ822oGnumpSav68atC-enJpRnFML#|zz zobbD>m)b}byIEE*XVRs8Z)28Hxj_eF+rp$v9Uxcq+jHaj+Ex= z2G;MlsTP;_$2L4MHxm!DLx`UdGq9FtnEF9IY(A&)IT%24jFPd z8us}dtbO`K*ovE+dHIbL&=XkC?y}vc;Yr#D)vjwY(hAZg`)+x8gIq(r3@vAm&Skw< z?#kHN-Jci#ySl2^on7=~`qD8eBQ#mgnK@qyrMl$P;3&|(Rc~+adf7l@V`FT>kywU+ zhw0HtwHX{bWz`(9mr)4Y$Q(#`fgatMZLs?!TJb3}lkN6x**sN@!M<|%Abblce{l@Z zGP^X?(#mr92D>dCSU~_s7N#agw;!XKmnN6WhmJ`xVGvo@GT5hGZQ|b7-l$l*zB&q; zn)BQc-8(o)Iyvz$h10OTzLJSsVcx-H4h%|0m7w34_60EiSn#fWkJcW@tk92ju5>m` zPsb_VsIwSRo|)l?&9`FxJGb@ayNcMTD199B$lpw#mVbH$*ypqq0MBm+d@iBfF6nh% z6O^jT;4h1F&(F*I@n*+6o1&j>%H;`~<~e+oUD3{dJqNaYgK>T&Rj9ytN=AtSl}~XFKG8>y2a&cCN`nJa0nc(KDfrkeZnXZK@WN6AgDw zP{+V$RZIQBZ{HxNHDgKp6+Uf65a{5Gn$%!?u==+G@+9JuL79VM29IKTlUZgKvtb_3=XP=bwb8PQ zeyB;eyfXZF^K>X5^_YZ2rjFkB-o1MyP&LHG#T|7LUh2Bu#Kgp6c^nLjkWZHWvU0^b zD$OACjDWmZVpM*IuhS!lKQ}E+FPxvYW%CM*UvywSi|kmaP4UCz=n`Pu$#Y`~L_++< zu$9SBU1akXPTt!>#twe(lA*3#h;@; zksB@Na|OkeJ+8Lb4VD_<5xj43W`47Qw73=9dakHfUPsR+8y#$0=>3R+{E4(!K0v!= zxHQV<^w=;vb5mYz|Yo7Q8uc&z5KhwaU|Xdby^6@`Q9(DNs6FVlIgGUPJ& zRj&?YIFDRYGutM4jg1$V=C9pkpMClq+Os_?)Eh!Lx6W~#<6FT9HBUY|7)-C%B2KmF z;!R|`9uR?Dou7Hg5E)nu%aPo@+uLBL8o6&Zp6oJ2?YGw+TsBtu=$Sj}3{O|hCdMH1 z5Qp4}6}r{7nSXV>g<+PxqbU`hxD~M>;A+>hx~i4J^S+Mg=_S=K4xW*ahcIQKR%)Z7 zm%1dh6|KkRQ-78BQx1CDw;o5WRF}RvOf47_)$K&%R z3N&#fH%03op_9IHOiEav5t>kj*6}BG+nG+|$5mxwT&3{D_X$gC5f?_ZQL&#wy@7OD zzg3@W^{Rr5Ofi?ml-``>F@i<|iCV>Qutb~VLnQlC>$$?!-XagTp(7I4eJS>9AGyYA zQCwa}@1^B0H;!@yJ0v4GkTG(+uDf5R+8mPLRHKz91ze|Ys_w`392=JYtFEpmg_tt^ zA6Zj30iuXTvwV(SY~|`Qm-z?&GmddapOqxT5~oNYU!w5>(EyE&Q&r0eMv2LbVppMohT(IcZ`=#d7!7s9j5VQMp)GDm#^s9g=^6%SE|XJU^*AoX`2dwBdVYY3WNR z&~QjOC*V~dlQ%VbE+h3J2dm17hfd^0y*OZgl`^Zo`Aktkftxtx&zvp1_JVXPeRS{e5NCaF zD2HLxB+0iUzEo{ys*Mr+j99k-!f88a9KKJ=dXW`%DxazP9wBVdhXbyuOMU3SO03o_ItCXd%` zShYGmiDN6JuhJn-sh>ZcU`3qncJPc5rQlK4P01B<&wl&%Z9@$f)2*V55Y~*%Ff$1s zGFVhgS(oAh;#gS3J#%YE#OXW9qZRi`P1qssz|;|UCJ(sd^U$xBy_MjE#EzdZF{SNR zDO9Z{jDRi~n#a!oUl0>&EV_RO8Ax#Hda{e?5I3Dg_ODlVGlD0ZUQMh7A-Q=F?U!A+ z9GE$*_v7zQKCo4n3;eV6LvePMrEm4a<>aiJX=E^>Y~#flqQUOP5<6XZ(}*0ebNpth z=5(d!0Lg$9O{6AM<8%!{9K=Y8cS6UIl9AG|TS0jyr?^(L?kK|HU>BjHoRrM_GywqI zt+v=;HHpkCn4ENChK48JCI9i5TDy+NXzezaJ76_6d@xcsGAzBIBB~3y0T|%}+5_(kyEoN@ntW2R-04ykm7$<<{cn{qF%Bf%hs_KjQDxGHf48TYmgaYB z>X;@T;>sPKu#D5_R#Y``IkP<1BKB!HgTFtKYQUy=bKiD+6q#{yFFIF~%R7#KP|1yx zPqEhO9hCR!#xnm;+A!lx6!qHUg^$0xQEz5!v-kcbb z`(PQn+2nOjwRo|5_LE_tL+QQTdXSg<-F8BV|1z$gfmo_ilCS?vo>|3hOK%dXJIG85 zD>3ZNiAqWNTOrW&rq{ANbN&%%Xu&rno12YJp+F>NWFZsPa`P&hmNbU&962}ZHY>!8 z<=|$sU0Y5D^VL%ou8w;~a|wewE=qVyS)xL++LI39j0)Wf0_xgUv!o+ted^tDu_}GX zhAr;;Q$B07WrF82Q*|5Gas@k!oYD!=kt~^J*a!mtF8kZ#yT=)YQ5)62MLc)Olpk9~ z9PVm#A1&#tetB(zBR{(9KJ7WD%r9}8DoyzseD=v*P(oilu+8Tqv&Y^7xT{q*iM7OQ zx^An+bI^89rQ6R>fA}ztu&#_;5@($XDgVr>p3I6~LNC0n^$!mB1&KLrz{z->6bq|)OwCRtWDNXpnFAOlt zq`UgGfTv`HM%^AJ0*Gx;M7*S#9{kUozonCzRc9AnA$Kw#FCKdar_oQwp8g+;|AI$+ z642&0f2W*zOwDx34m&yfgsPsNz?hgz%+nF*g!ASDQdc=8b=9p46V$}ds0lc(@((o`9YRu}@7_F;pQdumJovd>1z%Qm`27)?^6OhpX za4zFtUivT24+Guw#Qope{=*0UU)%l%-thm8OPreRU-LJA*}oE$Q3C$$=a#g%f>^nT Hk>7s-NNI64 literal 16889 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 diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel_centered_dialog.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel_centered_dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..3689ba9a35b508ec7bfea9688152d3e4ed2bd230 GIT binary patch literal 29308 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 literal 0 HcmV?d00001 diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel_in_dark_mode.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel_in_dark_mode.png deleted file mode 100644 index 98b9210cc189d077731d35ef89408ab45a6fd7a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15053 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 diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel_muted_and_pinned.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_SelectedChannelMenuTest_selected_channel_muted_and_pinned.png new file mode 100644 index 0000000000000000000000000000000000000000..ba734f4654014b57aa5dbf56388d8fc98aee586e GIT binary patch literal 29496 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%0Dm!ASPiI5JK)-MtBvn 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%0A5VB0&0-n`k+ylk0x zQd%3R`tyiz4GaGbUBeej(TD3@&&`u1_e-3~NJwj)wDQbwZ{z#=lFn+^BcDRVl=S9B zlA({DW~r`LUg!$2?9y?dg(~^E*pYmWNr`%wCsz z3o(*24ApS-L@gsvqk93bE^Q*VkM(zJ-*_h1I>e=BFMu5aUJySgAm zf^Iq3B;FXugyCGP&vYi{d!-eig=(Ms2g;kXr@YUd@3FH#0aK+1+xEc+xv6MxF@cTA zdt^yG$2NewXaKI)cuuG-i0i3YID*4twQ#lM`6wbRG{OkBnRiwJWp-d(Z)k-fOGqnH zyeIcL`xZ;m3&)gNrEl2b>5_$10Ew$QNmno!44{xAII-Qs04@_V*h6IMBIJU?;mj-{ z+8X*&Ch3r+dg<))kU93XjM@*$O#mOq4i0`UC*K-xkjJck)hDMgh+pF~X}Kj>Kq}xu zj5uxNv?PJ-Sq5we2A-*oq=;mQ*8qzRq$U@Y!D|{e2q0~m+N0mOb+bN4tZg375t&r9 zZV58`p=W34&g0^cte>C&co3ChN{z-m1?f#tT1*VJtSp0)&Cz00`5d?T%vdhGem6_3 z>*>6MLzzHmMDZLC;J;_qF4o(Rdo70e<4Urm8ZAqcYpKmU6R7===t*FEXm(Uq>9QD< zD3{E$kE5tLINNc{x2dyTRGp`Y+~%hOgbY1_ne;v$%R+1y>S=}oT2&6RO={hpBaEr& ziZ1@#O9MHn6|0Vjz`J<)l7;CjcQa|~)9t2~5igamGjJes|4mCkt!oTX`)fIP$MMW}4wQ#@Fu2_0XJh|_k#95-a! zyj&8+o&Bio5jLPtD3SDq^jKfPT@)}CpfwH#;8Fo7-?e9|)`-PoS(7qoyx0wXQI9q* z@0|`fFmAYCVbf7H}`gaQ-zl5jgd;=Fn^7T-O>yFFYdB4p>{ondvDz z`dgmnX~V~M69IHZDdY_=d$F=|Pyl^LyPqTZw+VGmI(m{7MCbvw6FfVCdF@1Tzsl!*qC2H z@IC*?YtqKTl%+zoLn`S#9_x2X%?Emn&<5R9^?f;o7$mhNP_<&X?1+z{L3Tei_{py^ zcJIJqTcLH-oj;2WPmAspfG{H;E{tYCE5-5M;_$$$0=Pn|;CO1@lfJ5luZ1tZjNg`6 zDkh1$K!Zma3$iV%?Up-KL(w0cllGI7Jt`L@QJ^oWPkrv}x#mNdFk&I4-_C&Xe_W!m z4v$84@g0U%|t^sYufa*!8Va8KWimayl{x9)5J*F?g-uKuxL@o z0Dw7phUyWOkH98k^EgAUdHpLxr9e4gTV+7AV>emQNB;wZB<=a7L}nmZ(1gesu`D27&r{UPtvD`J z!_7Aq&k+*1 z!k+i)i{wc9{e+7F2El4TZ%9`CYD!GHWs}lUjej4J6=7D;wBGq?GWHnPAg#?xd>Z zmdS*MY{Xl<%sIdUPw2a@!`W+WyTdewkFIw(EawMdjy8LvHi75!bw>`K?*{*Tv!MF2 zFELJY-1WiNUW0DlM-ND?;XpfppuE2R?0P^HGf+v6!d$A%3?h;jXYu+N z2qsAsYIbYD8RJEYS`D5@WXqy|0XRtQ;bUhzisIaSAc|}gfE@oup=Ccb*%tjKrS6?W z8R(xJ-B$u4z+y7pq3G|k_IEfw)6_eDk1OG2so8zrx0+i_-76W(_;(WYU_3d^DGfe* z#7{to~|s WHPx-B1pbKmL{?HsqD<_g|NjDl9k7%D literal 0 HcmV?d00001 From 5e8f9ccda85bd51877884525d9b9ebe6fbefdfdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Mon, 25 May 2026 15:36:13 +0100 Subject: [PATCH 3/7] feat(compose): support pinned indicator on the channel list item Adds a PinIndicatorPosition enum mirroring MuteIndicatorPosition, plus a trailing pinIndicatorPosition field on ChannelListConfig so the pin icon can be placed inline with the channel name or at the trailing bottom of the preview row, independent of the mute icon position. The render order in TitleRow is name -> mute -> pin (matching the redesign) and the trailing branch in MessageRow renders mute before pin. The mute/pin icon rendering is extracted into MutedIcon/PinnedIcon helpers and the preview/snapshot config overrides now use CompositionLocalProvider(LocalChatUiConfig) to keep snapshotWithDarkMode's dark-mode flag intact across nested overrides. In the sample, channel pinning becomes a CustomSettings feature flag (isChannelPinningEnabled, default false) toggled from the Custom Login settings panel and consumed by both ChannelsActivity and ChatsActivity. Activities adopt the canonical settings field pattern via private val settings by lazy { customSettings() }. Snapshot baselines: five new ChannelItem tests (pinned only, pinned trailing, muted+pinned both inline, muted+pinned both trailing, mixed) and a refreshed muted_channel_trailing_bottom to fix a pre-existing dark-mode rendering bug exposed by the same nested-ChatTheme issue. Also folds in KDoc cleanup on the muted/pinned param docs added in the previous commit, removing implementation rationale per the engineering principles. --- .../compose/sample/data/CustomSettings.kt | 2 + .../feature/channel/list/ChannelsActivity.kt | 5 +- .../compose/sample/ui/chats/ChatsActivity.kt | 5 +- .../sample/ui/login/CustomLoginActivity.kt | 12 ++ .../src/main/res/values/strings.xml | 2 + .../api/stream-chat-android-compose.api | 31 ++- .../ui/channels/info/SelectedChannelMenu.kt | 20 +- .../compose/ui/channels/list/ChannelItem.kt | 197 ++++++++++++++++-- .../ui/theme/ChatComponentFactoryParams.kt | 5 +- .../android/compose/ui/theme/ChatUiConfig.kt | 13 ++ .../compose/ui/channels/ChannelItemTest.kt | 54 +++-- ...annelItemTest_muted_and_pinned_channel.png | Bin 0 -> 25765 bytes ...ted_and_pinned_channel_mixed_positions.png | Bin 0 -> 25217 bytes ...ted_and_pinned_channel_trailing_bottom.png | Bin 0 -> 24736 bytes ...ItemTest_muted_channel_trailing_bottom.png | Bin 24922 -> 24572 bytes ...hannels_ChannelItemTest_pinned_channel.png | Bin 0 -> 25081 bytes ...temTest_pinned_channel_trailing_bottom.png | Bin 0 -> 24518 bytes 17 files changed, 287 insertions(+), 59 deletions(-) create mode 100644 stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_muted_and_pinned_channel.png create mode 100644 stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_muted_and_pinned_channel_mixed_positions.png create mode 100644 stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_muted_and_pinned_channel_trailing_bottom.png create mode 100644 stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_pinned_channel.png create mode 100644 stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_pinned_channel_trailing_bottom.png diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/data/CustomSettings.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/data/CustomSettings.kt index 3e8b4f4db06..988d380c82a 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/data/CustomSettings.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/data/CustomSettings.kt @@ -33,6 +33,7 @@ class CustomSettings(private val context: Context) { var isAdaptiveLayoutEnabled: Boolean by booleanPref(AdaptiveLayout) + var isChannelPinningEnabled: Boolean by booleanPref(ChannelPinning) var isComposerLinkPreviewEnabled: Boolean by booleanPref(ComposerLinkPreview) var isComposerFloatingStyleEnabled: Boolean by booleanPref(ComposerFloatingStyle) var isSystemAttachmentPickerEnabled: Boolean by booleanPref(SystemAttachmentPicker) @@ -48,6 +49,7 @@ class CustomSettings(private val context: Context) { } private const val AdaptiveLayout = "adaptive_layout" +private const val ChannelPinning = "channel_pinning" private const val ComposerLinkPreview = "composer_link_preview" private const val ComposerFloatingStyle = "composer_floating_style" private const val SystemAttachmentPicker = "system_attachment_picker" diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt index fde65556788..2a1f34f2787 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt @@ -61,6 +61,7 @@ import io.getstream.chat.android.client.api.models.QueryThreadsRequest import io.getstream.chat.android.client.api.state.globalStateFlow import io.getstream.chat.android.compose.sample.ChatHelper import io.getstream.chat.android.compose.sample.R +import io.getstream.chat.android.compose.sample.data.customSettings import io.getstream.chat.android.compose.sample.feature.channel.add.AddChannelActivity import io.getstream.chat.android.compose.sample.feature.channel.add.group.AddGroupChannelActivity import io.getstream.chat.android.compose.sample.feature.channel.isGroupChannel @@ -109,6 +110,8 @@ import kotlinx.coroutines.launch @OptIn(ExperimentalCoroutinesApi::class) class ChannelsActivity : ComponentActivity() { + private val settings by lazy { customSettings() } + /** * The provided predefined filter has the following specs: * @@ -168,7 +171,7 @@ class ChannelsActivity : ComponentActivity() { config = ChatUiConfig( channelList = ChannelListConfig( optionsVisibility = ChannelOptionsVisibility( - isPinChannelVisible = true, + isPinChannelVisible = settings.isChannelPinningEnabled, ), ), ), diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt index 12227003d9f..969458b0231 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt @@ -131,6 +131,8 @@ class ChatsActivity : ComponentActivity() { private val messageId by lazy { intent.getStringExtra(KEY_MESSAGE_ID) } private val parentMessageId by lazy { intent.getStringExtra(KEY_PARENT_MESSAGE_ID) } + private val settings by lazy { customSettings() } + private val channelListViewModelFactory by lazy { val chatClient = ChatClient.instance() val currentUserId = chatClient.getCurrentUser()?.id ?: "" @@ -165,6 +167,7 @@ class ChatsActivity : ComponentActivity() { channelList = ChannelListConfig( optionsVisibility = ChannelOptionsVisibility( isViewInfoVisible = AdaptiveLayoutInfo.singlePaneWindow(), + isPinChannelVisible = settings.isChannelPinningEnabled, ), ), ), @@ -608,7 +611,7 @@ class ChatsActivity : ComponentActivity() { ) = ChannelViewModelFactory( context = applicationContext, channelId = channelId, - composerOptions = ComposerOptions(linkPreviewEnabled = customSettings().isComposerLinkPreviewEnabled), + composerOptions = ComposerOptions(linkPreviewEnabled = settings.isComposerLinkPreviewEnabled), messageId = messageId, parentMessageId = parentMessageId, ) diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/login/CustomLoginActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/login/CustomLoginActivity.kt index f655457b46e..49f47056942 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/login/CustomLoginActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/login/CustomLoginActivity.kt @@ -126,6 +126,9 @@ class CustomLoginActivity : AppCompatActivity() { var userTokenText by remember { mutableStateOf("") } var userNameText by remember { mutableStateOf("") } var isAdaptiveLayoutEnabled by remember { mutableStateOf(settings.isAdaptiveLayoutEnabled) } + var isChannelPinningEnabled by remember { + mutableStateOf(settings.isChannelPinningEnabled) + } var isComposerLinkPreviewEnabled by remember { mutableStateOf(settings.isComposerLinkPreviewEnabled) } @@ -150,6 +153,15 @@ class CustomLoginActivity : AppCompatActivity() { settings.isAdaptiveLayoutEnabled = it }, ), + FeatureFlag( + label = stringResource(R.string.custom_login_flag_channel_pinning_label), + description = stringResource(R.string.custom_login_flag_channel_pinning_description), + value = isChannelPinningEnabled, + onValueChange = { + isChannelPinningEnabled = it + settings.isChannelPinningEnabled = it + }, + ), FeatureFlag( label = stringResource(R.string.custom_login_flag_composer_link_preview_label), description = stringResource( diff --git a/stream-chat-android-compose-sample/src/main/res/values/strings.xml b/stream-chat-android-compose-sample/src/main/res/values/strings.xml index fdb8a887f28..7683bc8327a 100644 --- a/stream-chat-android-compose-sample/src/main/res/values/strings.xml +++ b/stream-chat-android-compose-sample/src/main/res/values/strings.xml @@ -41,6 +41,8 @@ Show link previews in the message composer System attachment picker Use the system\'s native file/media picker + Channel pinning + Show the Pin/Unpin Chat action in the channel options menu Pinned Messages 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 294dc6297cf..33f5c2590a5 100644 --- a/stream-chat-android-compose/api/stream-chat-android-compose.api +++ b/stream-chat-android-compose/api/stream-chat-android-compose.api @@ -903,14 +903,23 @@ public final class io/getstream/chat/android/compose/ui/channels/list/Composable public static final field INSTANCE Lio/getstream/chat/android/compose/ui/channels/list/ComposableSingletons$ChannelItemKt; public fun ()V public final fun getLambda$-1095060318$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$-1232665624$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$-262212850$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$-781924446$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$-851243681$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$1003502438$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$112526037$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$1228594335$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$1334723625$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$1340453964$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$1561934893$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$1593816240$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$1946891593$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$2130050484$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$2144537814$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$230028639$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$468999837$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$481395312$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; public final fun getLambda$633588870$stream_chat_android_compose_release ()Lkotlin/jvm/functions/Function2; } @@ -2896,16 +2905,18 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelItemUnreadC public final class io/getstream/chat/android/compose/ui/theme/ChannelListConfig { public static final field $stable I public fun ()V - public fun (Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition;ZLio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility;)V - public synthetic fun (Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition;ZLio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition;Lio/getstream/chat/android/compose/ui/theme/PinIndicatorPosition;ZLio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility;)V + public synthetic fun (Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition;Lio/getstream/chat/android/compose/ui/theme/PinIndicatorPosition;ZLio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition; - public final fun component2 ()Z - public final fun component3 ()Lio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility; - public final fun copy (Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition;ZLio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility;)Lio/getstream/chat/android/compose/ui/theme/ChannelListConfig; - public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelListConfig;Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition;ZLio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelListConfig; + public final fun component2 ()Lio/getstream/chat/android/compose/ui/theme/PinIndicatorPosition; + public final fun component3 ()Z + public final fun component4 ()Lio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility; + public final fun copy (Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition;Lio/getstream/chat/android/compose/ui/theme/PinIndicatorPosition;ZLio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility;)Lio/getstream/chat/android/compose/ui/theme/ChannelListConfig; + public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelListConfig;Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition;Lio/getstream/chat/android/compose/ui/theme/PinIndicatorPosition;ZLio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelListConfig; public fun equals (Ljava/lang/Object;)Z public final fun getMuteIndicatorPosition ()Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition; public final fun getOptionsVisibility ()Lio/getstream/chat/android/compose/ui/components/channels/ChannelOptionsVisibility; + public final fun getPinIndicatorPosition ()Lio/getstream/chat/android/compose/ui/theme/PinIndicatorPosition; public final fun getSwipeActionsEnabled ()Z public fun hashCode ()I public fun toString ()Ljava/lang/String; @@ -5532,6 +5543,14 @@ public final class io/getstream/chat/android/compose/ui/theme/MuteIndicatorPosit public static fun values ()[Lio/getstream/chat/android/compose/ui/theme/MuteIndicatorPosition; } +public final class io/getstream/chat/android/compose/ui/theme/PinIndicatorPosition : java/lang/Enum { + public static final field InlineTitle Lio/getstream/chat/android/compose/ui/theme/PinIndicatorPosition; + public static final field TrailingBottom Lio/getstream/chat/android/compose/ui/theme/PinIndicatorPosition; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lio/getstream/chat/android/compose/ui/theme/PinIndicatorPosition; + public static fun values ()[Lio/getstream/chat/android/compose/ui/theme/PinIndicatorPosition; +} + public final class io/getstream/chat/android/compose/ui/theme/PinnedMessageListEmptyContentParams { public static final field $stable I public fun ()V diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt index 3021f7a8930..1d8936cb361 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt @@ -72,11 +72,8 @@ import io.getstream.chat.android.ui.common.state.channels.actions.ViewInfo * @param modifier Modifier for styling. * @param shape The shape of the component. * @param overlayColor The color applied to the overlay. - * @param isMuted Whether the channel (or its DM counterpart) is muted. Surfaced as an inline icon - * in the default header. Defaults to `false`; pass `true` when the channel-list row would render - * the muted icon for this channel. - * @param isPinned Whether the channel is pinned. Surfaced as an inline icon in the default header. - * Defaults to `false`; pass `true` when the channel-list row would render the pinned icon. + * @param isMuted Whether the default header renders the muted icon next to the channel name. + * @param isPinned Whether the default header renders the pinned icon next to the channel name. * @param headerContent The content shown at the top of the dialog. * @param centerContent The content shown at the center of the dialog. */ @@ -289,15 +286,14 @@ internal fun SelectedChannelMenuMutedPinned() { } /** - * Renders a [SelectedChannelMenu] over a full-size [Box] using shared sample data, so the - * previews and snapshot tests only have to vary the surface and the two state-icon flags. + * Renders a [SelectedChannelMenu] over a full-size [Box] using preview sample data. * - * @param alignment Where the menu sits inside the parent [Box] (centered vs. bottom sheet). + * @param alignment Vertical alignment of the menu inside the parent [Box]. * @param shape The shape of the menu surface. - * @param modifier Extra modifier applied before `fillMaxWidth`, `wrapContentHeight` and `align` - * are chained on. Used by the centered preview to add outer padding. - * @param isMuted Forwarded to [SelectedChannelMenu] to control the muted-icon visibility in the header. - * @param isPinned Forwarded to [SelectedChannelMenu] to control the pinned-icon visibility in the header. + * @param modifier Modifier applied to the menu, before `fillMaxWidth`, `wrapContentHeight` and + * `align` are chained on. + * @param isMuted Whether the menu header renders the muted icon. + * @param isPinned Whether the menu header renders the pinned icon. */ @Composable private fun SelectedChannelMenuSample( diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/list/ChannelItem.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/list/ChannelItem.kt index e179650a888..ba0908d52b7 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/list/ChannelItem.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/list/ChannelItem.kt @@ -38,6 +38,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.material3.ripple import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -53,6 +54,7 @@ import androidx.compose.ui.unit.dp import io.getstream.chat.android.client.extensions.currentUserUnreadCount import io.getstream.chat.android.client.extensions.getCreatedAtOrNull import io.getstream.chat.android.client.extensions.internal.NEVER +import io.getstream.chat.android.client.extensions.isPinned import io.getstream.chat.android.client.utils.message.isDeleted import io.getstream.chat.android.compose.R import io.getstream.chat.android.compose.state.channels.list.ItemState @@ -69,8 +71,9 @@ import io.getstream.chat.android.compose.ui.theme.ChannelItemTrailingContentPara import io.getstream.chat.android.compose.ui.theme.ChannelItemUnreadCountIndicatorParams import io.getstream.chat.android.compose.ui.theme.ChannelListConfig import io.getstream.chat.android.compose.ui.theme.ChatTheme -import io.getstream.chat.android.compose.ui.theme.ChatUiConfig +import io.getstream.chat.android.compose.ui.theme.LocalChatUiConfig import io.getstream.chat.android.compose.ui.theme.MuteIndicatorPosition +import io.getstream.chat.android.compose.ui.theme.PinIndicatorPosition import io.getstream.chat.android.compose.ui.theme.StreamTokens import io.getstream.chat.android.compose.ui.util.applyIf import io.getstream.chat.android.compose.ui.util.getLastMessage @@ -78,6 +81,7 @@ import io.getstream.chat.android.compose.ui.util.getLastMessageIncludingDeleted import io.getstream.chat.android.compose.ui.util.isOneToOne import io.getstream.chat.android.models.Channel import io.getstream.chat.android.models.DraftMessage +import io.getstream.chat.android.models.Member import io.getstream.chat.android.models.Message import io.getstream.chat.android.models.SyncStatus import io.getstream.chat.android.models.User @@ -255,7 +259,9 @@ private fun TitleRow( ) { val channel = channelItemState.channel val isMuted = channelItemState.isMuted || channelItemState.isUserMuted + val isPinned = channel.isPinned() val mutePosition = ChatTheme.config.channelList.muteIndicatorPosition + val pinPosition = ChatTheme.config.channelList.pinIndicatorPosition Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, @@ -278,14 +284,10 @@ private fun TitleRow( ) if (isMuted && mutePosition == MuteIndicatorPosition.InlineTitle) { - Icon( - modifier = Modifier - .testTag("Stream_ChannelMutedIcon") - .size(16.dp), - painter = painterResource(id = R.drawable.stream_design_ic_mute), - contentDescription = stringResource(R.string.stream_compose_channel_item_muted), - tint = ChatTheme.colors.textTertiary, - ) + MutedIcon() + } + if (isPinned && pinPosition == PinIndicatorPosition.InlineTitle) { + PinnedIcon() } } @@ -324,6 +326,7 @@ private fun MessageRow( val isDirectMessaging = channel.isOneToOne(currentUser) val isLastMessageFromCurrentUser = lastMessage?.user?.id == currentUser?.id val mutePosition = ChatTheme.config.channelList.muteIndicatorPosition + val pinPosition = ChatTheme.config.channelList.pinIndicatorPosition Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, @@ -347,18 +350,38 @@ private fun MessageRow( if ((channelItemState.isMuted || channelItemState.isUserMuted) && mutePosition == MuteIndicatorPosition.TrailingBottom ) { - Icon( - modifier = Modifier - .testTag("Stream_ChannelMutedIcon") - .size(16.dp), - painter = painterResource(id = R.drawable.stream_design_ic_mute), - contentDescription = stringResource(R.string.stream_compose_channel_item_muted), - tint = ChatTheme.colors.textTertiary, - ) + MutedIcon() + } + if (channel.isPinned() && pinPosition == PinIndicatorPosition.TrailingBottom) { + PinnedIcon() } } } +@Composable +private fun MutedIcon() { + Icon( + modifier = Modifier + .testTag("Stream_ChannelMutedIcon") + .size(16.dp), + painter = painterResource(id = R.drawable.stream_design_ic_mute), + contentDescription = stringResource(R.string.stream_compose_channel_item_muted), + tint = ChatTheme.colors.textTertiary, + ) +} + +@Composable +private fun PinnedIcon() { + Icon( + modifier = Modifier + .testTag("Stream_ChannelPinnedIcon") + .size(16.dp), + painter = painterResource(id = R.drawable.stream_design_ic_pin), + contentDescription = stringResource(R.string.stream_compose_channel_item_pinned), + tint = ChatTheme.colors.textTertiary, + ) +} + @Composable private fun RowScope.MessageContent( channelItemState: ItemState.ChannelItemState, @@ -490,21 +513,138 @@ internal fun ChannelItemMuted() { @Preview(showBackground = true) @Composable private fun ChannelItemMutedTrailingBottomPreview() { - ChatTheme( - config = ChatUiConfig( - channelList = ChannelListConfig(muteIndicatorPosition = MuteIndicatorPosition.TrailingBottom), - ), - ) { + ChatTheme { ChannelItemMutedTrailingBottom() } } @Composable internal fun ChannelItemMutedTrailingBottom() { + WithChannelListConfig( + config = ChatTheme.config.channelList.copy( + muteIndicatorPosition = MuteIndicatorPosition.TrailingBottom, + ), + ) { + ChannelItem( + currentUser = PreviewUserData.user1, + channel = PreviewChannelData.channelWithMessages, + isMuted = true, + ) + } +} + +@Preview(showBackground = true) +@Composable +private fun ChannelItemPinnedPreview() { + ChatTheme { + ChannelItemPinned() + } +} + +@Composable +internal fun ChannelItemPinned() { + ChannelItem( + currentUser = PreviewUserData.user1, + channel = PreviewChannelData.channelWithMessages, + isPinned = true, + ) +} + +@Preview(showBackground = true) +@Composable +private fun ChannelItemPinnedTrailingBottomPreview() { + ChatTheme { + ChannelItemPinnedTrailingBottom() + } +} + +@Composable +internal fun ChannelItemPinnedTrailingBottom() { + WithChannelListConfig( + config = ChatTheme.config.channelList.copy( + pinIndicatorPosition = PinIndicatorPosition.TrailingBottom, + ), + ) { + ChannelItem( + currentUser = PreviewUserData.user1, + channel = PreviewChannelData.channelWithMessages, + isPinned = true, + ) + } +} + +@Preview(showBackground = true) +@Composable +private fun ChannelItemMutedPinnedPreview() { + ChatTheme { + ChannelItemMutedPinned() + } +} + +@Composable +internal fun ChannelItemMutedPinned() { ChannelItem( currentUser = PreviewUserData.user1, channel = PreviewChannelData.channelWithMessages, isMuted = true, + isPinned = true, + ) +} + +@Preview(showBackground = true) +@Composable +private fun ChannelItemMutedPinnedTrailingBottomPreview() { + ChatTheme { + ChannelItemMutedPinnedTrailingBottom() + } +} + +@Composable +internal fun ChannelItemMutedPinnedTrailingBottom() { + WithChannelListConfig( + config = ChatTheme.config.channelList.copy( + muteIndicatorPosition = MuteIndicatorPosition.TrailingBottom, + pinIndicatorPosition = PinIndicatorPosition.TrailingBottom, + ), + ) { + ChannelItem( + currentUser = PreviewUserData.user1, + channel = PreviewChannelData.channelWithMessages, + isMuted = true, + isPinned = true, + ) + } +} + +@Preview(showBackground = true) +@Composable +private fun ChannelItemMutedPinnedMixedPreview() { + ChatTheme { + ChannelItemMutedPinnedMixed() + } +} + +@Composable +internal fun ChannelItemMutedPinnedMixed() { + WithChannelListConfig( + config = ChatTheme.config.channelList.copy( + pinIndicatorPosition = PinIndicatorPosition.TrailingBottom, + ), + ) { + ChannelItem( + currentUser = PreviewUserData.user1, + channel = PreviewChannelData.channelWithMessages, + isMuted = true, + isPinned = true, + ) + } +} + +@Composable +private fun WithChannelListConfig(config: ChannelListConfig, content: @Composable () -> Unit) { + CompositionLocalProvider( + LocalChatUiConfig provides ChatTheme.config.copy(channelList = config), + content = content, ) } @@ -635,12 +775,23 @@ private fun ChannelItem( currentUser: User?, channel: Channel, isMuted: Boolean = false, + isPinned: Boolean = false, draftMessage: DraftMessage? = null, isSelected: Boolean = false, ) { + val effectiveChannel = if (isPinned) { + channel.copy( + membership = Member( + user = currentUser ?: PreviewUserData.user1, + pinnedAt = Date(), + ), + ) + } else { + channel + } ChannelItem( channelItem = ItemState.ChannelItemState( - channel = channel, + channel = effectiveChannel, isMuted = isMuted, draftMessage = draftMessage, isSelected = isSelected, diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt index 536ba9e3d0e..7381f8a63a1 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt @@ -1375,9 +1375,8 @@ public data class ChannelAvatarParams( * @param onChannelOptionConfirm Action invoked when a channel option is confirmed. * @param onDismiss Action invoked when the menu is dismissed. * @param modifier Modifier for styling. - * @param isMuted Whether the channel (or its DM counterpart) is muted. Surfaced as an inline icon - * in the menu header. - * @param isPinned Whether the channel is pinned. Surfaced as an inline icon in the menu header. + * @param isMuted Whether the menu header renders the muted icon next to the channel name. + * @param isPinned Whether the menu header renders the pinned icon next to the channel name. */ public data class ChannelMenuParams( val selectedChannel: Channel, diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatUiConfig.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatUiConfig.kt index 91a078dfe5d..7f9b7011b17 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatUiConfig.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatUiConfig.kt @@ -40,15 +40,28 @@ public enum class MuteIndicatorPosition { TrailingBottom, } +/** + * Defines where the pin indicator icon is placed in the channel list item. + */ +public enum class PinIndicatorPosition { + /** Icon appears inline after the channel name in the title row. */ + InlineTitle, + + /** Icon appears at the trailing end of the message/preview row. */ + TrailingBottom, +} + /** * Behavioral configuration for the channel list. * * @param muteIndicatorPosition Where the mute icon is placed in the channel list item. + * @param pinIndicatorPosition Where the pin icon is placed in the channel list item. * @param swipeActionsEnabled Whether swipe-to-reveal actions are enabled on channel list items. * @param optionsVisibility Controls which options are visible in the channel options menu. */ public data class ChannelListConfig( val muteIndicatorPosition: MuteIndicatorPosition = MuteIndicatorPosition.InlineTitle, + val pinIndicatorPosition: PinIndicatorPosition = PinIndicatorPosition.InlineTitle, val swipeActionsEnabled: Boolean = true, val optionsVisibility: ChannelOptionsVisibility = ChannelOptionsVisibility(), ) diff --git a/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/channels/ChannelItemTest.kt b/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/channels/ChannelItemTest.kt index cd19b563952..e8888260e62 100644 --- a/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/channels/ChannelItemTest.kt +++ b/stream-chat-android-compose/src/test/kotlin/io/getstream/chat/android/compose/ui/channels/ChannelItemTest.kt @@ -25,13 +25,14 @@ import io.getstream.chat.android.compose.ui.channels.list.ChannelItemLastMessage import io.getstream.chat.android.compose.ui.channels.list.ChannelItemLastMessageSeenStatus import io.getstream.chat.android.compose.ui.channels.list.ChannelItemLastMessageSentStatus import io.getstream.chat.android.compose.ui.channels.list.ChannelItemMuted +import io.getstream.chat.android.compose.ui.channels.list.ChannelItemMutedPinned +import io.getstream.chat.android.compose.ui.channels.list.ChannelItemMutedPinnedMixed +import io.getstream.chat.android.compose.ui.channels.list.ChannelItemMutedPinnedTrailingBottom import io.getstream.chat.android.compose.ui.channels.list.ChannelItemMutedTrailingBottom import io.getstream.chat.android.compose.ui.channels.list.ChannelItemNoMessages +import io.getstream.chat.android.compose.ui.channels.list.ChannelItemPinned +import io.getstream.chat.android.compose.ui.channels.list.ChannelItemPinnedTrailingBottom import io.getstream.chat.android.compose.ui.channels.list.ChannelItemUnreadMessages -import io.getstream.chat.android.compose.ui.theme.ChannelListConfig -import io.getstream.chat.android.compose.ui.theme.ChatTheme -import io.getstream.chat.android.compose.ui.theme.ChatUiConfig -import io.getstream.chat.android.compose.ui.theme.MuteIndicatorPosition import org.junit.Rule import org.junit.Test @@ -57,15 +58,42 @@ internal class ChannelItemTest : PaparazziComposeTest { @Test fun `muted channel trailing bottom`() { snapshotWithDarkMode { - ChatTheme( - config = ChatUiConfig( - channelList = ChannelListConfig( - muteIndicatorPosition = MuteIndicatorPosition.TrailingBottom, - ), - ), - ) { - ChannelItemMutedTrailingBottom() - } + ChannelItemMutedTrailingBottom() + } + } + + @Test + fun `pinned channel`() { + snapshotWithDarkMode { + ChannelItemPinned() + } + } + + @Test + fun `pinned channel trailing bottom`() { + snapshotWithDarkMode { + ChannelItemPinnedTrailingBottom() + } + } + + @Test + fun `muted and pinned channel`() { + snapshotWithDarkMode { + ChannelItemMutedPinned() + } + } + + @Test + fun `muted and pinned channel trailing bottom`() { + snapshotWithDarkMode { + ChannelItemMutedPinnedTrailingBottom() + } + } + + @Test + fun `muted and pinned channel mixed positions`() { + snapshotWithDarkMode { + ChannelItemMutedPinnedMixed() } } diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_muted_and_pinned_channel.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_muted_and_pinned_channel.png new file mode 100644 index 0000000000000000000000000000000000000000..a4f6cc0ba41dc75b6ec3426e5f1d81ab06a49169 GIT binary patch literal 25765 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 literal 24922 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 SQ@KW)4%@`Y!VshH8vSn&5&sPU diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_pinned_channel.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_pinned_channel.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd16b13995526b3ea6d7d2e6c17b7953b47b3ac GIT binary patch literal 25081 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 z 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 bu>1RX*g@i#gTO^nz{lLg#< Date: Mon, 25 May 2026 15:41:50 +0100 Subject: [PATCH 4/7] feat(compose-sample): sort pinned channels to top in the channel list Composes the existing last_updated sort with a leading desc("pinned_at") in both ChannelsActivity and ChatsActivity so pinned channels surface at the top of the channel list while unpinned channels keep their recent-activity ordering. Acts as the recipe integrators can mirror to enable pinned-first sorting without a SDK-default change. --- .../chat/android/compose/sample/ui/chats/ChatsActivity.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt index 969458b0231..6805a97cdd2 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt @@ -138,7 +138,9 @@ class ChatsActivity : ComponentActivity() { val currentUserId = chatClient.getCurrentUser()?.id ?: "" ChannelListViewModelFactory( chatClient = chatClient, - querySort = QuerySortByField.descByName("last_updated"), + querySort = QuerySortByField() + .desc("pinned_at") + .desc("last_updated"), filters = Filters.and( Filters.eq("type", "messaging"), Filters.`in`("members", listOf(currentUserId)), From 90b4888e884789c0aa57be9e11f29dc78d2cfffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Mon, 25 May 2026 16:01:24 +0100 Subject: [PATCH 5/7] refactor(compose): deprecate unused isMuted on buildDefaultChannelActions Adds a new public overload of buildDefaultChannelActions without the isMuted parameter and marks the previous five-arg overload @Deprecated with a ReplaceWith quick-fix. The parameter was received but never read by either the DM or group action builders. ChannelsScreen, the sample ChannelsActivity, and the docs example are updated to call the new overload so the SDK does not dogfood the deprecated API. --- .../feature/channel/list/ChannelsActivity.kt | 1 - .../api/stream-chat-android-compose.api | 1 + .../compose/ui/channels/ChannelsScreen.kt | 1 - .../ui/components/channels/ChannelOptions.kt | 36 +++++++++++++++++-- .../compose/channels/SelectedChannelMenu.kt | 3 -- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt index 2a1f34f2787..37abdeebe22 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt @@ -362,7 +362,6 @@ class ChannelsActivity : ComponentActivity() { if (selectedChannel != null) { val channelActions = buildDefaultChannelActions( selectedChannel = selectedChannel, - isMuted = channelsViewModel.isChannelMuted(selectedChannel.cid), ownCapabilities = selectedChannel.ownCapabilities, viewModel = channelsViewModel, onViewInfoAction = ::viewChannelInfo, 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 33f5c2590a5..2b422825fa5 100644 --- a/stream-chat-android-compose/api/stream-chat-android-compose.api +++ b/stream-chat-android-compose/api/stream-chat-android-compose.api @@ -1220,6 +1220,7 @@ public final class io/getstream/chat/android/compose/ui/components/channels/Chan public final class io/getstream/chat/android/compose/ui/components/channels/ChannelOptionsKt { public static final fun ChannelOptions (Ljava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V + public static final fun buildDefaultChannelActions (Lio/getstream/chat/android/models/Channel;Ljava/util/Set;Lio/getstream/chat/android/compose/viewmodel/channels/ChannelListViewModel;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Ljava/util/List; public static final fun buildDefaultChannelActions (Lio/getstream/chat/android/models/Channel;ZLjava/util/Set;Lio/getstream/chat/android/compose/viewmodel/channels/ChannelListViewModel;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Ljava/util/List; } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt index 2e64b70a7ba..066a78f239d 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt @@ -212,7 +212,6 @@ public fun ChannelsScreen( (dmCounterpartId != null && listViewModel.isUserMuted(dmCounterpartId)) val channelActions = buildDefaultChannelActions( selectedChannel = channel, - isMuted = isMuted, ownCapabilities = channel.ownCapabilities, viewModel = listViewModel, onViewInfoAction = { ch -> diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt index 1ee5dda778c..fb905751916 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/components/channels/ChannelOptions.kt @@ -103,17 +103,14 @@ public fun ChannelOptions( * [ChannelOptionsVisibility.isArchiveChannelVisible] respectively. * * @param selectedChannel The currently selected channel. - * @param isMuted If the channel is muted or not. * @param ownCapabilities Set of capabilities the user is given for the current channel. * @param viewModel The [ChannelListViewModel] to bind action handlers to. * @param onViewInfoAction Handler invoked when the user selects the "View Info" action. * @return The list of channel actions to display. */ -@Suppress("LongMethod", "LongParameterList") @Composable public fun buildDefaultChannelActions( selectedChannel: Channel, - isMuted: Boolean, ownCapabilities: Set, viewModel: ChannelListViewModel, onViewInfoAction: (Channel) -> Unit, @@ -148,6 +145,39 @@ public fun buildDefaultChannelActions( } } +/** + * Deprecated overload that forwarded an `isMuted` argument never read by the action builders. Use + * the overload without `isMuted` instead. + * + * @param selectedChannel The currently selected channel. + * @param isMuted Unused. Kept for source compatibility; the value is ignored. + * @param ownCapabilities Set of capabilities the user is given for the current channel. + * @param viewModel The [ChannelListViewModel] to bind action handlers to. + * @param onViewInfoAction Handler invoked when the user selects the "View Info" action. + * @return The list of channel actions to display. + */ +@Deprecated( + message = "The isMuted parameter is unused and will be removed in a future release.", + replaceWith = ReplaceWith( + "buildDefaultChannelActions(selectedChannel, ownCapabilities, viewModel, onViewInfoAction)", + ), + level = DeprecationLevel.WARNING, +) +@Suppress("UNUSED_PARAMETER", "LongParameterList") +@Composable +public fun buildDefaultChannelActions( + selectedChannel: Channel, + isMuted: Boolean, + ownCapabilities: Set, + viewModel: ChannelListViewModel, + onViewInfoAction: (Channel) -> Unit, +): List = buildDefaultChannelActions( + selectedChannel = selectedChannel, + ownCapabilities = ownCapabilities, + viewModel = viewModel, + onViewInfoAction = onViewInfoAction, +) + /** * Builds channel actions for DM (1-to-1) channels. * Shows: View Info, Pin/Unpin Chat, Mute/Unmute User, Block/Unblock User, Archive/Unarchive Chat, Delete Chat. diff --git a/stream-chat-android-docs/src/main/kotlin/io/getstream/chat/docs/kotlin/compose/channels/SelectedChannelMenu.kt b/stream-chat-android-docs/src/main/kotlin/io/getstream/chat/docs/kotlin/compose/channels/SelectedChannelMenu.kt index 061d1250e92..832200930a3 100644 --- a/stream-chat-android-docs/src/main/kotlin/io/getstream/chat/docs/kotlin/compose/channels/SelectedChannelMenu.kt +++ b/stream-chat-android-docs/src/main/kotlin/io/getstream/chat/docs/kotlin/compose/channels/SelectedChannelMenu.kt @@ -46,7 +46,6 @@ private object SelectedChannelMenuUsageSnippet { if (currentlySelectedChannel != null) { val channelActions = buildDefaultChannelActions( selectedChannel = currentlySelectedChannel, - isMuted = listViewModel.isChannelMuted(currentlySelectedChannel.cid), ownCapabilities = currentlySelectedChannel.ownCapabilities, viewModel = listViewModel, onViewInfoAction = {}, @@ -94,7 +93,6 @@ private object SelectedChannelMenuHandlingActionsSnippet { if (currentlySelectedChannel != null) { val channelActions = buildDefaultChannelActions( selectedChannel = currentlySelectedChannel, - isMuted = listViewModel.isChannelMuted(currentlySelectedChannel.cid), ownCapabilities = currentlySelectedChannel.ownCapabilities, viewModel = listViewModel, onViewInfoAction = { channel -> @@ -146,7 +144,6 @@ private object SelectedChannelMenuCustomizationSnippet { if (currentlySelectedChannel != null) { val channelActions = buildDefaultChannelActions( selectedChannel = currentlySelectedChannel, - isMuted = listViewModel.isChannelMuted(currentlySelectedChannel.cid), ownCapabilities = currentlySelectedChannel.ownCapabilities, viewModel = listViewModel, onViewInfoAction = {}, From 652df4440f074b319c595073190ef609c34717aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Wed, 27 May 2026 14:57:43 +0100 Subject: [PATCH 6/7] refactor(compose): derive muted/pinned icon state inside the menu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drops the isMuted/isPinned params on ChannelMenuParams, ChannelMenuHeaderContentParams, and SelectedChannelMenu. The default header now derives the pinned state from selectedChannel.isPinned() and the muted state from currentUser.channelMutes (channel-level) and currentUser.mutes (DM-counterpart) via a private helper. ChannelsScreen reverts to its pre-PR shape — no OR computation, no flags on the params. Addresses the review concern that isMuted was ambiguous (channel vs. user mute) and that both flags duplicate state the menu already has via selectedChannel + currentUser. Net effect on the public API vs. develop is zero new fields on the params data classes for icon state. --- .../api/stream-chat-android-compose.api | 26 +++---- .../compose/ui/channels/ChannelsScreen.kt | 7 -- .../ui/channels/info/SelectedChannelMenu.kt | 72 ++++++++++++------- .../compose/ui/theme/ChatComponentFactory.kt | 4 -- .../ui/theme/ChatComponentFactoryParams.kt | 8 --- 5 files changed, 55 insertions(+), 62 deletions(-) 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 2b422825fa5..edbc38ca227 100644 --- a/stream-chat-android-compose/api/stream-chat-android-compose.api +++ b/stream-chat-android-compose/api/stream-chat-android-compose.api @@ -887,7 +887,7 @@ public final class io/getstream/chat/android/compose/ui/channels/info/Composable } public final class io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenuKt { - public static final fun SelectedChannelMenu-j30j4ZQ (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JZZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final fun SelectedChannelMenu-Ic2awPA (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V } public final class io/getstream/chat/android/compose/ui/channels/list/ChannelItemKt { @@ -3253,22 +3253,18 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelMenuCenterC public final class io/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams { public static final field $stable I - public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ZZ)V - public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;)V + public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lio/getstream/chat/android/models/Channel; public final fun component2 ()Lio/getstream/chat/android/models/User; public final fun component3 ()Landroidx/compose/ui/Modifier; - public final fun component4 ()Z - public final fun component5 ()Z - public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ZZ)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams; - public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ZZILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams; + public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams; + public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Landroidx/compose/ui/Modifier;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuHeaderContentParams; public fun equals (Ljava/lang/Object;)Z public final fun getCurrentUser ()Lio/getstream/chat/android/models/User; public final fun getModifier ()Landroidx/compose/ui/Modifier; public final fun getSelectedChannel ()Lio/getstream/chat/android/models/Channel; public fun hashCode ()I - public final fun isMuted ()Z - public final fun isPinned ()Z public fun toString ()Ljava/lang/String; } @@ -3291,18 +3287,16 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelMenuOptions public final class io/getstream/chat/android/compose/ui/theme/ChannelMenuParams { public static final field $stable I - public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZ)V - public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;)V + public synthetic fun (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lio/getstream/chat/android/models/Channel; public final fun component2 ()Lio/getstream/chat/android/models/User; public final fun component3 ()Ljava/util/List; public final fun component4 ()Lkotlin/jvm/functions/Function1; public final fun component5 ()Lkotlin/jvm/functions/Function0; public final fun component6 ()Landroidx/compose/ui/Modifier; - public final fun component7 ()Z - public final fun component8 ()Z - public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZ)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams; - public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams; + public final fun copy (Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams; + public static synthetic fun copy$default (Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams;Lio/getstream/chat/android/models/Channel;Lio/getstream/chat/android/models/User;Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ILjava/lang/Object;)Lio/getstream/chat/android/compose/ui/theme/ChannelMenuParams; public fun equals (Ljava/lang/Object;)Z public final fun getChannelActions ()Ljava/util/List; public final fun getCurrentUser ()Lio/getstream/chat/android/models/User; @@ -3311,8 +3305,6 @@ public final class io/getstream/chat/android/compose/ui/theme/ChannelMenuParams public final fun getOnDismiss ()Lkotlin/jvm/functions/Function0; public final fun getSelectedChannel ()Lio/getstream/chat/android/models/Channel; public fun hashCode ()I - public final fun isMuted ()Z - public final fun isPinned ()Z public fun toString ()Ljava/lang/String; } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt index 066a78f239d..e2a07692642 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/ChannelsScreen.kt @@ -45,7 +45,6 @@ import androidx.compose.ui.semantics.paneTitle import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel -import io.getstream.chat.android.client.extensions.isPinned import io.getstream.chat.android.compose.state.channels.list.SearchQuery import io.getstream.chat.android.compose.ui.channels.list.ChannelList import io.getstream.chat.android.compose.ui.components.SimpleDialog @@ -55,7 +54,6 @@ import io.getstream.chat.android.compose.ui.theme.ChannelListSearchInputParams import io.getstream.chat.android.compose.ui.theme.ChannelMenuParams import io.getstream.chat.android.compose.ui.theme.ChatTheme import io.getstream.chat.android.compose.ui.theme.StreamTokens -import io.getstream.chat.android.compose.ui.util.dmCounterpartId import io.getstream.chat.android.compose.viewmodel.channels.ChannelListViewModel import io.getstream.chat.android.compose.viewmodel.channels.ChannelListViewModelFactory import io.getstream.chat.android.models.Channel @@ -207,9 +205,6 @@ public fun ChannelsScreen( exit = fadeOut(animationSpec = tween(durationMillis = AnimationConstants.DefaultDurationMillis / 2)), ) { val channel = lastChannel.value - val dmCounterpartId = channel.dmCounterpartId(user) - val isMuted = listViewModel.isChannelMuted(channel.cid) || - (dmCounterpartId != null && listViewModel.isUserMuted(dmCounterpartId)) val channelActions = buildDefaultChannelActions( selectedChannel = channel, ownCapabilities = channel.ownCapabilities, @@ -244,8 +239,6 @@ public fun ChannelsScreen( } }, onDismiss = remember(listViewModel) { { listViewModel.dismissChannelAction() } }, - isMuted = isMuted, - isPinned = channel.isPinned(), ), ) } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt index 1d8936cb361..2e8815ae627 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/channels/info/SelectedChannelMenu.kt @@ -43,6 +43,8 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import io.getstream.chat.android.client.extensions.isMutedFor +import io.getstream.chat.android.client.extensions.isPinned import io.getstream.chat.android.compose.R import io.getstream.chat.android.compose.ui.components.SimpleMenu import io.getstream.chat.android.compose.ui.components.avatar.AvatarSize @@ -51,13 +53,17 @@ import io.getstream.chat.android.compose.ui.theme.ChannelMenuCenterContentParams import io.getstream.chat.android.compose.ui.theme.ChannelMenuHeaderContentParams import io.getstream.chat.android.compose.ui.theme.ChatTheme import io.getstream.chat.android.compose.ui.theme.StreamTokens +import io.getstream.chat.android.compose.ui.util.dmCounterpartId import io.getstream.chat.android.compose.ui.util.getMembersStatusText import io.getstream.chat.android.models.Channel +import io.getstream.chat.android.models.ChannelMute +import io.getstream.chat.android.models.Member import io.getstream.chat.android.models.User import io.getstream.chat.android.previewdata.PreviewChannelData import io.getstream.chat.android.previewdata.PreviewUserData import io.getstream.chat.android.ui.common.state.channels.actions.ChannelAction import io.getstream.chat.android.ui.common.state.channels.actions.ViewInfo +import java.util.Date /** * Shows special UI when an item is selected. @@ -72,8 +78,6 @@ import io.getstream.chat.android.ui.common.state.channels.actions.ViewInfo * @param modifier Modifier for styling. * @param shape The shape of the component. * @param overlayColor The color applied to the overlay. - * @param isMuted Whether the default header renders the muted icon next to the channel name. - * @param isPinned Whether the default header renders the pinned icon next to the channel name. * @param headerContent The content shown at the top of the dialog. * @param centerContent The content shown at the center of the dialog. */ @@ -87,16 +91,12 @@ public fun SelectedChannelMenu( modifier: Modifier = Modifier, shape: Shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), overlayColor: Color = ChatTheme.colors.backgroundCoreScrim, - isMuted: Boolean = false, - isPinned: Boolean = false, headerContent: @Composable ColumnScope.() -> Unit = { with(ChatTheme.componentFactory) { ChannelMenuHeaderContent( params = ChannelMenuHeaderContentParams( selectedChannel = selectedChannel, currentUser = currentUser, - isMuted = isMuted, - isPinned = isPinned, ), ) } @@ -125,18 +125,19 @@ public fun SelectedChannelMenu( /** * Represents the default content shown at the top of [SelectedChannelMenu] dialog. * + * Renders inline muted and pinned icons next to the channel name based on the channel's pin state + * and the current user's mute settings. When [currentUser] is `null`, no state icons are rendered. + * * @param selectedChannel The channel the user selected. * @param currentUser The currently logged-in user data. - * @param isMuted Whether to render the muted icon inline with the channel name. - * @param isPinned Whether to render the pinned icon inline with the channel name. */ @Composable internal fun DefaultSelectedChannelMenuHeaderContent( selectedChannel: Channel, currentUser: User?, - isMuted: Boolean = false, - isPinned: Boolean = false, ) { + val showPinnedIcon = selectedChannel.isPinned() + val showMutedIcon = currentUser != null && isChannelOrCounterpartMuted(selectedChannel, currentUser) Row( modifier = Modifier .fillMaxWidth() @@ -165,8 +166,8 @@ internal fun DefaultSelectedChannelMenuHeaderContent( HeaderTitleRow( selectedChannel = selectedChannel, currentUser = currentUser, - isMuted = isMuted, - isPinned = isPinned, + showMutedIcon = showMutedIcon, + showPinnedIcon = showPinnedIcon, ) Text( text = selectedChannel.getMembersStatusText( @@ -182,12 +183,18 @@ internal fun DefaultSelectedChannelMenuHeaderContent( } } +private fun isChannelOrCounterpartMuted(channel: Channel, currentUser: User): Boolean { + if (channel.isMutedFor(currentUser)) return true + val otherUserId = channel.dmCounterpartId(currentUser) ?: return false + return currentUser.mutes.any { it.target?.id == otherUserId } +} + @Composable private fun HeaderTitleRow( selectedChannel: Channel, currentUser: User?, - isMuted: Boolean, - isPinned: Boolean, + showMutedIcon: Boolean, + showPinnedIcon: Boolean, ) { Row( verticalAlignment = Alignment.CenterVertically, @@ -201,14 +208,14 @@ private fun HeaderTitleRow( maxLines = 1, overflow = TextOverflow.Ellipsis, ) - if (isMuted) { + if (showMutedIcon) { HeaderStateIcon( iconRes = R.drawable.stream_design_ic_mute, contentDescriptionRes = R.string.stream_compose_channel_item_muted, testTag = "Stream_ChannelMenuHeaderMutedIcon", ) } - if (isPinned) { + if (showPinnedIcon) { HeaderStateIcon( iconRes = R.drawable.stream_design_ic_pin, contentDescriptionRes = R.string.stream_compose_channel_item_pinned, @@ -277,11 +284,26 @@ private fun SelectedChannelMenuMutedPinnedPreview() { @Composable internal fun SelectedChannelMenuMutedPinned() { + val baseChannel = PreviewChannelData.channelWithManyMembers + val pinnedChannel = baseChannel.copy( + membership = Member(user = PreviewUserData.user1, pinnedAt = Date()), + ) + val mutedUser = PreviewUserData.user1.copy( + channelMutes = listOf( + ChannelMute( + user = PreviewUserData.user1, + channel = pinnedChannel, + createdAt = Date(), + updatedAt = Date(), + expires = null, + ), + ), + ) SelectedChannelMenuSample( alignment = Alignment.BottomCenter, shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), - isMuted = true, - isPinned = true, + channel = pinnedChannel, + currentUser = mutedUser, ) } @@ -292,19 +314,19 @@ internal fun SelectedChannelMenuMutedPinned() { * @param shape The shape of the menu surface. * @param modifier Modifier applied to the menu, before `fillMaxWidth`, `wrapContentHeight` and * `align` are chained on. - * @param isMuted Whether the menu header renders the muted icon. - * @param isPinned Whether the menu header renders the pinned icon. + * @param channel The channel rendered in the menu. + * @param currentUser The user used to resolve member status text and to derive the inline state + * icons (muted, pinned) in the default header. */ @Composable private fun SelectedChannelMenuSample( alignment: Alignment, shape: Shape, modifier: Modifier = Modifier, - isMuted: Boolean = false, - isPinned: Boolean = false, + channel: Channel = PreviewChannelData.channelWithManyMembers, + currentUser: User? = PreviewUserData.user1, ) { Box(modifier = Modifier.fillMaxSize()) { - val channel = PreviewChannelData.channelWithManyMembers SelectedChannelMenu( modifier = modifier .fillMaxWidth() @@ -312,14 +334,12 @@ private fun SelectedChannelMenuSample( .align(alignment), shape = shape, selectedChannel = channel, - currentUser = PreviewUserData.user1, + currentUser = currentUser, channelActions = listOf( ViewInfo(channel = channel, label = "Channel Info", onAction = {}), ), onChannelOptionConfirm = {}, onDismiss = {}, - isMuted = isMuted, - isPinned = isPinned, ) } } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt index 0b66e9e2bc1..2a96eaae2c2 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactory.kt @@ -1805,8 +1805,6 @@ public interface ChatComponentFactory { channelActions = params.channelActions, onChannelOptionConfirm = params.onChannelOptionConfirm, onDismiss = params.onDismiss, - isMuted = params.isMuted, - isPinned = params.isPinned, ) } @@ -1820,8 +1818,6 @@ public interface ChatComponentFactory { DefaultSelectedChannelMenuHeaderContent( selectedChannel = params.selectedChannel, currentUser = params.currentUser, - isMuted = params.isMuted, - isPinned = params.isPinned, ) } diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt index 7381f8a63a1..0da471b28a3 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/theme/ChatComponentFactoryParams.kt @@ -1375,8 +1375,6 @@ public data class ChannelAvatarParams( * @param onChannelOptionConfirm Action invoked when a channel option is confirmed. * @param onDismiss Action invoked when the menu is dismissed. * @param modifier Modifier for styling. - * @param isMuted Whether the menu header renders the muted icon next to the channel name. - * @param isPinned Whether the menu header renders the pinned icon next to the channel name. */ public data class ChannelMenuParams( val selectedChannel: Channel, @@ -1385,8 +1383,6 @@ public data class ChannelMenuParams( val onChannelOptionConfirm: (ChannelAction) -> Unit, val onDismiss: () -> Unit, val modifier: Modifier = Modifier, - val isMuted: Boolean = false, - val isPinned: Boolean = false, ) /** @@ -1395,15 +1391,11 @@ public data class ChannelMenuParams( * @param selectedChannel The selected channel. * @param currentUser The currently logged in user. * @param modifier Modifier for styling. - * @param isMuted Whether to render the muted icon inline with the channel name. - * @param isPinned Whether to render the pinned icon inline with the channel name. */ public data class ChannelMenuHeaderContentParams( val selectedChannel: Channel, val currentUser: User?, val modifier: Modifier = Modifier, - val isMuted: Boolean = false, - val isPinned: Boolean = false, ) /** From 06a42cd3d1dce45858573b310fe9bf78704000a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Mion?= Date: Thu, 28 May 2026 09:01:35 +0100 Subject: [PATCH 7/7] refactor(compose-sample): use the predefined filter in ChatsActivity Aligns ChatsActivity with ChannelsActivity by using the android_sample_filter predefined filter (which already sorts pinned channels to the top server-side) instead of an inline filter + client querySort. Drops the now-unused CHANNEL_ARG_DRAFT, Filters, and QuerySortByField imports from ChatsActivity. Also updates the channelsViewModelFactory KDoc in ChannelsActivity to reflect the actual sort applied by the predefined filter (QuerySortByField().desc("pinned_at").desc("last_updated")). --- .../feature/channel/list/ChannelsActivity.kt | 2 +- .../compose/sample/ui/chats/ChatsActivity.kt | 31 +++++++++++++------ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt index 37abdeebe22..2c465c2bf82 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/feature/channel/list/ChannelsActivity.kt @@ -126,7 +126,7 @@ class ChannelsActivity : ComponentActivity() { * * **Sort:** * ``` - * QuerySortByField.descByName("last_updated") + * QuerySortByField().desc("pinned_at").desc("last_updated") * ``` */ private val channelsViewModelFactory by lazy { diff --git a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt index 6805a97cdd2..dcc5857f091 100644 --- a/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt +++ b/stream-chat-android-compose-sample/src/main/java/io/getstream/chat/android/compose/sample/ui/chats/ChatsActivity.kt @@ -51,7 +51,6 @@ import io.getstream.chat.android.client.api.state.globalStateFlow import io.getstream.chat.android.compose.sample.ChatHelper import io.getstream.chat.android.compose.sample.R import io.getstream.chat.android.compose.sample.data.customSettings -import io.getstream.chat.android.compose.sample.feature.channel.ChannelConstants.CHANNEL_ARG_DRAFT import io.getstream.chat.android.compose.sample.feature.channel.add.AddChannelActivity import io.getstream.chat.android.compose.sample.feature.channel.isGroupChannel import io.getstream.chat.android.compose.sample.feature.channel.list.CustomChatEventHandlerFactory @@ -92,9 +91,7 @@ import io.getstream.chat.android.compose.viewmodel.pinned.PinnedMessageListViewM import io.getstream.chat.android.compose.viewmodel.pinned.PinnedMessageListViewModelFactory import io.getstream.chat.android.models.AttachmentType import io.getstream.chat.android.models.Channel -import io.getstream.chat.android.models.Filters import io.getstream.chat.android.models.Message -import io.getstream.chat.android.models.querysort.QuerySortByField import io.getstream.chat.android.ui.common.feature.channel.attachments.ChannelAttachmentsViewEvent import io.getstream.chat.android.ui.common.feature.channel.info.ChannelInfoViewEvent import io.getstream.chat.android.ui.common.state.channel.info.ChannelInfoViewState @@ -133,18 +130,32 @@ class ChatsActivity : ComponentActivity() { private val settings by lazy { customSettings() } + /** + * The provided predefined filter has the following specs: + * + * **Filter:** + * ``` + * Filters.and( + * Filters.eq("type", "messaging"), + * Filters.`in`("members", listOf(currentUserId)), + * Filters.or(Filters.notExists("draft"), Filters.eq("draft", false)), + * ) + * ``` + * + * **Sort:** + * ``` + * QuerySortByField().desc("pinned_at").desc("last_updated") + * ``` + */ private val channelListViewModelFactory by lazy { val chatClient = ChatClient.instance() val currentUserId = chatClient.getCurrentUser()?.id ?: "" ChannelListViewModelFactory( chatClient = chatClient, - querySort = QuerySortByField() - .desc("pinned_at") - .desc("last_updated"), - filters = Filters.and( - Filters.eq("type", "messaging"), - Filters.`in`("members", listOf(currentUserId)), - Filters.or(Filters.notExists(CHANNEL_ARG_DRAFT), Filters.eq(CHANNEL_ARG_DRAFT, false)), + predefinedFilterName = "android_sample_filter", + filterValues = mapOf( + "channel_type" to "messaging", + "user_id" to currentUserId, ), chatEventHandlerFactory = CustomChatEventHandlerFactory(), )

3|fJ%l|>IQSn)_x2_KMS&UQ5nyiCkN>3+Uvx4x>alhSYVrl1)!9`f55A_slw4P1L zCFciLlebbLH1f~UPlL^@>dr#_(%DxzSU|NSbl#Dtf8W0K#Xkq5Y3akg@@X^qHE46uSgz1jmq8#T_B;Rtzg*5g#6sMlB>9l*=(B?l&SF%HXbuq$-LQW?Po=FA4CGWT=I2-U*Ki4^`7-3@b^GZEp9;)-_loP z@^F3E{>M-)xQ`%V!0ViM4tLg*Y|lqtct|U;qTsVU*ogtB_vVF_w2%#mNyq({Eq|ZU zwf(JhQ6Ox#-yyQs%ZLe#SiTnl~PRP?p17F zZc>hbovIRtTue27pxYaH?S|Q{(W0_ePKJ`qk;nprk%D6X{lgp8c{iSFx18;LqmTSa zzVfOVrh@NRV(c&Ac4q@CQ+=c;pTh8 zxbX$DtIo8Jg_3W^YZs@sec`~xkGqTJVQVjUZ{{W~F5^~-&PL)_%(m4CMnz59D;9#U zt2SUo2RC3NEt}9UU*u+N(>NL95|oZLofuAlXz5ecHbd9=7}-?yZc9{&VeNKIhQNmC z%`*40m54&$mwYCzR(6FuV6Nzaxh(W2?%D@AyOTI)S{QnPF{x{(1rZS zkZkI*bO!(_pHDr>^su>jpAD*~mDHs3^0pf@s1~-x`hBWB>4810*SBR9%%x?-puM&; z^D^q$DA2pH(IytyUI=4r-{W(X;n~C?tEf?z#G_n)i+QzV>&b|k@9V49)(Q&06U7l| zEy!Yjjy!DTf5JQeQxk9bn|ERbZjf_k=8ex z7=Q)UF;Ah>Seyw>HTH|R^~t<+=IDs}8}zu9ne6sRDKZY8_67|1RLlo2b0mk4@5;H%4LD`e* zZ%q5bL^Fh5n)Z(N@WQUYBd3;dL|!)4}k?a@QV6b^z3ltJRAa?DvbZ73C(M`Wt zd5wSI?)fgyK(6PN$8)-dr+8!gbN&tCTWh-qH~bXU^COy|QVos3jz<#Ws*|$_WT)=p zij|Z3--9vYn7G6&CcKF50v3JPkU+MqTk4EcX#`MfwAG$l3b9YpRJns=+l^fHL&f}k z1N65_ZL1p-sY|N>wYt*DZG43UGV-LvsuL(JNCD9vlAvN#8OxR7x?a*C4a%6YxlFi- zp$ePzhUp}AnSGm&u!Zo|08u0ogw`iUo+Ms%PdsFiQgmC5 zJ|O4m>T;|7Lp+VIW5+vVR}1n`y5_7;eO{81AOOn{t)UKrc9lYcd^74dYwr}0RZK)& z%8ur7$sfZcy?lZ{zWE%&U})XgvtvNhTgeXc(T3Qi=cVRlu(tM)a&PDv5-|cT87v4w zV#Zzl=6B(8vTXc|1^64)RUZXYje~GicHOm;9GL}g=#O>RZEQS`EEoC`FIA5SIn(+M z^ZRg-u})99?UZ7L6Xcbx(PgX3+)8a{Ub7e{-fpea&fr0SFb3hMfPkA&;JLBPwmSnd zew0{VEbwP?S}ZJItUoC;sihR>3ZP{x1T{O8P;59ONt#a|I(p_XWz!?|dn=w(C;-)q zE-&#%+lO|goI;7Z8VOSy>C(1Ih(wRl0Nn>2?Qp+lUyi;^7dVKl4bCRTk z(7hl(65r&-Khe0U&jSdHO~Zjvcf}G~;SWM#1DKrcC%14xUYc*k3*!F3Cu^3_elBl) zc1wB+1C?*bKtXL7sEQCTL`ZpebafsO3zrf2qYLt%aLRunk^h7(|26#yO#U(D#|dbZ z0X((+A79Q}Wjip_@E@ab0Mz7@Pt)8_`|Ynm3iQVe7-)1)(7XjS=l>iov;8pxhQAE| zefGb&@%Qil#f`sz|1WL;{{LeC=hysc_=~-+F72-$@ZWgA-@@^y;V<_83vu`_=HZt( z{LjVlpAEy$1@vnk{#pBuKe2}`>!mg ax97xZfBkx4{BW|T0-fD9o*fGCKl%nm?6Kt(`A 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 literal 0 HcmV?d00001 diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_muted_and_pinned_channel_trailing_bottom.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_muted_and_pinned_channel_trailing_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..119491c4b15ab71b19bc6d72c199d3b2701c5b6b GIT binary patch literal 24736 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 Czspbn literal 0 HcmV?d00001 diff --git a/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_muted_channel_trailing_bottom.png b/stream-chat-android-compose/src/test/snapshots/images/io.getstream.chat.android.compose.ui.channels_ChannelItemTest_muted_channel_trailing_bottom.png index ff34b3c3db076a384354dddf05b773183111f3e1..0ca1619a916cc347eb4071f0998137e2a7c475e2 100644 GIT binary patch literal 24572 zcmeFZXH=72*Di_$eMAryDFGBUiU`sYiYUbzM4CvG5^AWSNS7KPij4q9q=YIWy-5k7 zN0bt})X)MVoe+?g03qbuyzl<;p7V@vpFPGNXY8}jI6nwu%zI_6d(Ac1nsZ+3ntA&~ zN1cm9kb{kljZ5RvgQsk4haqfiM;87%21uGNocqGYX8A+o!CiwFqsyu6RlE;HS{io? zdsbFfXys;K^}d}tXW()|Pw&pvD@U&%(%^k^;t;#uorkBL^cGiEiaUblQ@tEU${l*D z=Y9VKrq9#Ak<07Lp{t#H4wcVJZJIfOLGE0NNCy6~34jhh(FYEBkh^-I@ z?f%jFAL4JsgLeO2@w<4;bvK&wAA@q%VpdmU0>SlEZE=RuI!$M8fzf~$_E%T;8s3Up zc4wsPwJiJpbn+FtAO>^_6P+C1_@>|aH-DXDwD?Yx60Pwr_IGY=4fcq1VWOM!iz=Xz z09M(CUe7Ii9KQKDyG!%(shVy1THOmW|N6f12<4|&mn@y$Am5`wC#q ztqJ-oT^>hx5G?&waL9pXz_DTHCdtAc`Wxnove7@>o$cRIE01#v|LalkDMH@EG^{}D z8AbfBzmFWuxUBV%gIe6YXp6_U>YnwV`ZMJ{s?gM1K9J)VURV{2P`0OI6#d9P2}-MV z8&z~RwkOY{Iw#aEQ{6>dN_#vMd3TTdHS-!L`cQ^ULUtE(geOtJmpkXWk|kZoD!by4 zVit8(i^HXvCUq}LM=G3R{pt)0jIfg-jINY`rM$XNY;4!Rwq6LlQuNnK17l@w$jn_n zMs2^Unp!#5iQ3;tFN~WCTy>>;3>q3o?1zjxz=0~f*omb#ukgbdtt}8+Six~l4e6=EHn4|xM{|uLway$(_5Z;+wf9E+gUH> z7AaQa5Zjes-%m=*trA!bJHI2PwYrkzdFJLVgSX-qhl-M4?}z;Q`#2=H&U3bXgqp1A ze!*C_2wq#cLmP9iw+-6pQk-k%x4dBrn|tZiFl?r!jaTs?s6C>34$!SZ^+xw??T&cKBI|{| ztVpI}Cowl-hEhUM5DEJ8x6(@0w9D0}to%WEhwja(@Q*S6LnaO;UT5tQ`Nkz~2@((P zO#KCDr^+9AEoxcdN_CE-09J*jHYB|9O_#le2>k1@k6~TFYYJkIoVxi<^oBflex65< z3LR~xeqwFhs|P1`_ZTXnS`Yb_rdQ*=sO57cHE6wUqPoPAFd-bUkl~^Ir9O~O8`@dO zjIptC8uxGeCG1JOR9Sfmd~Uq;yx+KWTENnEMsjDr_3QI|tA}QDtF3WEGyw8ng(kIoNgx?SOueV*B?&fE^2(4Rhm&i87 zIafx`1B2-}B9?}VkSP8AIm?i>X8y6+9@S*i@!a)2QSGEeSd?IdAhtX8wwc$Lco3?C zF`tfdOOi(#$)P*%@)I!A_A^6|Gdrnq>evqPJxmsryP=|8$^r55r%|yvs6PVgw_?7r z*{|DLNN?iNeL)~FX=Ad4IBCm?&Lnw>Vu?qkw;(4$srLb!x~KgvUC6zz*GwJ$#BC?R zGGtM*^u_SXb|@cT9`hJLmN(v`?FJYDWpm7wVlrMxbUe>MqD?)9x@BjMq}Kc4sbm zx)QL0c^AL_5C+wl7^SsF?&_s)wtIk~uD!lc_Xydj+MbR++N~U$X1_5zG&<=hSpi8Z zmfx7~p>vS9gcOG314lH*&}y`gg8D3U>}I7!p3rc&zqW` zbIA0(CwYC}M^}060n#STe-4Cv6AFXD4Ndv@*v!ii8jLZe`4s)Cs7{O5X$cbK`y=uY zo01<=!&lLrR};*CWBG78RUy4XZdHxQ46Kru{VSOLXoZtSN0?^fQqns9rTOzlb`5oL zrPzx+eX^hut#3)Tru3H%jVhNe&8oMN&tOasIJ*R9^wHxC_plbsPEi_YqrX z*%jr%-5FEuJs3<>PILF@aNvSg6OrMX0dSID7S`GYah6tN|nkVrXrC%vICkru3fA%