feat: for server owners, add a temporary shortcut to the web app for server settings

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2025-04-25 21:21:55 +02:00
parent ddb010cf55
commit 3c5c7bc30a
3 changed files with 46 additions and 1 deletions

View File

@ -14,6 +14,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
/** /**
@ -27,6 +28,7 @@ fun SheetSelection(
title: @Composable () -> Unit, title: @Composable () -> Unit,
description: @Composable () -> Unit, description: @Composable () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
arrowTint: Color = MaterialTheme.colorScheme.onSurfaceVariant,
onClick: () -> Unit, onClick: () -> Unit,
) { ) {
Row( Row(
@ -55,7 +57,7 @@ fun SheetSelection(
Icon( Icon(
imageVector = Icons.AutoMirrored.Default.KeyboardArrowRight, imageVector = Icons.AutoMirrored.Default.KeyboardArrowRight,
contentDescription = null, contentDescription = null,
tint = MaterialTheme.colorScheme.onSurfaceVariant tint = arrowTint
) )
} }
} }

View File

@ -1,6 +1,8 @@
package chat.revolt.sheets package chat.revolt.sheets
import android.content.Intent
import android.widget.Toast import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -17,9 +19,12 @@ import androidx.compose.material3.Checkbox
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@ -27,18 +32,22 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.core.net.toUri
import chat.revolt.R import chat.revolt.R
import chat.revolt.api.REVOLT_APP
import chat.revolt.api.RevoltAPI import chat.revolt.api.RevoltAPI
import chat.revolt.api.routes.server.leaveOrDeleteServer import chat.revolt.api.routes.server.leaveOrDeleteServer
import chat.revolt.composables.generic.SheetButton import chat.revolt.composables.generic.SheetButton
import chat.revolt.composables.markdown.RichMarkdown import chat.revolt.composables.markdown.RichMarkdown
import chat.revolt.composables.screens.settings.ServerOverview import chat.revolt.composables.screens.settings.ServerOverview
import chat.revolt.composables.sheets.SheetSelection
import chat.revolt.internals.Platform import chat.revolt.internals.Platform
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -161,6 +170,38 @@ fun ServerContextSheet(
) )
} }
if (server.owner == RevoltAPI.selfId) {
Box(
modifier = Modifier
.clip(MaterialTheme.shapes.medium)
.background(MaterialTheme.colorScheme.primary)
) {
CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.onPrimary) {
SheetSelection(
icon = {},
title = {
Text(
text = stringResource(id = R.string.server_context_sheet_moderators_early_disclaimer_title)
)
},
description = {
Text(
text = stringResource(id = R.string.server_context_sheet_moderators_early_disclaimer_body)
)
},
arrowTint = LocalContentColor.current.copy(alpha = 0.5f),
) {
context.startActivity(
Intent(
Intent.ACTION_VIEW,
"$REVOLT_APP/server/${server.id}/settings".toUri()
)
)
}
}
}
}
HorizontalDivider() HorizontalDivider()
} }

View File

@ -388,6 +388,8 @@
<string name="server_context_sheet_actions_leave_confirm_no">Stay</string> <string name="server_context_sheet_actions_leave_confirm_no">Stay</string>
<string name="server_context_sheet_actions_leave_silently">Leave Silently</string> <string name="server_context_sheet_actions_leave_silently">Leave Silently</string>
<string name="server_context_sheet_actions_report">Report</string> <string name="server_context_sheet_actions_report">Report</string>
<string name="server_context_sheet_moderators_early_disclaimer_title">Looking for server settings?</string>
<string name="server_context_sheet_moderators_early_disclaimer_body">We\'re still working on bringing server management to our Android app. Please use the web app to manage your server for now.</string>
<string name="user_info_sheet_open">Open user info</string> <string name="user_info_sheet_open">Open user info</string>
<string name="user_info_sheet_user_not_found">Can\'t resolve this user</string> <string name="user_info_sheet_user_not_found">Can\'t resolve this user</string>