Refactor: Update Discover Servers and Server Invite UI
- Added `disabled` property to `ServerData` to indicate if a server can be joined. - Updated `ServerItem` to reflect the `disabled` state by adjusting content alpha and added a visual indicator for joined servers. - Modified `ServerInviteDialog` to improve the display of error messages and updated the dialog's icon. - Changed the behavior in `DiscoverServersList` to navigate directly to server channels if already joined, otherwise proceed with the invite flow. - Updated `icn_check_24dp.xml` and added `link_no_valid_img.xml`. - Updated string resources for server invite errors. - Modified back navigation in `MainActivity` from discover screen to navigate to "main". - Renamed project from Revolt to PEP in `.idea/.name`.
This commit is contained in:
parent
0081ebc0c9
commit
b611e7a213
|
|
@ -1 +1 @@
|
|||
Revolt
|
||||
PEP
|
||||
|
|
@ -697,7 +697,9 @@ fun AppEntrypoint(
|
|||
onToggleDrawer = {},
|
||||
useDrawer = false,
|
||||
useBackButton = true,
|
||||
backToChannelsScreen = {},
|
||||
backToChannelsScreen = {
|
||||
navController.navigate("main")
|
||||
},
|
||||
backButtonAction = {
|
||||
navController.popBackStack()
|
||||
},
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import kotlinx.serialization.Serializable
|
|||
* Repository for fetching server data from a Google Sheet
|
||||
*/
|
||||
class ServerDataRepository {
|
||||
|
||||
|
||||
/**
|
||||
* Fetches server data from Google Sheets and returns as a Flow
|
||||
* @param sheetUrl The URL of the published Google Sheet (CSV or JSON)
|
||||
|
|
@ -25,6 +25,10 @@ class ServerDataRepository {
|
|||
name = rowData["name"] ?: "",
|
||||
description = rowData["description"] ?: "",
|
||||
inviteCode = rowData["inviteCode"] ?: "",
|
||||
disabled = when (rowData["disabled"]?.lowercase()) {
|
||||
"false" -> false
|
||||
else -> true
|
||||
},
|
||||
)
|
||||
}
|
||||
emit(servers)
|
||||
|
|
@ -41,16 +45,5 @@ data class ServerData(
|
|||
val name: String,
|
||||
val description: String,
|
||||
val inviteCode: String,
|
||||
)
|
||||
|
||||
/**
|
||||
* Data class representing a server category
|
||||
*/
|
||||
@Serializable
|
||||
data class ServerCategory(
|
||||
val id: String,
|
||||
val name: String,
|
||||
val description: String,
|
||||
val iconName: String,
|
||||
val sortOrder: Int
|
||||
val disabled: Boolean,
|
||||
)
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package chat.revolt.composables.screens.chat.discover
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
|
|
@ -14,6 +15,7 @@ import androidx.compose.foundation.layout.size
|
|||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.IconButton
|
||||
|
|
@ -24,6 +26,8 @@ import androidx.compose.runtime.collectAsState
|
|||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
|
|
@ -32,6 +36,7 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import chat.revolt.R
|
||||
import chat.revolt.api.RevoltAPI
|
||||
import chat.revolt.api.routes.googlesheets.ServerData
|
||||
|
||||
@Composable
|
||||
|
|
@ -107,12 +112,18 @@ fun DiscoverServersList(
|
|||
.weight(1f)
|
||||
) {
|
||||
items(uiState.servers) { server ->
|
||||
// Check if the server is already joined
|
||||
val isJoined = isServerAlreadyJoined(server.id)
|
||||
|
||||
ServerItem(
|
||||
server = server,
|
||||
isProcessing = uiState.processingServerId == server.id,
|
||||
onClick = {
|
||||
if (server.inviteCode.isNotEmpty()) {
|
||||
// First load server data, dialog will be shown after data is loaded
|
||||
if (isJoined) {
|
||||
// If already joined, navigate directly to server channels
|
||||
onJoinToServerSuccess(server.id)
|
||||
} else if (server.inviteCode.isNotEmpty()) {
|
||||
// If not joined, load server data and show invite dialog
|
||||
viewModel.loadServerDataAndShowDialog(server.inviteCode, server.id)
|
||||
}
|
||||
}
|
||||
|
|
@ -127,12 +138,30 @@ fun DiscoverServersList(
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the server with the given invite code is already joined
|
||||
* @param inviteCode The invite code of the server
|
||||
* @return True if the server is already joined, false otherwise
|
||||
*/
|
||||
@Composable
|
||||
private fun isServerAlreadyJoined(serverId: String): Boolean {
|
||||
// Check if the server exists in RevoltAPI.serverCache
|
||||
return RevoltAPI.serverCache.containsKey(serverId)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ServerItem(
|
||||
server: ServerData,
|
||||
onClick: () -> Unit,
|
||||
isProcessing: Boolean = false
|
||||
) {
|
||||
// Calculate alpha values based on disabled state
|
||||
val contentAlpha = if (server.disabled) 0.5f else 1.0f
|
||||
val descriptionAlpha = if (server.disabled) 0.4f else 0.7f
|
||||
|
||||
// Check if the server is already joined
|
||||
val isJoined = isServerAlreadyJoined(server.id)
|
||||
|
||||
Card(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
|
@ -148,7 +177,9 @@ fun ServerItem(
|
|||
Image(
|
||||
painter = painterResource(R.drawable.three_person),
|
||||
contentDescription = "",
|
||||
colorFilter = ColorFilter.tint(color = MaterialTheme.colorScheme.onBackground)
|
||||
colorFilter = ColorFilter.tint(
|
||||
color = MaterialTheme.colorScheme.onBackground.copy(alpha = contentAlpha)
|
||||
)
|
||||
)
|
||||
Spacer(modifier = Modifier.width(12.dp))
|
||||
|
||||
|
|
@ -158,6 +189,7 @@ fun ServerItem(
|
|||
Text(
|
||||
text = server.name,
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
color = MaterialTheme.colorScheme.onBackground.copy(alpha = contentAlpha)
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.height(4.dp))
|
||||
|
|
@ -166,7 +198,7 @@ fun ServerItem(
|
|||
text = server.description,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
color = MaterialTheme.colorScheme.onBackground.copy(
|
||||
alpha = 0.7f,
|
||||
alpha = descriptionAlpha,
|
||||
),
|
||||
maxLines = 2,
|
||||
overflow = TextOverflow.Ellipsis
|
||||
|
|
@ -188,12 +220,34 @@ fun ServerItem(
|
|||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
) {
|
||||
Image(
|
||||
painter = painterResource(R.drawable.icn_arrow_forward_24dp),
|
||||
contentDescription = "",
|
||||
modifier = Modifier
|
||||
.align(Alignment.Center)
|
||||
)
|
||||
if (isJoined) {
|
||||
// Show tick icon with green background for joined servers
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.size(24.dp)
|
||||
.clip(CircleShape)
|
||||
.background(Color(0xFF4CAF50)) // Green color
|
||||
.align(Alignment.Center),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Image(
|
||||
painter = painterResource(R.drawable.icn_check_24dp),
|
||||
contentDescription = "Already joined",
|
||||
colorFilter = ColorFilter.tint(Color.White)
|
||||
)
|
||||
}
|
||||
} else {
|
||||
// Show arrow icon for servers not joined yet
|
||||
Image(
|
||||
painter = painterResource(R.drawable.icn_arrow_forward_24dp),
|
||||
contentDescription = "Join server",
|
||||
modifier = Modifier
|
||||
.align(Alignment.Center),
|
||||
colorFilter = ColorFilter.tint(
|
||||
color = MaterialTheme.colorScheme.onBackground.copy(alpha = contentAlpha)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package chat.revolt.composables.screens.chat.discover
|
|||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
|
|
@ -16,7 +15,6 @@ import androidx.compose.foundation.shape.CircleShape
|
|||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
|
|
@ -52,10 +50,9 @@ fun ServerInviteDialog(
|
|||
AlertDialog(
|
||||
onDismissRequest = onDismiss,
|
||||
icon = {
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.icn_error_24dp),
|
||||
Image(
|
||||
painter = painterResource(R.drawable.link_no_valid_img),
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.error
|
||||
)
|
||||
},
|
||||
title = {
|
||||
|
|
@ -66,22 +63,26 @@ fun ServerInviteDialog(
|
|||
)
|
||||
},
|
||||
text = {
|
||||
Text(
|
||||
text = when (error.type) {
|
||||
"NotFound" -> stringResource(id = R.string.invite_error_invalid_invite)
|
||||
"Banned" -> stringResource(id = R.string.invite_error_banned)
|
||||
else -> stringResource(id = R.string.invite_error_unknown)
|
||||
},
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
},
|
||||
confirmButton = {},
|
||||
dismissButton = {
|
||||
TextButton(onClick = onDismiss) {
|
||||
Text(text = stringResource(id = R.string.invite_cancel))
|
||||
Column {
|
||||
Text(
|
||||
text = when (error.type) {
|
||||
"NotFound" -> stringResource(id = R.string.invite_error_invalid_invite)
|
||||
"Banned" -> stringResource(id = R.string.invite_error_banned)
|
||||
else -> stringResource(id = R.string.invite_error_unknown)
|
||||
},
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
Spacer(Modifier.height(32.dp))
|
||||
Button(
|
||||
onClick = onDismiss,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) {
|
||||
Text(text = stringResource(id = R.string.spark_early_access_cta))
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
confirmButton = {}
|
||||
)
|
||||
return
|
||||
}
|
||||
|
|
@ -196,7 +197,11 @@ fun ServerInviteDialog(
|
|||
.clip(CircleShape)
|
||||
)
|
||||
} else {
|
||||
IconPlaceholder(name = invite.userName, modifier = Modifier.size(24.dp).clip(CircleShape), fontSize = 12.sp)
|
||||
IconPlaceholder(
|
||||
name = invite.userName, modifier = Modifier
|
||||
.size(24.dp)
|
||||
.clip(CircleShape), fontSize = 12.sp
|
||||
)
|
||||
}
|
||||
Spacer(modifier = Modifier.width(4.dp))
|
||||
Text(text = invite.userName, fontWeight = FontWeight.SemiBold)
|
||||
|
|
@ -234,17 +239,6 @@ fun ServerInviteDialog(
|
|||
)
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun ServerInviteDialogPreviewLoading() {
|
||||
ServerInviteDialog(
|
||||
isLoading = true,
|
||||
invite = null,
|
||||
error = null,
|
||||
onJoinClick = {},
|
||||
onDismiss = {}
|
||||
)
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M382,720L154,492L211,435L382,606L749,239L806,296L382,720Z"/>
|
||||
</vector>
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="#FFFFFFFF"
|
||||
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
|
||||
</vector>
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="101dp"
|
||||
android:height="100dp"
|
||||
android:viewportWidth="101"
|
||||
android:viewportHeight="100">
|
||||
<path
|
||||
android:pathData="M22.51,49.31C20.1,50.42 17.47,52.54 15.18,53.97C13.11,55.25 9.42,57.92 8.52,60.29C10.11,56.11 11.69,51.94 13.27,47.76C13.42,47.35 13.58,46.91 13.48,46.48C13.31,45.76 12.51,45.42 11.85,45.09C6.15,42.28 5.32,32.64 7.18,27.31C9.08,21.89 13.53,17.64 18.63,15C23.73,12.36 29.46,11.17 35.15,10.42C42.77,9.42 50.91,9.23 57.73,12.78C64.55,16.34 69.39,24.69 66.67,31.89C64.85,36.72 60.23,39.9 55.6,42.19C46.67,46.61 36.7,48.89 26.74,48.78C25.31,48.76 23.82,48.71 22.51,49.31Z"
|
||||
android:fillColor="#332E36"/>
|
||||
<path
|
||||
android:pathData="M22.12,48.64C20.51,49.4 19.03,50.42 17.56,51.44C16.31,52.31 15.01,53.12 13.75,53.98C11.47,55.52 8.83,57.44 7.78,60.08L9.27,60.49C10.47,57.33 11.67,54.16 12.87,50.99C13.14,50.27 13.41,49.55 13.69,48.83C13.96,48.11 14.35,47.35 14.27,46.56C14.13,45.24 12.89,44.81 11.89,44.24C8.41,42.29 7.24,37.76 7.08,34.05C7,32.11 7.16,30.14 7.69,28.26C8.36,25.92 9.62,23.73 11.18,21.86C14.75,17.56 19.76,14.86 25.05,13.26C27.94,12.38 30.91,11.81 33.89,11.37C36.81,10.94 39.76,10.64 42.71,10.58C48.27,10.46 54.18,11.25 58.92,14.38C62.84,16.97 65.95,21.29 66.57,26.01C66.87,28.39 66.47,30.82 65.35,32.95C64.17,35.18 62.35,37.02 60.32,38.5C58.14,40.08 55.74,41.33 53.29,42.44C50.46,43.72 47.53,44.78 44.53,45.63C38.6,47.31 32.49,48.06 26.33,48C24.87,47.99 23.47,48.06 22.12,48.64C21.21,49.04 22,50.37 22.9,49.98C24.35,49.35 26.05,49.56 27.59,49.56C29.14,49.55 30.69,49.49 32.24,49.37C35.41,49.13 38.56,48.65 41.66,47.95C47.61,46.61 53.58,44.46 58.84,41.32C63.35,38.62 67.43,34.66 68.11,29.21C68.73,24.28 66.44,19.36 63.08,15.86C59.13,11.75 53.61,9.83 48.04,9.24C41.98,8.59 35.7,9.34 29.74,10.51C23.88,11.66 18.1,13.69 13.41,17.5C9.62,20.58 6.55,24.89 5.78,29.79C5.13,33.93 5.55,38.67 7.8,42.3C8.34,43.17 9,43.98 9.78,44.64C10.13,44.94 10.5,45.21 10.88,45.45C11.39,45.75 12,45.94 12.46,46.31C13.01,46.75 12.56,47.46 12.36,47.99C12.05,48.82 11.73,49.65 11.42,50.47C10.8,52.09 10.19,53.71 9.58,55.33C8.98,56.92 8.38,58.5 7.78,60.08C7.42,61.02 8.91,61.4 9.27,60.49C9.73,59.33 10.73,58.38 11.63,57.56C12.65,56.64 13.75,55.82 14.89,55.07C16.16,54.23 17.43,53.4 18.68,52.54C20.04,51.6 21.41,50.68 22.9,49.98C23.8,49.56 23.02,48.22 22.12,48.64Z"
|
||||
android:fillColor="#F3F2F3"/>
|
||||
<path
|
||||
android:pathData="M93.38,63.98C93.45,61.22 92.78,58.38 91.14,56.17C88.29,52.32 83.12,51.01 78.34,50.81C67.92,50.37 57.39,54.13 49.6,61.07C42.36,67.53 41.26,77.29 51.67,81.2C55.28,82.55 59.24,82.66 63.1,82.56C64.67,82.52 70.61,80.69 71.18,81.85C73.18,85.9 77.02,88.99 81.4,90.07C79.26,87.3 78.35,83.62 78.96,80.17C79.01,79.88 87.28,76.09 88.38,75.09C91.45,72.32 93.28,68.1 93.38,63.98Z"
|
||||
android:fillColor="#332E36"/>
|
||||
<path
|
||||
android:pathData="M94.15,63.97C94.24,59.6 92.53,55.43 88.82,52.95C85.49,50.72 81.3,50.07 77.38,50.01C68.62,49.86 59.81,52.6 52.66,57.66C49.61,59.82 46.7,62.36 44.9,65.7C43.49,68.31 42.78,71.4 43.57,74.33C44.41,77.48 46.89,79.82 49.75,81.21C51.86,82.24 54.12,82.81 56.44,83.1C58.67,83.38 61.04,83.51 63.29,83.32C64.58,83.21 65.86,82.86 67.13,82.61C67.83,82.47 68.53,82.34 69.24,82.28C69.53,82.25 69.82,82.23 70.11,82.24C70.33,82.25 70.46,82.28 70.57,82.3C70.46,82.29 70.6,82.29 70.6,82.32C70.62,82.4 70.49,82.2 70.49,82.2C70.51,82.34 70.69,82.58 70.76,82.71C71.01,83.17 71.28,83.62 71.58,84.06C72.14,84.89 72.78,85.67 73.48,86.38C74.88,87.8 76.55,88.99 78.36,89.81C79.27,90.23 80.22,90.57 81.19,90.82C81.78,90.97 82.5,90.25 82.06,89.68C80.24,87.28 79.34,84.31 79.58,81.31C79.6,81.12 79.62,80.94 79.64,80.75L79.67,80.57C79.73,80.33 79.71,80.32 79.61,80.53C79.27,80.81 79.53,80.71 79.55,80.66C79.49,80.78 79.39,80.77 79.49,80.71C79.69,80.61 79.87,80.49 80.07,80.38C80.71,80.04 81.37,79.71 82.03,79.38C83.72,78.53 85.41,77.71 87.07,76.81C87.6,76.52 88.14,76.23 88.63,75.87C89.6,75.15 90.41,74.14 91.11,73.16C93,70.49 94.05,67.24 94.15,63.97C94.19,62.98 92.64,62.98 92.61,63.97C92.52,66.92 91.56,69.81 89.88,72.23C89.49,72.78 89.07,73.29 88.61,73.78C88.36,74.05 88.1,74.3 87.83,74.55C87.79,74.58 87.67,74.67 87.85,74.54C87.8,74.57 87.76,74.6 87.72,74.63C87.13,75.01 86.53,75.35 85.91,75.67C84.24,76.56 82.54,77.39 80.85,78.24C80.23,78.56 79.6,78.86 79,79.21C78.82,79.31 78.63,79.41 78.48,79.55C78.11,79.9 78.13,80.46 78.07,80.93C77.7,84.28 78.69,87.78 80.73,90.46L81.6,89.33C77.92,88.39 74.65,86.05 72.62,82.84C72.25,82.25 72,81.36 71.38,80.99C70.96,80.73 70.41,80.69 69.92,80.69C68.57,80.7 67.2,81.02 65.88,81.29C64.57,81.55 63.51,81.78 62.24,81.8C59.91,81.84 57.56,81.79 55.27,81.37C51.87,80.75 48.14,79.28 46.15,76.3C42.64,71.05 46.48,64.79 50.58,61.24C56.88,55.79 64.97,52.42 73.26,51.7C77.17,51.36 81.28,51.45 85.01,52.78C86.7,53.37 88.31,54.28 89.59,55.55C91.05,57.01 91.95,58.9 92.36,60.92C92.56,61.92 92.63,62.95 92.61,63.97C92.59,64.97 94.14,64.97 94.15,63.97Z"
|
||||
android:fillColor="#F3F2F3"/>
|
||||
<path
|
||||
android:pathData="M18.55,34.7C22.93,33.35 25.61,28.16 24.04,23.82C23.91,23.46 23.5,23.11 23.09,23.28C20.25,24.45 20.36,28.39 22.68,30.03C25.71,32.18 29.45,30.26 31.87,28.17C33.05,27.16 35.43,25.29 34.16,23.52C33.69,22.86 32.43,23.22 32.75,24.11C33.32,25.7 35.12,25.74 36.55,25.84C38.45,25.96 40.36,25.96 42.27,25.83C46.04,25.57 49.78,24.83 53.36,23.62C54.3,23.31 53.89,21.81 52.95,22.13C49.77,23.21 46.47,23.92 43.13,24.22C41.48,24.36 39.82,24.41 38.17,24.37C37.34,24.34 36.51,24.3 35.68,24.22C35.28,24.19 34.41,24.16 34.24,23.7L32.83,24.3C33.26,24.89 32.34,25.67 31.94,26.04C31.32,26.61 30.7,27.18 30.03,27.69C28.77,28.66 27.32,29.42 25.7,29.4C24.44,29.37 23.01,28.81 22.6,27.52C22.3,26.59 22.48,25.19 23.5,24.77L22.55,24.23C23.82,27.76 21.76,32.09 18.14,33.21C17.19,33.51 17.59,35 18.55,34.7Z"
|
||||
android:fillColor="#F3F2F3"/>
|
||||
<path
|
||||
android:pathData="M29.49,39.62C30.99,40.46 32.89,40.32 34.21,39.2C35.49,38.11 35.92,36.16 35.28,34.62C35.11,34.21 34.6,33.84 34.15,34.16C32.81,35.1 33.15,37.04 34.39,37.91C35.89,38.96 37.84,38.48 39.45,37.98C43.41,36.74 47.27,35.17 50.98,33.33C51.88,32.89 51.09,31.55 50.2,31.99C47.26,33.45 44.22,34.73 41.11,35.8C39.76,36.27 38.28,36.92 36.83,36.98C36.25,37.01 35.55,36.95 35.12,36.51C34.94,36.33 34.62,35.71 34.93,35.5L33.79,35.03C34.21,36.04 34.07,37.24 33.24,38C32.43,38.73 31.2,38.81 30.27,38.28C29.4,37.79 28.62,39.13 29.49,39.62Z"
|
||||
android:fillColor="#F3F2F3"/>
|
||||
<path
|
||||
android:pathData="M59.25,72.04C60.72,70.95 61.82,69.46 62.38,67.7C62.63,66.89 62.88,65.87 62.7,65.02C62.51,64.14 61.63,63.63 60.8,64.1C59.4,64.9 59.35,66.89 60.14,68.14C61.11,69.67 63.09,69.98 64.7,69.35C66.77,68.54 67.88,66.59 68.7,64.65L67.83,65C68.19,65.07 68.36,65.68 68.56,65.99C68.85,66.46 69.24,66.85 69.73,67.11C70.72,67.65 71.91,67.69 73,67.55C75.91,67.19 78.8,66.14 81.47,64.96C82.37,64.56 81.59,63.23 80.69,63.63C79.38,64.21 78.03,64.7 76.66,65.12C75.42,65.49 74.13,65.87 72.84,66.02C71.99,66.13 70.89,66.16 70.19,65.57C69.43,64.92 69.4,63.73 68.24,63.51C67.94,63.45 67.5,63.54 67.36,63.87C66.75,65.31 66.02,66.91 64.59,67.71C63.48,68.32 61.79,68.35 61.28,66.97C61.19,66.73 61.14,66.47 61.16,66.22C61.19,65.94 61.38,65.79 61.43,65.55C61.59,65.46 61.56,65.4 61.36,65.38C61.21,65.26 61.16,65.26 61.19,65.36C61.16,65.4 61.19,65.67 61.19,65.74C61.16,66.15 61.09,66.55 60.98,66.95C60.59,68.43 59.71,69.79 58.47,70.71C57.68,71.3 58.45,72.64 59.25,72.04Z"
|
||||
android:fillColor="#F3F2F3"/>
|
||||
<path
|
||||
android:pathData="M67.86,74.39C69.45,74.3 71.05,74.21 72.65,74.11C73.05,74.09 73.44,73.77 73.42,73.34C73.4,72.94 73.08,72.54 72.65,72.57C71.05,72.66 69.45,72.76 67.86,72.85C67.46,72.87 67.07,73.19 67.09,73.62C67.1,74.02 67.43,74.42 67.86,74.39Z"
|
||||
android:fillColor="#F3F2F3"/>
|
||||
<path
|
||||
android:pathData="M35.88,71.47C36.24,71.84 36.83,71.84 37.19,71.47L36.54,70.82C37.19,71.47 37.19,71.47 37.19,71.47L37.2,71.47L37.2,71.47L37.2,71.47L37.22,71.45C37.23,71.43 37.25,71.41 37.28,71.39C37.33,71.33 37.4,71.25 37.49,71.15C37.68,70.96 37.92,70.67 38.21,70.32C38.77,69.62 39.48,68.63 40.05,67.5C40.61,66.39 41.06,65.06 41,63.7C40.95,62.3 40.36,60.94 38.98,59.84C36.24,57.65 33.35,58.31 31.32,59.39C30.31,59.93 29.46,60.59 28.87,61.11C28.58,61.37 28.34,61.6 28.18,61.77C28.1,61.85 28.03,61.92 27.99,61.96C27.97,61.99 27.95,62.01 27.94,62.02L27.92,62.04L27.92,62.04L27.92,62.04L27.92,62.05C27.92,62.05 27.92,62.05 28.61,62.66L27.92,62.05C27.58,62.43 27.61,63.02 28,63.36C28.39,63.7 28.97,63.66 29.31,63.28L29.31,63.28L29.31,63.28L29.32,63.27C29.33,63.26 29.34,63.25 29.36,63.23C29.39,63.19 29.44,63.14 29.51,63.07C29.64,62.93 29.85,62.74 30.1,62.51C30.62,62.05 31.35,61.49 32.2,61.04C33.89,60.14 35.9,59.76 37.82,61.29C38.77,62.05 39.11,62.9 39.14,63.77C39.18,64.69 38.87,65.69 38.38,66.67C37.9,67.64 37.27,68.51 36.76,69.15C36.5,69.47 36.28,69.73 36.12,69.9C36.04,69.99 35.98,70.05 35.93,70.1C35.91,70.12 35.9,70.13 35.89,70.14L35.88,70.15L35.88,70.16L35.88,70.16C35.51,70.52 35.51,71.11 35.88,71.47ZM19.49,72.4C19.12,72.04 18.53,72.04 18.17,72.4L18.83,73.06C18.17,72.4 18.17,72.4 18.17,72.4L18.17,72.41L18.17,72.41L18.16,72.41L18.14,72.43C18.13,72.44 18.11,72.47 18.08,72.49C18.03,72.55 17.96,72.62 17.87,72.72C17.69,72.92 17.44,73.2 17.16,73.56C16.59,74.26 15.88,75.25 15.32,76.37C14.76,77.49 14.31,78.82 14.36,80.17C14.41,81.58 15,82.94 16.38,84.04C19.12,86.23 22.01,85.57 24.04,84.49C25.06,83.95 25.9,83.29 26.49,82.77C26.79,82.51 27.02,82.28 27.18,82.11C27.27,82.03 27.33,81.96 27.37,81.91C27.4,81.89 27.41,81.87 27.43,81.86L27.44,81.84L27.45,81.84L27.45,81.83L27.45,81.83C27.45,81.83 27.45,81.83 26.75,81.22L27.45,81.83C27.79,81.45 27.75,80.86 27.36,80.52C26.98,80.18 26.39,80.21 26.05,80.6L26.05,80.6L26.05,80.6L26.04,80.61C26.04,80.62 26.02,80.63 26.01,80.65C25.97,80.68 25.92,80.74 25.86,80.81C25.72,80.94 25.52,81.14 25.26,81.37C24.74,81.83 24.02,82.39 23.17,82.84C21.47,83.74 19.47,84.12 17.55,82.59C16.6,81.83 16.26,80.97 16.22,80.1C16.19,79.19 16.49,78.18 16.98,77.21C17.47,76.24 18.09,75.36 18.61,74.72C18.86,74.41 19.09,74.15 19.25,73.98C19.33,73.89 19.39,73.83 19.43,73.78C19.45,73.76 19.47,73.74 19.48,73.73L19.49,73.72L19.49,73.72L19.49,73.72C19.85,73.36 19.85,72.77 19.49,72.4ZM15.19,65.46C15.4,64.99 15.95,64.78 16.42,64.99L21.55,67.32C22.01,67.54 22.22,68.09 22.01,68.56C21.8,69.03 21.24,69.23 20.77,69.02L15.65,66.69C15.18,66.48 14.97,65.92 15.19,65.46ZM39.85,79.74C40.32,79.95 40.87,79.74 41.09,79.27C41.3,78.8 41.09,78.25 40.62,78.04L35.5,75.71C35.03,75.5 34.48,75.7 34.26,76.17C34.05,76.64 34.26,77.19 34.73,77.41L39.85,79.74ZM20.07,59C20.5,58.72 21.08,58.85 21.35,59.28L24.38,64.03C24.66,64.46 24.53,65.04 24.09,65.32C23.66,65.59 23.08,65.47 22.81,65.03L19.78,60.29C19.5,59.85 19.63,59.28 20.07,59ZM34.92,85.44C35.2,85.88 35.77,86.01 36.21,85.73C36.64,85.45 36.77,84.88 36.49,84.44L33.47,79.7C33.19,79.26 32.61,79.13 32.18,79.41C31.75,79.69 31.62,80.26 31.89,80.7L34.92,85.44Z"
|
||||
android:fillColor="#F3F2F3"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M83.66,29.18C83.91,29.29 84.21,29.17 84.32,28.92L83.85,28.72C84.32,28.92 84.32,28.92 84.32,28.92L84.32,28.92L84.32,28.91L84.32,28.91L84.32,28.9C84.33,28.89 84.33,28.87 84.34,28.86C84.35,28.82 84.38,28.76 84.4,28.7C84.45,28.56 84.52,28.37 84.59,28.14C84.73,27.67 84.88,27.03 84.94,26.36C84.99,25.69 84.94,24.93 84.64,24.27C84.33,23.58 83.76,23.02 82.85,22.75C81.04,22.21 79.73,23.13 78.94,24.08C78.54,24.55 78.25,25.05 78.06,25.43C77.97,25.62 77.9,25.78 77.85,25.9C77.83,25.95 77.81,26 77.8,26.03C77.79,26.05 77.78,26.06 77.78,26.07L77.78,26.08L77.78,26.09L77.77,26.09L77.77,26.09C77.77,26.09 77.77,26.09 78.25,26.26L77.77,26.09C77.68,26.35 77.82,26.64 78.08,26.73C78.34,26.82 78.63,26.68 78.72,26.42L78.72,26.42L78.72,26.42L78.72,26.42L78.73,26.39C78.74,26.36 78.76,26.33 78.78,26.28C78.82,26.18 78.88,26.04 78.96,25.88C79.13,25.54 79.38,25.12 79.71,24.72C80.37,23.93 81.29,23.33 82.56,23.71C83.19,23.9 83.54,24.25 83.73,24.68C83.93,25.13 83.98,25.69 83.93,26.28C83.89,26.86 83.75,27.42 83.63,27.85C83.56,28.06 83.5,28.23 83.46,28.35C83.44,28.41 83.42,28.45 83.41,28.48L83.39,28.52L83.39,28.52L83.39,28.53L83.39,28.53C83.28,28.78 83.4,29.08 83.66,29.18ZM75.67,32.97C75.41,32.86 75.12,32.98 75.01,33.23L75.47,33.43C75.01,33.23 75.01,33.23 75.01,33.23L75.01,33.23L75.01,33.24L75.01,33.24L75,33.25C75,33.26 74.99,33.28 74.98,33.3C74.97,33.33 74.95,33.39 74.92,33.45C74.87,33.59 74.81,33.78 74.74,34.01C74.6,34.48 74.44,35.12 74.39,35.79C74.33,36.46 74.38,37.22 74.68,37.88C74.99,38.57 75.56,39.13 76.47,39.4C78.28,39.94 79.59,39.02 80.39,38.07C80.78,37.6 81.07,37.1 81.26,36.72C81.36,36.53 81.43,36.37 81.47,36.25C81.5,36.2 81.52,36.15 81.53,36.12C81.53,36.1 81.54,36.09 81.54,36.08L81.55,36.07L81.55,36.06L81.55,36.06L81.55,36.06C81.55,36.06 81.55,36.06 81.07,35.89L81.55,36.06C81.64,35.8 81.5,35.51 81.24,35.42C80.98,35.33 80.69,35.47 80.6,35.73L80.6,35.73L80.6,35.73L80.6,35.73L80.59,35.76C80.58,35.79 80.57,35.82 80.55,35.87C80.51,35.97 80.44,36.11 80.36,36.27C80.2,36.61 79.95,37.03 79.62,37.43C78.95,38.22 78.03,38.82 76.76,38.44C76.13,38.25 75.79,37.9 75.59,37.47C75.39,37.02 75.34,36.46 75.39,35.87C75.43,35.29 75.57,34.73 75.7,34.3C75.76,34.09 75.82,33.92 75.86,33.8C75.89,33.74 75.9,33.7 75.92,33.67L75.93,33.63L75.93,33.63L75.93,33.62L75.93,33.62C76.04,33.37 75.92,33.07 75.67,32.97ZM72.11,30.37C72.12,30.09 72.36,29.88 72.63,29.89L75.66,30.01C75.94,30.03 76.16,30.26 76.14,30.54C76.13,30.81 75.9,31.03 75.62,31.02L72.59,30.89C72.32,30.88 72.1,30.65 72.11,30.37ZM87.31,32.5C87.59,32.51 87.83,32.3 87.84,32.02C87.85,31.74 87.63,31.51 87.36,31.5L84.33,31.37C84.05,31.36 83.82,31.58 83.8,31.85C83.79,32.13 84.01,32.37 84.28,32.38L87.31,32.5ZM73.24,26.16C73.4,25.93 73.71,25.88 73.94,26.04L76.41,27.8C76.64,27.96 76.69,28.27 76.53,28.5C76.37,28.72 76.06,28.78 75.83,28.62L73.36,26.86C73.13,26.7 73.08,26.38 73.24,26.16ZM86.01,36.35C86.24,36.51 86.55,36.46 86.71,36.23C86.87,36.01 86.82,35.69 86.59,35.53L84.12,33.78C83.89,33.62 83.58,33.67 83.42,33.89C83.26,34.12 83.31,34.43 83.54,34.59L86.01,36.35Z"
|
||||
android:fillColor="#F3F2F3"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
||||
|
|
@ -548,9 +548,9 @@
|
|||
<string name="invite_cancel">No Thanks</string>
|
||||
<string name="invite_already_member">You are already a member of this server.</string>
|
||||
<string name="members_count">%1$d members</string>
|
||||
<string name="invite_error_header">There was an error</string>
|
||||
<string name="invite_error_header">Link No Longer Valid</string>
|
||||
<string name="invite_error_no_invite">No invite code was specified.</string>
|
||||
<string name="invite_error_invalid_invite">Could not find an invite with the specified code.</string>
|
||||
<string name="invite_error_invalid_invite">This link seems invalid or expired. Reach out for a new invite.</string>
|
||||
<string name="invite_error_banned">You are banned from this server.</string>
|
||||
<string name="invite_error_unknown">An unknown error occurred.</string>
|
||||
<string name="joining">Joining…</string>
|
||||
|
|
|
|||
Loading…
Reference in New Issue