From 8d84d9214a52f03e0109509682b740639c090c42 Mon Sep 17 00:00:00 2001
From: Gian <47775302+gpunto@users.noreply.github.com>
Date: Mon, 30 Mar 2026 15:20:16 +0200
Subject: [PATCH] Add ability to pin DM channels
---
.../ui/components/channels/ChannelOptions.kt | 39 ++++++++++++++++---
.../src/main/res/values/strings.xml | 6 ++-
2 files changed, 38 insertions(+), 7 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 8e963c20960..e0eb3d800ea 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
@@ -181,6 +181,11 @@ private fun buildDmChannelActions(
selectedChannel = selectedChannel,
viewModel = viewModel,
),
+ buildDmPinAction(
+ canPinChannel = optionVisibility.isPinChannelVisible,
+ selectedChannel = selectedChannel,
+ viewModel = viewModel,
+ ),
buildDmArchiveAction(
canArchiveChannel = optionVisibility.isArchiveChannelVisible,
selectedChannel = selectedChannel,
@@ -321,7 +326,7 @@ private fun buildGroupChannelActions(
selectedChannel = selectedChannel,
viewModel = viewModel,
),
- buildPinAction(
+ buildGroupPinAction(
canPinChannel = optionVisibility.isPinChannelVisible,
selectedChannel = selectedChannel,
viewModel = viewModel,
@@ -379,23 +384,47 @@ private fun buildGroupChannelActions(
}
/**
- * Builds the pin action for the channel, based on the current state.
+ * Builds the pin action for DM channels.
+ */
+@Composable
+private fun buildDmPinAction(
+ canPinChannel: Boolean,
+ selectedChannel: Channel,
+ viewModel: ChannelListViewModel,
+): ChannelAction? = when (selectedChannel.isPinned().takeIf { canPinChannel }) {
+ false -> PinChannel(
+ channel = selectedChannel,
+ label = stringResource(id = R.string.stream_compose_selected_channel_menu_pin_chat),
+ onAction = { viewModel.pinChannel(selectedChannel) },
+ )
+
+ true -> UnpinChannel(
+ channel = selectedChannel,
+ label = stringResource(id = R.string.stream_compose_selected_channel_menu_unpin_chat),
+ onAction = { viewModel.unpinChannel(selectedChannel) },
+ )
+
+ null -> null
+}
+
+/**
+ * Builds the pin action for group channels.
*/
@Composable
-private fun buildPinAction(
+private fun buildGroupPinAction(
canPinChannel: Boolean,
selectedChannel: Channel,
viewModel: ChannelListViewModel,
): ChannelAction? = when (selectedChannel.isPinned().takeIf { canPinChannel }) {
false -> PinChannel(
channel = selectedChannel,
- label = stringResource(id = R.string.stream_compose_selected_channel_menu_pin_channel),
+ label = stringResource(id = R.string.stream_compose_selected_channel_menu_pin_group),
onAction = { viewModel.pinChannel(selectedChannel) },
)
true -> UnpinChannel(
channel = selectedChannel,
- label = stringResource(id = R.string.stream_compose_selected_channel_menu_unpin_channel),
+ label = stringResource(id = R.string.stream_compose_selected_channel_menu_unpin_group),
onAction = { viewModel.unpinChannel(selectedChannel) },
)
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 d8cbd64cf96..8486385edc1 100644
--- a/stream-chat-android-compose/src/main/res/values/strings.xml
+++ b/stream-chat-android-compose/src/main/res/values/strings.xml
@@ -48,8 +48,10 @@
View info
Leave group
- Pin Channel
- Unpin Channel
+ Pin Chat
+ Unpin Chat
+ Pin Group
+ Unpin Group
Leave group
Do you want to leave the %1$s group?
Mute Group