From bae946c47c5e5cdb8baf28f442142f88dd4b8c54 Mon Sep 17 00:00:00 2001
From: Gabriel <60961939+gabrielfordevelopment@users.noreply.github.com>
Date: Wed, 8 Apr 2026 19:51:47 +0200
Subject: [PATCH] feat: add Edit Channel button to channel context sheet
Signed-off-by: Gabriel <60961939+gabrielfordevelopment@users.noreply.github.com>
---
.../chat/stoat/sheets/ChannelContextSheet.kt | 38 ++++++++++++++++++-
app/src/main/res/values/strings.xml | 1 +
2 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/chat/stoat/sheets/ChannelContextSheet.kt b/app/src/main/java/chat/stoat/sheets/ChannelContextSheet.kt
index 3eb70489..1f96b1b5 100644
--- a/app/src/main/java/chat/stoat/sheets/ChannelContextSheet.kt
+++ b/app/src/main/java/chat/stoat/sheets/ChannelContextSheet.kt
@@ -8,6 +8,7 @@ import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -19,9 +20,15 @@ import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp
import chat.stoat.R
import chat.stoat.api.StoatAPI
+import chat.stoat.api.internals.PermissionBit
+import chat.stoat.api.internals.has
+import chat.stoat.callbacks.Action
+import chat.stoat.callbacks.ActionChannel
import chat.stoat.composables.generic.SheetButton
-
+import chat.stoat.core.model.schemas.ChannelType
import chat.stoat.internals.Platform
+import chat.stoat.internals.extensions.rememberChannelPermissions
+import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
@Composable
@@ -40,6 +47,7 @@ fun ChannelContextSheet(channelId: String, onHideSheet: suspend () -> Unit) {
val clipboardManager = LocalClipboardManager.current
val context = LocalContext.current
+ val permissions by rememberChannelPermissions(channelId)
val coroutineScope = rememberCoroutineScope()
@@ -96,5 +104,33 @@ fun ChannelContextSheet(channelId: String, onHideSheet: suspend () -> Unit) {
}
)
+ if (
+ (permissions has PermissionBit.ManageChannel)
+ && (channel.channelType != ChannelType.SavedMessages && channel.channelType != ChannelType.DirectMessage)
+ ) {
+ SheetButton(
+ headlineContent = {
+ Text(
+ text = stringResource(id = R.string.channel_context_sheet_actions_edit_channel),
+ )
+ },
+ leadingContent = {
+ Icon(
+ painter = painterResource(id = R.drawable.ic_edit_24dp),
+ contentDescription = null
+ )
+ },
+ onClick = {
+ coroutineScope.launch {
+ onHideSheet()
+ }
+ coroutineScope.launch {
+ delay(100) // wait for the sheet to close or at least start closing
+ ActionChannel.send(Action.TopNavigate("settings/channel/$channelId"))
+ }
+ }
+ )
+ }
+
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9c4dfeff..3a0b9ab1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -410,6 +410,7 @@
Copy ID
Copied channel ID to clipboard
Mark as read
+ Edit Channel
There hasn\'t been a description set for this server yet.