From cec19dc501ac12d33ffe4d086e6ba033cbd31ae7 Mon Sep 17 00:00:00 2001 From: Infi Date: Mon, 2 Oct 2023 01:32:45 +0200 Subject: [PATCH] feat: display server official/verified badge Signed-off-by: Infi --- .../java/chat/revolt/api/schemas/Server.kt | 10 ++++ .../chat/drawer/channel/ChannelList.kt | 46 ++++++++++++++++++- .../res/drawable/ic_check_decagram_24dp.xml | 9 ++++ .../res/drawable/ic_revolt_decagram_24dp.xml | 9 ++++ app/src/main/res/values/strings.xml | 3 ++ 5 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/ic_check_decagram_24dp.xml create mode 100644 app/src/main/res/drawable/ic_revolt_decagram_24dp.xml diff --git a/app/src/main/java/chat/revolt/api/schemas/Server.kt b/app/src/main/java/chat/revolt/api/schemas/Server.kt index 80328cca..bd2122a2 100644 --- a/app/src/main/java/chat/revolt/api/schemas/Server.kt +++ b/app/src/main/java/chat/revolt/api/schemas/Server.kt @@ -41,6 +41,16 @@ data class Server( } } +enum class ServerFlags(val value: Long) { + Official(1L shl 0), + Verified(1L shl 1), +} + +infix fun Long?.has(flag: ServerFlags): Boolean { + if (this == null) return false + return this and flag.value == flag.value +} + @Serializable data class Category( val id: String? = null, diff --git a/app/src/main/java/chat/revolt/components/screens/chat/drawer/channel/ChannelList.kt b/app/src/main/java/chat/revolt/components/screens/chat/drawer/channel/ChannelList.kt index 9c185459..59978971 100644 --- a/app/src/main/java/chat/revolt/components/screens/chat/drawer/channel/ChannelList.kt +++ b/app/src/main/java/chat/revolt/components/screens/chat/drawer/channel/ChannelList.kt @@ -13,10 +13,13 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.RoundedCornerShape @@ -44,6 +47,7 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow @@ -58,7 +62,9 @@ import chat.revolt.api.REVOLT_FILES import chat.revolt.api.RevoltAPI import chat.revolt.api.internals.ChannelUtils import chat.revolt.api.schemas.ChannelType +import chat.revolt.api.schemas.ServerFlags import chat.revolt.api.schemas.User +import chat.revolt.api.schemas.has import chat.revolt.components.generic.presenceFromStatus import chat.revolt.components.screens.chat.drawer.server.DrawerChannel import chat.revolt.sheets.ChannelContextSheet @@ -345,6 +351,37 @@ fun RowScope.ChannelList( Row( verticalAlignment = Alignment.CenterVertically, ) { + Spacer(Modifier.width(16.dp)) + + if (server?.flags has ServerFlags.Official) { + Icon( + painter = painterResource(id = R.drawable.ic_revolt_decagram_24dp), + contentDescription = stringResource(R.string.server_flag_official), + tint = if (server?.banner != null) { + bannerTextColour + } else { + LocalContentColor.current + }, + modifier = Modifier + .padding(end = 8.dp) + .size(24.dp) + ) + } + if (server?.flags has ServerFlags.Verified) { + Icon( + painter = painterResource(id = R.drawable.ic_check_decagram_24dp), + contentDescription = stringResource(R.string.server_flag_verified), + tint = if (server?.banner != null) { + bannerTextColour + } else { + LocalContentColor.current + }, + modifier = Modifier + .padding(end = 8.dp) + .size(24.dp) + ) + } + Text( text = (server?.name ?: stringResource(R.string.unknown)), @@ -358,10 +395,15 @@ fun RowScope.ChannelList( modifier = Modifier .then( if (server?.banner != null) { - Modifier.padding(16.dp) + Modifier.padding( + start = 0.dp, + end = 16.dp, + top = 16.dp, + bottom = 16.dp + ) } else { Modifier.padding( - start = 24.dp, + start = 0.dp, end = 24.dp, top = 16.dp, bottom = 16.dp diff --git a/app/src/main/res/drawable/ic_check_decagram_24dp.xml b/app/src/main/res/drawable/ic_check_decagram_24dp.xml new file mode 100644 index 00000000..1400dee4 --- /dev/null +++ b/app/src/main/res/drawable/ic_check_decagram_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_revolt_decagram_24dp.xml b/app/src/main/res/drawable/ic_revolt_decagram_24dp.xml new file mode 100644 index 00000000..653fa81b --- /dev/null +++ b/app/src/main/res/drawable/ic_revolt_decagram_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 94d0f272..943d02e7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -187,6 +187,9 @@ Copy Copied to clipboard + Official Server + Verified Server + You can\'t view this channel This channel may have been deleted or you may not have permission to view it.