feat: early access handler

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2025-02-06 17:42:12 +01:00
parent 0660771dd3
commit b62190d3ea
5 changed files with 204 additions and 0 deletions

View File

@ -84,6 +84,7 @@ import chat.revolt.screens.chat.views.OverviewScreen
import chat.revolt.screens.chat.views.channel.ChannelScreen
import chat.revolt.sheets.AddServerSheet
import chat.revolt.sheets.ChangelogSheet
import chat.revolt.sheets.EarlyAccessSheet
import chat.revolt.sheets.EmoteInfoSheet
import chat.revolt.sheets.LinkInfoSheet
import chat.revolt.sheets.ReactionInfoSheet
@ -148,6 +149,7 @@ class ChatRouterViewModel @Inject constructor(
var latestChangelog by mutableStateOf("")
var latestChangelogBody by mutableStateOf("")
var showNotificationRationale by mutableStateOf(false)
var showEarlyAccessSpark by mutableStateOf(false)
private val changelogs = Changelogs(context, kvStorage)
@ -164,6 +166,11 @@ class ChatRouterViewModel @Inject constructor(
changelogs.markAsSeen()
}
val seenEarlyAccess = kvStorage.get("spark/earlyAccess/dismissed")
if (seenEarlyAccess == null) {
showEarlyAccessSpark = true
}
val hasNotificationPermission =
NotificationManagerCompat.from(context).areNotificationsEnabled()
// right now we only show this in debug builds so Chucker can show its notification
@ -214,6 +221,13 @@ class ChatRouterViewModel @Inject constructor(
}
}
fun dismissEarlyAccessSpark() {
showEarlyAccessSpark = false
viewModelScope.launch {
kvStorage.set("spark/earlyAccess/dismissed", true)
}
}
fun navigateToServer(serverId: String) {
viewModelScope.launch {
val savedLastChannel = kvStorage.get("lastChannel/$serverId")
@ -706,6 +720,29 @@ fun ChatRouterScreen(
)
}
if (viewModel.showEarlyAccessSpark) {
val earlyAccessSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
ModalBottomSheet(
sheetState = earlyAccessSheetState,
sheetGesturesEnabled = false,
dragHandle = {},
onDismissRequest = {
// Only dismiss using button in sheet
}
) {
EarlyAccessSheet(
onClose = {
scope.launch {
earlyAccessSheetState.hide()
viewModel.dismissEarlyAccessSpark()
}
}
)
}
}
Column(
modifier = Modifier
.fillMaxWidth()

View File

@ -68,6 +68,7 @@ class DebugSettingsScreenViewModel @Inject constructor(
) : ViewModel() {
fun forgetAllSparks() {
forgetPhysicalKeyboardSpark()
forgetEarlyAccessSpark()
}
fun forgetPhysicalKeyboardSpark() {
@ -76,6 +77,12 @@ class DebugSettingsScreenViewModel @Inject constructor(
}
}
fun forgetEarlyAccessSpark() {
viewModelScope.launch {
kvStorage.remove("spark/earlyAccess/dismissed")
}
}
fun forgetLatestChangelog() {
viewModelScope.launch {
kvStorage.remove("latestChangelogRead")
@ -218,6 +225,9 @@ fun DebugSettingsScreen(
ElevatedButton(onClick = { viewModel.forgetPhysicalKeyboardSpark() }) {
Text("Forget physical keyboard spark")
}
ElevatedButton(onClick = { viewModel.forgetEarlyAccessSpark() }) {
Text("Forget early access spark")
}
Button(onClick = { viewModel.forgetAllSparks() }) {
Text("Forget all sparks")
}

View File

@ -0,0 +1,62 @@
package chat.revolt.sheets
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.revolt.R
@Composable
fun EarlyAccessSheet(onClose: () -> Unit) {
Column(
Modifier
.padding(16.dp)
.padding(horizontal = 8.dp)
.padding(top = 8.dp),
verticalArrangement = Arrangement.spacedBy(16.dp, Alignment.CenterVertically),
horizontalAlignment = Alignment.CenterHorizontally
) {
Image(
painter = painterResource(R.drawable.ux_early_access),
contentDescription = null,
modifier = Modifier
.fillMaxWidth(0.5f)
.padding(vertical = 8.dp)
)
Text(
stringResource(R.string.spark_early_access),
style = MaterialTheme.typography.headlineLarge.copy(fontSize = 24.sp),
textAlign = TextAlign.Center
)
Text(
stringResource(R.string.spark_early_access_description_1),
style = MaterialTheme.typography.bodyLarge,
textAlign = TextAlign.Center
)
Text(
stringResource(R.string.spark_early_access_description_2),
style = MaterialTheme.typography.bodyLarge,
textAlign = TextAlign.Center
)
Text(
stringResource(R.string.spark_early_access_description_3),
style = MaterialTheme.typography.bodyLarge,
textAlign = TextAlign.Center
)
TextButton(onClick = onClose, modifier = Modifier.fillMaxWidth()) {
Text(stringResource(R.string.spark_early_access_cta))
}
}
}

View File

@ -0,0 +1,83 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="597dp"
android:height="537dp"
android:viewportWidth="597"
android:viewportHeight="537">
<path
android:fillColor="?attr/colorSurfaceContainerHighest"
android:pathData="M-0,-0L596.67,-0L596.67,298.33L537,298.33L537,537L477.33,537L477.33,298.33L119.33,298L119.33,536.67L59.67,536.67L59.67,298L-0,298.33L-0,-0ZM537,59.67L59.67,59.67L59.67,238.67L537,238.67L537,59.67Z"/>
<path
android:pathData="M59.67,94.87L59.67,59.67L94.87,59.67L59.67,94.87ZM179,59.67L263.43,59.67L84.43,238.67L59.67,238.67L59.67,179L179,59.67ZM347.86,59.67L432.58,59.67L253.58,238.67L168.86,238.67L347.86,59.67ZM516.71,59.67L537,59.67L537,123.81L422.14,238.67L337.71,238.67L516.71,59.67ZM537,207.94L537,238.67L506.27,238.67L537,207.94Z"
android:fillColor="?attr/colorError"/>
<path
android:pathData="M123,36.48l365.55,27.48l-14.88,197.89l-365.55,-27.48z"
android:fillColor="?attr/colorSurfaceVariant"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M143.16,177.63C140.57,177.44 138.29,176.69 136.31,175.39C134.34,174.08 132.84,172.28 131.81,169.98C130.78,167.69 130.39,164.96 130.62,161.81C130.86,158.64 131.67,155.99 133.04,153.87C134.41,151.76 136.18,150.2 138.33,149.21C140.48,148.21 142.84,147.81 145.39,148C147.11,148.13 148.68,148.49 150.1,149.07C151.53,149.65 152.77,150.43 153.82,151.42C154.88,152.41 155.71,153.59 156.31,154.95C156.92,156.31 157.26,157.84 157.34,159.54L150.43,159.02C150.36,158.3 150.2,157.65 149.93,157.06C149.66,156.48 149.3,155.96 148.85,155.53C148.39,155.09 147.85,154.75 147.22,154.49C146.59,154.24 145.89,154.08 145.11,154.02C143.71,153.91 142.46,154.17 141.39,154.79C140.31,155.41 139.44,156.36 138.8,157.63C138.15,158.89 137.76,160.47 137.61,162.34C137.47,164.26 137.63,165.9 138.09,167.25C138.56,168.6 139.27,169.65 140.23,170.38C141.2,171.12 142.37,171.54 143.75,171.64C144.53,171.7 145.24,171.65 145.9,171.49C146.57,171.33 147.16,171.07 147.68,170.71C148.2,170.35 148.64,169.9 149.01,169.36C149.37,168.82 149.64,168.2 149.81,167.5L156.72,168.02C156.5,169.3 156.03,170.54 155.33,171.74C154.63,172.94 153.7,174.01 152.55,174.96C151.39,175.91 150.03,176.62 148.46,177.12C146.89,177.61 145.13,177.78 143.16,177.63Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M172.76,179.86C170.16,179.66 167.87,178.91 165.88,177.61C163.9,176.3 162.38,174.5 161.33,172.2C160.29,169.9 159.88,167.18 160.12,164.03C160.36,160.85 161.17,158.21 162.55,156.09C163.93,153.97 165.69,152.42 167.85,151.43C170.01,150.43 172.39,150.03 174.98,150.23C177.57,150.42 179.85,151.17 181.83,152.48C183.82,153.78 185.33,155.58 186.38,157.88C187.42,160.18 187.82,162.92 187.58,166.09C187.34,169.26 186.54,171.9 185.16,174.01C183.79,176.13 182.02,177.68 179.87,178.67C177.71,179.66 175.34,180.05 172.76,179.86ZM173.21,173.85C174.6,173.96 175.83,173.71 176.88,173.12C177.94,172.52 178.79,171.59 179.43,170.32C180.07,169.05 180.46,167.47 180.61,165.57C180.75,163.66 180.6,162.02 180.16,160.67C179.71,159.31 179.01,158.26 178.06,157.51C177.1,156.76 175.93,156.34 174.53,156.23C173.12,156.13 171.89,156.37 170.83,156.98C169.78,157.58 168.93,158.51 168.29,159.78C167.64,161.05 167.25,162.64 167.11,164.55C166.97,166.45 167.12,168.07 167.56,169.42C168.01,170.76 168.71,171.81 169.66,172.57C170.62,173.32 171.8,173.75 173.21,173.85Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M190.35,180.79L192.52,151.94L200.03,152.5L207.11,166.14C207.56,167.04 208,167.98 208.43,168.94C208.86,169.9 209.27,170.96 209.68,172.12C210.09,173.28 210.48,174.61 210.88,176.1L210.24,176.05C210.24,174.99 210.25,173.81 210.26,172.51C210.28,171.21 210.3,169.95 210.32,168.73C210.35,167.5 210.4,166.47 210.46,165.63L211.38,153.35L218.39,153.88L216.22,182.74L208.69,182.17L202.21,169.67C201.63,168.52 201.11,167.44 200.65,166.41C200.19,165.39 199.73,164.29 199.29,163.1C198.84,161.91 198.31,160.51 197.7,158.91L198.5,158.97C198.48,160.36 198.47,161.71 198.45,163.03C198.44,164.34 198.42,165.55 198.39,166.64C198.36,167.74 198.31,168.65 198.26,169.37L197.36,181.32L190.35,180.79Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M231.8,184.3C229.4,184.12 227.33,183.6 225.6,182.74C223.87,181.88 222.56,180.68 221.68,179.13C220.79,177.59 220.43,175.7 220.6,173.48L227.15,173.98C227.14,174.91 227.34,175.71 227.73,176.38C228.13,177.04 228.71,177.56 229.47,177.94C230.22,178.31 231.13,178.54 232.17,178.62C233.11,178.69 233.94,178.62 234.64,178.41C235.34,178.21 235.9,177.89 236.3,177.45C236.7,177.01 236.93,176.48 236.97,175.86C237.02,175.31 236.88,174.82 236.57,174.41C236.25,174 235.77,173.62 235.11,173.27C234.44,172.92 233.59,172.59 232.55,172.28L229.54,171.33C227.1,170.58 225.21,169.5 223.89,168.1C222.56,166.7 221.98,164.92 222.15,162.75C222.28,160.97 222.88,159.44 223.95,158.17C225.02,156.9 226.43,155.96 228.17,155.35C229.91,154.73 231.88,154.51 234.06,154.67C236.3,154.84 238.2,155.36 239.79,156.24C241.37,157.12 242.57,158.27 243.37,159.68C244.17,161.1 244.51,162.7 244.37,164.48L237.83,163.99C237.82,162.94 237.45,162.09 236.73,161.45C236.02,160.81 234.97,160.44 233.6,160.34C232.7,160.27 231.93,160.34 231.29,160.53C230.65,160.72 230.16,161.01 229.82,161.41C229.48,161.81 229.29,162.28 229.25,162.82C229.21,163.41 229.34,163.93 229.66,164.36C229.98,164.79 230.45,165.17 231.07,165.49C231.7,165.81 232.43,166.1 233.27,166.35L235.72,167.12C237.1,167.52 238.31,168.02 239.36,168.61C240.41,169.2 241.29,169.88 241.99,170.65C242.69,171.42 243.21,172.28 243.53,173.24C243.85,174.2 243.97,175.25 243.89,176.4C243.75,178.22 243.18,179.75 242.17,181C241.16,182.24 239.77,183.14 238.02,183.71C236.27,184.28 234.2,184.48 231.8,184.3Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M247.68,161.69L248.1,156.11L272.38,157.94L271.97,163.52L263.23,162.86L261.48,186.14L254.66,185.63L256.41,162.35L247.68,161.69Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M273.74,187.06L275.91,158.2L287.72,159.09C289.89,159.26 291.73,159.79 293.25,160.69C294.77,161.59 295.89,162.78 296.63,164.28C297.37,165.78 297.67,167.51 297.52,169.47C297.37,171.45 296.81,173.1 295.84,174.44C294.87,175.77 293.56,176.74 291.9,177.34C290.25,177.95 288.31,178.17 286.11,178L278.57,177.43L278.98,172.03L285.27,172.5C286.35,172.58 287.25,172.51 287.99,172.28C288.73,172.05 289.3,171.66 289.71,171.1C290.12,170.55 290.36,169.83 290.43,168.94C290.5,168.03 290.37,167.27 290.05,166.65C289.72,166.03 289.21,165.54 288.51,165.18C287.81,164.82 286.93,164.6 285.85,164.52L282.33,164.26L280.58,187.57L273.74,187.06ZM289.58,188.25L283.54,174.53L290.86,175.08L297.08,188.81L289.58,188.25Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M312.14,190.32C309.71,190.13 307.61,189.54 305.85,188.53C304.09,187.52 302.76,186.18 301.87,184.51C300.98,182.84 300.61,180.93 300.77,178.79L302.17,160.18L309.01,160.69L307.65,178.74C307.57,179.75 307.73,180.66 308.12,181.49C308.52,182.31 309.09,182.97 309.85,183.48C310.62,183.98 311.52,184.27 312.58,184.35C313.64,184.43 314.59,184.28 315.43,183.89C316.27,183.51 316.94,182.94 317.45,182.19C317.95,181.43 318.24,180.55 318.32,179.54L319.68,161.5L326.51,162.01L325.11,180.62C324.95,182.76 324.3,184.59 323.16,186.11C322.02,187.63 320.51,188.76 318.61,189.49C316.72,190.22 314.56,190.5 312.14,190.32Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M341.8,192.57C339.21,192.37 336.92,191.62 334.95,190.32C332.98,189.01 331.48,187.21 330.45,184.92C329.42,182.62 329.02,179.89 329.26,176.74C329.5,173.57 330.31,170.92 331.68,168.81C333.05,166.69 334.82,165.13 336.97,164.14C339.12,163.15 341.47,162.74 344.03,162.94C345.75,163.07 347.32,163.42 348.74,164C350.16,164.58 351.4,165.37 352.46,166.36C353.51,167.34 354.34,168.52 354.95,169.88C355.55,171.25 355.9,172.77 355.98,174.47L349.06,173.95C349,173.23 348.84,172.58 348.57,171.99C348.3,171.41 347.94,170.9 347.49,170.46C347.03,170.02 346.49,169.68 345.86,169.42C345.23,169.17 344.53,169.01 343.75,168.95C342.35,168.85 341.1,169.1 340.02,169.72C338.94,170.34 338.08,171.29 337.43,172.56C336.79,173.83 336.39,175.4 336.25,177.27C336.11,179.19 336.27,180.83 336.73,182.18C337.19,183.54 337.91,184.58 338.87,185.32C339.84,186.05 341.01,186.47 342.39,186.57C343.16,186.63 343.88,186.58 344.54,186.42C345.2,186.27 345.79,186 346.32,185.64C346.84,185.28 347.28,184.83 347.64,184.29C348.01,183.75 348.28,183.13 348.45,182.43L355.36,182.95C355.13,184.23 354.67,185.47 353.97,186.67C353.27,187.87 352.34,188.95 351.19,189.89C350.03,190.84 348.67,191.56 347.1,192.05C345.53,192.54 343.76,192.71 341.8,192.57Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M359.11,170.07L359.53,164.49L383.82,166.32L383.4,171.89L374.66,171.24L372.91,194.52L366.1,194L367.85,170.73L359.11,170.07Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M384.21,195.36L384.62,189.79L389.68,190.17L391.01,172.47L385.96,172.09L386.37,166.51L403.28,167.78L402.86,173.36L397.83,172.98L396.5,190.68L401.53,191.06L401.11,196.64L384.21,195.36Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M417.72,198.27C415.12,198.08 412.83,197.33 410.85,196.02C408.86,194.72 407.34,192.92 406.3,190.62C405.25,188.32 404.84,185.59 405.08,182.44C405.32,179.27 406.13,176.62 407.51,174.51C408.89,172.39 410.66,170.83 412.81,169.84C414.97,168.85 417.35,168.45 419.94,168.64C422.53,168.84 424.81,169.59 426.8,170.89C428.78,172.2 430.3,174 431.34,176.3C432.38,178.6 432.78,181.33 432.54,184.51C432.3,187.67 431.5,190.31 430.12,192.43C428.75,194.55 426.99,196.1 424.83,197.08C422.67,198.07 420.3,198.47 417.72,198.27ZM418.17,192.27C419.56,192.37 420.79,192.13 421.85,191.53C422.9,190.94 423.75,190.01 424.39,188.74C425.03,187.47 425.43,185.88 425.57,183.98C425.71,182.07 425.56,180.44 425.12,179.08C424.68,177.72 423.98,176.67 423.02,175.92C422.06,175.18 420.89,174.75 419.49,174.65C418.09,174.54 416.85,174.79 415.8,175.39C414.74,175.99 413.89,176.93 413.25,178.2C412.61,179.47 412.21,181.06 412.07,182.97C411.93,184.87 412.08,186.49 412.52,187.83C412.97,189.18 413.67,190.23 414.62,190.98C415.58,191.73 416.76,192.16 418.17,192.27Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M435.31,199.21L437.48,170.35L445,170.92L452.07,184.56C452.52,185.46 452.96,186.39 453.39,187.35C453.82,188.31 454.23,189.37 454.64,190.53C455.05,191.69 455.45,193.02 455.84,194.52L455.2,194.47C455.2,193.41 455.21,192.22 455.22,190.93C455.24,189.63 455.26,188.37 455.29,187.14C455.31,185.92 455.36,184.89 455.42,184.05L456.34,171.77L463.35,172.3L461.19,201.15L453.65,200.59L447.17,188.08C446.6,186.94 446.08,185.85 445.62,184.83C445.15,183.81 444.7,182.7 444.25,181.51C443.8,180.32 443.27,178.93 442.66,177.32L443.46,177.38C443.44,178.77 443.43,180.12 443.42,181.44C443.4,182.76 443.38,183.96 443.35,185.06C443.32,186.15 443.28,187.06 443.22,187.79L442.32,199.73L435.31,199.21Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M243.6,134.31C241.18,134.12 239.08,133.53 237.32,132.52C235.56,131.51 234.23,130.17 233.34,128.5C232.44,126.83 232.08,124.92 232.24,122.78L233.64,104.17L240.47,104.68L239.12,122.73C239.04,123.74 239.2,124.65 239.59,125.48C239.99,126.3 240.56,126.96 241.32,127.46C242.08,127.97 242.99,128.26 244.05,128.34C245.11,128.42 246.06,128.27 246.9,127.88C247.74,127.5 248.41,126.93 248.92,126.18C249.42,125.42 249.71,124.54 249.79,123.53L251.15,105.48L257.98,106L256.58,124.61C256.42,126.75 255.77,128.58 254.63,130.1C253.49,131.62 251.98,132.75 250.08,133.48C248.19,134.21 246.03,134.49 243.6,134.31Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M260.31,135.19L262.48,106.34L269.99,106.9L277.06,120.54C277.52,121.44 277.96,122.38 278.38,123.34C278.81,124.3 279.23,125.36 279.64,126.52C280.04,127.68 280.44,129.01 280.83,130.5L280.2,130.46C280.2,129.39 280.21,128.21 280.22,126.91C280.23,125.62 280.25,124.35 280.28,123.13C280.3,121.9 280.35,120.87 280.42,120.03L281.34,107.75L288.35,108.28L286.18,137.14L278.64,136.57L272.17,124.07C271.59,122.92 271.07,121.84 270.61,120.81C270.15,119.79 269.69,118.69 269.24,117.5C268.79,116.31 268.26,114.91 267.66,113.31L268.45,113.37C268.44,114.76 268.42,116.11 268.41,117.43C268.39,118.74 268.37,119.95 268.34,121.04C268.31,122.14 268.27,123.05 268.22,123.77L267.32,135.72L260.31,135.19Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M301.28,138.27L293.62,137.7L294.06,131.85L301.43,132.4C303.09,132.53 304.5,132.35 305.69,131.88C306.87,131.41 307.8,130.57 308.48,129.35C309.16,128.13 309.57,126.48 309.73,124.4C309.89,122.32 309.71,120.63 309.21,119.33C308.71,118.02 307.92,117.05 306.81,116.4C305.71,115.75 304.32,115.37 302.63,115.24L295.21,114.68L295.65,108.83L303.45,109.42C306.39,109.64 308.86,110.41 310.9,111.72C312.93,113.03 314.44,114.81 315.42,117.06C316.41,119.3 316.79,121.92 316.56,124.91C316.34,127.91 315.57,130.44 314.27,132.52C312.96,134.6 311.21,136.13 309,137.12C306.78,138.11 304.22,138.49 301.28,138.27ZM299.68,109.13L297.51,137.99L290.67,137.48L292.84,108.62L299.68,109.13Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M319.33,139.63L321.5,110.77L341.53,112.28L341.11,117.86L327.92,116.87L327.47,122.83L339.61,123.74L339.2,129.21L327.06,128.29L326.59,134.57L339.76,135.56L339.34,141.13L319.33,139.63Z"
android:fillType="nonZero"/>
<path
android:fillColor="?attr/colorOnSurfaceVariant"
android:pathData="M343.52,141.45L345.69,112.59L357.51,113.48C359.67,113.64 361.52,114.17 363.03,115.08C364.55,115.97 365.68,117.17 366.41,118.67C367.15,120.16 367.45,121.9 367.3,123.86C367.15,125.83 366.59,127.49 365.62,128.82C364.65,130.16 363.34,131.13 361.68,131.73C360.03,132.33 358.1,132.55 355.89,132.39L348.36,131.82L348.76,126.42L355.06,126.89C356.13,126.97 357.03,126.9 357.77,126.67C358.51,126.44 359.08,126.04 359.49,125.49C359.91,124.94 360.15,124.22 360.21,123.33C360.28,122.42 360.15,121.66 359.83,121.04C359.5,120.41 358.99,119.92 358.29,119.57C357.59,119.21 356.71,118.99 355.64,118.91L352.11,118.65L350.36,141.96L343.52,141.45ZM359.36,142.64L353.32,128.92L360.64,129.47L366.86,143.2L359.36,142.64Z"
android:fillType="nonZero"/>
</vector>

View File

@ -579,6 +579,18 @@
<string name="spark_keyboard_shortcuts_cta">Open shortcuts</string>
<string name="spark_keyboard_shortcuts_dismiss">Alright</string>
<string name="spark_early_access">Welcome to Early Access! 🚀</string>
<string name="spark_early_access_description_1">You\'re one of the first to try out our new Android app. We\'re excited to have you here!</string>
<string name="spark_early_access_description_2">Since this is early access, things might not be perfect just yet. You might run into the occasional bug, crash, or weird quirk. Your feedback helps us smooth out the rough edges and make Revolt even better.</string>
<string name="spark_early_access_description_3">We\'re thrilled to have you on board. Let\'s make something great together!</string>
<string name="spark_early_access_cta">Got it</string>
<string name="hint_provide_feedback">We love feedback!</string>
<string name="hint_provide_feedback_description">If you have any feedback, suggestions, or bug reports, please let us know. We\'re always looking to improve Revolt.</string>
<string name="hint_provide_feedback_cta">Rate on Google Play</string>
<string name="hint_provide_feedback_join_server">Join Testers Server</string>
<string name="hint_provide_feedback_dismiss">Done</string>
<string name="notice_platform_mod_dm_title">Important notice regarding your account</string>
<string name="notice_platform_mod_dm_description">You have received an important notice regarding your account from our moderation team. Please read it carefully.</string>
<string name="notice_platform_mod_dm_acknowledge">View</string>