update dependencies pt 1

This commit is contained in:
Chloe committed 2025-12-17 02:34:04 -07:00
1 parent f52b90b259
commit 2dde48c8fc
25 files changed
+188 -111

No files matched your search

+9 -9
View File
@@ -91,7 +91,7 @@ android {
} }
} }
namespace = "com.geode.launcher" namespace = "com.geode.launcher"
ndkVersion = "28.1.13356709" ndkVersion = "29.0.14206865"
} }
dependencies { dependencies {
@@ -100,19 +100,19 @@ dependencies {
implementation ("androidx.compose.ui:ui") implementation ("androidx.compose.ui:ui")
implementation ("androidx.compose.material3:material3") implementation ("androidx.compose.material3:material3")
implementation ("androidx.compose.ui:ui-tooling-preview") implementation ("androidx.compose.ui:ui-tooling-preview")
implementation ("androidx.lifecycle:lifecycle-runtime-ktx:2.9.3") implementation ("androidx.lifecycle:lifecycle-runtime-ktx:2.10.0")
implementation ("androidx.lifecycle:lifecycle-viewmodel-compose:2.9.3") implementation ("androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0")
implementation ("androidx.activity:activity-compose:1.11.0") implementation ("androidx.activity:activity-compose:1.12.1")
implementation ("androidx.activity:activity-ktx:1.11.0") implementation ("androidx.activity:activity-ktx:1.12.1")
implementation ("androidx.appcompat:appcompat:1.7.1") implementation ("androidx.appcompat:appcompat:1.7.1")
implementation ("androidx.documentfile:documentfile:1.1.0") implementation ("androidx.documentfile:documentfile:1.1.0")
implementation ("com.squareup.okio:okio:3.16.0") implementation ("com.squareup.okio:okio:3.16.4")
implementation ("com.squareup.okhttp3:okhttp:5.1.0") implementation ("com.squareup.okhttp3:okhttp:5.3.2")
implementation ("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0") implementation ("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0")
implementation ("org.jetbrains.kotlinx:kotlinx-serialization-json-okio:1.9.0") implementation ("org.jetbrains.kotlinx:kotlinx-serialization-json-okio:1.9.0")
implementation ("org.jetbrains.kotlinx:kotlinx-datetime:0.7.1") implementation ("org.jetbrains.kotlinx:kotlinx-datetime:0.7.1")
implementation ("com.mikepenz:multiplatform-markdown-renderer-android:0.37.0") implementation ("com.mikepenz:multiplatform-markdown-renderer-android:0.38.1")
implementation ("com.mikepenz:multiplatform-markdown-renderer-m3:0.37.0") implementation ("com.mikepenz:multiplatform-markdown-renderer-m3:0.38.1")
implementation ("androidx.browser:browser:1.9.0") implementation ("androidx.browser:browser:1.9.0")
debugImplementation ("androidx.compose.ui:ui-tooling") debugImplementation ("androidx.compose.ui:ui-tooling")
coreLibraryDesugaring ("com.android.tools:desugar_jdk_libs:2.1.5") coreLibraryDesugaring ("com.android.tools:desugar_jdk_libs:2.1.5")
@@ -22,12 +22,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Info
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material.icons.filled.Settings
import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -137,8 +131,8 @@ fun LaunchCancelledIcon(cancelReason: LaunchViewModel.LaunchCancelReason, modifi
LaunchViewModel.LaunchCancelReason.GAME_OUTDATED, LaunchViewModel.LaunchCancelReason.GAME_OUTDATED,
LaunchViewModel.LaunchCancelReason.GAME_MISSING -> Icon(painterResource(R.drawable.icon_error), contentDescription = null, modifier) LaunchViewModel.LaunchCancelReason.GAME_MISSING -> Icon(painterResource(R.drawable.icon_error), contentDescription = null, modifier)
LaunchViewModel.LaunchCancelReason.LAST_LAUNCH_CRASHED, LaunchViewModel.LaunchCancelReason.LAST_LAUNCH_CRASHED,
LaunchViewModel.LaunchCancelReason.GEODE_NOT_FOUND -> Icon(Icons.Default.Warning, contentDescription = null, modifier) LaunchViewModel.LaunchCancelReason.GEODE_NOT_FOUND -> Icon(painterResource(R.drawable.icon_warning), contentDescription = null, modifier)
else -> Icon(Icons.Default.Info, contentDescription = null, modifier) else -> Icon(painterResource(R.drawable.icon_info), contentDescription = null, modifier)
} }
} }
@@ -285,7 +279,7 @@ fun RetryButtonContents(reason: LaunchViewModel.LaunchCancelReason) {
LaunchViewModel.LaunchCancelReason.MANUAL, LaunchViewModel.LaunchCancelReason.MANUAL,
LaunchViewModel.LaunchCancelReason.AUTOMATIC -> { LaunchViewModel.LaunchCancelReason.AUTOMATIC -> {
Icon( Icon(
Icons.Filled.PlayArrow, painterResource(R.drawable.icon_play_arrow),
contentDescription = null contentDescription = null
) )
Spacer(Modifier.size(ButtonDefaults.IconSpacing)) Spacer(Modifier.size(ButtonDefaults.IconSpacing))
@@ -293,7 +287,7 @@ fun RetryButtonContents(reason: LaunchViewModel.LaunchCancelReason) {
} }
LaunchViewModel.LaunchCancelReason.GEODE_NOT_FOUND -> { LaunchViewModel.LaunchCancelReason.GEODE_NOT_FOUND -> {
Icon( Icon(
Icons.Filled.Refresh, painterResource(R.drawable.icon_refresh),
contentDescription = null contentDescription = null
) )
Spacer(Modifier.size(ButtonDefaults.IconSpacing)) Spacer(Modifier.size(ButtonDefaults.IconSpacing))
@@ -398,7 +392,7 @@ fun ExtraOptions(onSettings: () -> Unit) {
onClick = onSettings, onClick = onSettings,
) { ) {
Icon( Icon(
Icons.Filled.Settings, painterResource(R.drawable.icon_settings),
contentDescription = stringResource(R.string.launcher_settings_icon_alt) contentDescription = stringResource(R.string.launcher_settings_icon_alt)
) )
} }
@@ -9,8 +9,6 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Settings
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
@@ -160,11 +158,11 @@ fun MainScreen(
) { ) {
Image( Image(
painter = painterResource(id = R.drawable.geode_logo), painter = painterResource(id = R.drawable.geode_logo),
contentDescription = context.getString(R.string.launcher_logo_alt), contentDescription = stringResource(R.string.launcher_logo_alt),
modifier = Modifier.size(100.dp, 100.dp) modifier = Modifier.size(100.dp, 100.dp)
) )
Text( Text(
context.getString(R.string.launcher_title), stringResource(R.string.launcher_title),
style = launcherTitleStyle, style = launcherTitleStyle,
modifier = Modifier.padding(12.dp) modifier = Modifier.padding(12.dp)
) )
@@ -199,7 +197,7 @@ fun MainScreen(
} }
gdInstalled -> { gdInstalled -> {
Text( Text(
context.getString(R.string.geode_download_title), stringResource(R.string.geode_download_title),
modifier = Modifier.padding(12.dp) modifier = Modifier.padding(12.dp)
) )
@@ -210,16 +208,16 @@ fun MainScreen(
) { ) {
Icon( Icon(
painterResource(R.drawable.icon_download), painterResource(R.drawable.icon_download),
contentDescription = context.getString(R.string.launcher_download_icon_alt) contentDescription = stringResource(R.string.launcher_download_icon_alt)
) )
Spacer(Modifier.size(ButtonDefaults.IconSpacing)) Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text(context.getString(R.string.launcher_download)) Text(stringResource(R.string.launcher_download))
} }
Spacer(Modifier.size(2.dp)) Spacer(Modifier.size(2.dp))
IconButton(onClick = { onSettings(context) }) { IconButton(onClick = { onSettings(context) }) {
Icon( Icon(
Icons.Filled.Settings, painterResource(R.drawable.icon_settings),
contentDescription = context.getString(R.string.launcher_settings_icon_alt) contentDescription = stringResource(R.string.launcher_settings_icon_alt)
) )
} }
} }
@@ -18,8 +18,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@@ -241,7 +239,7 @@ fun ErrorInfoActions(extraDetails: String?, modifier: Modifier = Modifier) {
} else { } else {
Button(onClick = { onShareCrash(context) }) { Button(onClick = { onShareCrash(context) }) {
Icon( Icon(
Icons.Filled.Share, painterResource(R.drawable.icon_share),
contentDescription = null contentDescription = null
) )
Spacer(Modifier.size(ButtonDefaults.IconSpacing)) Spacer(Modifier.size(ButtonDefaults.IconSpacing))
@@ -10,10 +10,6 @@ import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material.icons.filled.Settings
import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
@@ -34,6 +30,7 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.platform.LocalViewConfiguration
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
@@ -71,7 +68,7 @@ fun UpdateWarning(inSafeMode: Boolean = false, onDismiss: () -> Unit) {
AlertDialog( AlertDialog(
icon = { icon = {
Icon( Icon(
Icons.Filled.Warning, painterResource(R.drawable.icon_warning),
contentDescription = stringResource(R.string.launcher_warning_icon_alt) contentDescription = stringResource(R.string.launcher_warning_icon_alt)
) )
}, },
@@ -116,7 +113,7 @@ fun SafeModeDialog(onDismiss: () -> Unit, onLaunch: () -> Unit) {
AlertDialog( AlertDialog(
icon = { icon = {
Icon( Icon(
Icons.Filled.Warning, painterResource(R.drawable.icon_warning),
contentDescription = stringResource(R.string.launcher_warning_icon_alt) contentDescription = stringResource(R.string.launcher_warning_icon_alt)
) )
}, },
@@ -243,17 +240,17 @@ fun PlayButton(
} }
) { ) {
Icon( Icon(
Icons.Filled.PlayArrow, painterResource(R.drawable.icon_play_arrow),
contentDescription = context.getString(R.string.launcher_launch_icon_alt) contentDescription = stringResource(R.string.launcher_launch_icon_alt)
) )
Spacer(Modifier.size(ButtonDefaults.IconSpacing)) Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text(context.getString(R.string.launcher_launch)) Text(stringResource(R.string.launcher_launch))
} }
Spacer(Modifier.size(2.dp)) Spacer(Modifier.size(2.dp))
IconButton(onClick = { onSettings(context) }) { IconButton(onClick = { onSettings(context) }) {
Icon( Icon(
Icons.Filled.Settings, painterResource(R.drawable.icon_settings),
contentDescription = context.getString(R.string.launcher_settings_icon_alt) contentDescription = stringResource(R.string.launcher_settings_icon_alt)
) )
} }
} }
@@ -295,7 +292,7 @@ fun UnsupportedVersionWarning(modifier: Modifier = Modifier) {
InlineDialog( InlineDialog(
headline = { headline = {
Icon( Icon(
Icons.Default.Warning, painterResource(R.drawable.icon_warning),
contentDescription = null, contentDescription = null,
modifier = Modifier.size(28.dp) modifier = Modifier.size(28.dp)
) )
@@ -13,9 +13,6 @@ import androidx.compose.foundation.layout.displayCutoutPadding
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Info
import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.ListItem import androidx.compose.material3.ListItem
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
@@ -199,7 +196,7 @@ fun LauncherUpdateContent(modifier: Modifier = Modifier) {
}, },
leadingContent = { leadingContent = {
Icon( Icon(
Icons.Filled.Info, painterResource(R.drawable.icon_info),
contentDescription = null, contentDescription = null,
) )
}, },
@@ -232,7 +229,7 @@ fun OutdatedVersionContent(modifier: Modifier = Modifier) {
}, },
leadingContent = { leadingContent = {
Icon( Icon(
Icons.Filled.Warning, painterResource(R.drawable.icon_warning),
contentDescription = null, contentDescription = null,
) )
}, },
@@ -251,7 +248,7 @@ fun UpdateFailedContent(modifier: Modifier = Modifier) {
}, },
leadingContent = { leadingContent = {
Icon( Icon(
Icons.Filled.Warning, painterResource(R.drawable.icon_warning),
contentDescription = null, contentDescription = null,
) )
}, },
@@ -17,8 +17,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ElevatedCard import androidx.compose.material3.ElevatedCard
@@ -320,7 +318,7 @@ fun UpdateMessageIndicator(
}, },
) { ) {
Icon( Icon(
Icons.Filled.Refresh, painterResource(R.drawable.icon_refresh),
contentDescription = stringResource(R.string.launcher_retry_icon_alt) contentDescription = stringResource(R.string.launcher_retry_icon_alt)
) )
Spacer(Modifier.size(ButtonDefaults.IconSpacing)) Spacer(Modifier.size(ButtonDefaults.IconSpacing))
@@ -21,8 +21,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.selection.selectable import androidx.compose.foundation.selection.selectable
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -44,6 +42,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -162,7 +161,7 @@ fun ApplicationIconScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onBackPressedDispatcher?.onBackPressed() }) { IconButton(onClick = { onBackPressedDispatcher?.onBackPressed() }) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, painterResource(R.drawable.icon_arrow_back),
contentDescription = stringResource(R.string.back_icon_alt) contentDescription = stringResource(R.string.back_icon_alt)
) )
} }
@@ -18,11 +18,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@@ -53,6 +48,7 @@ import androidx.compose.ui.input.pointer.pointerInput
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.platform.LocalHapticFeedback import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.platform.LocalResources
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
@@ -189,6 +185,7 @@ fun ApplicationLogsScreen(
val isLoading by logViewModel.isLoading.collectAsState() val isLoading by logViewModel.isLoading.collectAsState()
val context = LocalContext.current val context = LocalContext.current
val resources = LocalResources.current
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
@@ -236,7 +233,7 @@ fun ApplicationLogsScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onBackPressedDispatcher?.onBackPressed() }) { IconButton(onClick = { onBackPressedDispatcher?.onBackPressed() }) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, painterResource(R.drawable.icon_arrow_back),
contentDescription = stringResource(R.string.back_icon_alt) contentDescription = stringResource(R.string.back_icon_alt)
) )
} }
@@ -244,7 +241,7 @@ fun ApplicationLogsScreen(
actions = { actions = {
IconButton(onClick = { IconButton(onClick = {
coroutineScope.launch { coroutineScope.launch {
saveLauncher.launch(context.getString(R.string.application_logs_default_filename)) saveLauncher.launch(resources.getString(R.string.application_logs_default_filename))
} }
}, enabled = !logLines.isEmpty()) { }, enabled = !logLines.isEmpty()) {
Icon( Icon(
@@ -254,7 +251,7 @@ fun ApplicationLogsScreen(
} }
IconButton(onClick = { showMoreOptions = !showMoreOptions }) { IconButton(onClick = { showMoreOptions = !showMoreOptions }) {
Icon( Icon(
Icons.Filled.MoreVert, painterResource(R.drawable.icon_more_vert),
contentDescription = stringResource(R.string.application_logs_more) contentDescription = stringResource(R.string.application_logs_more)
) )
} }
@@ -273,7 +270,7 @@ fun ApplicationLogsScreen(
trailingIcon = { trailingIcon = {
if (logViewModel.filterCrashes) { if (logViewModel.filterCrashes) {
Icon( Icon(
Icons.Filled.Check, painterResource(R.drawable.icon_check),
contentDescription = stringResource(R.string.application_logs_crash_only_enabled_alt) contentDescription = stringResource(R.string.application_logs_crash_only_enabled_alt)
) )
} }
@@ -25,11 +25,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@@ -169,7 +164,7 @@ fun CrashCard(crashDump: CrashDump, crashViewModel: CrashViewModel, modifier: Mo
shareCrash(context, crashDump.filename) shareCrash(context, crashDump.filename)
}) { }) {
Icon( Icon(
Icons.Filled.Share, painterResource(R.drawable.icon_share),
contentDescription = stringResource(R.string.application_logs_share) contentDescription = stringResource(R.string.application_logs_share)
) )
} }
@@ -178,7 +173,7 @@ fun CrashCard(crashDump: CrashDump, crashViewModel: CrashViewModel, modifier: Mo
crashViewModel.removeCrash(crashDump.filename) crashViewModel.removeCrash(crashDump.filename)
}) { }) {
Icon( Icon(
Icons.Filled.Delete, painterResource(R.drawable.icon_delete),
contentDescription = stringResource(R.string.application_crashes_delete_one) contentDescription = stringResource(R.string.application_crashes_delete_one)
) )
} }
@@ -207,7 +202,7 @@ fun CrashLogsScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onBackPressedDispatcher?.onBackPressed() }) { IconButton(onClick = { onBackPressedDispatcher?.onBackPressed() }) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, painterResource(R.drawable.icon_arrow_back),
contentDescription = stringResource(R.string.back_icon_alt) contentDescription = stringResource(R.string.back_icon_alt)
) )
} }
@@ -215,7 +210,7 @@ fun CrashLogsScreen(
actions = { actions = {
IconButton(onClick = { showMoreOptions = !showMoreOptions }) { IconButton(onClick = { showMoreOptions = !showMoreOptions }) {
Icon( Icon(
Icons.Filled.MoreVert, painterResource(R.drawable.icon_more_vert),
contentDescription = stringResource(R.string.application_logs_more) contentDescription = stringResource(R.string.application_logs_more)
) )
} }
@@ -20,9 +20,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.ElevatedCard import androidx.compose.material3.ElevatedCard
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
@@ -114,7 +111,7 @@ fun DeveloperSettingsScreen(onBackPressedDispatcher: OnBackPressedDispatcher?) {
navigationIcon = { navigationIcon = {
IconButton(onClick = { onBackPressedDispatcher?.onBackPressed() }) { IconButton(onClick = { onBackPressedDispatcher?.onBackPressed() }) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, painterResource(R.drawable.icon_arrow_back),
contentDescription = stringResource(R.string.back_icon_alt) contentDescription = stringResource(R.string.back_icon_alt)
) )
} }
@@ -21,9 +21,6 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
@@ -37,6 +34,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalResources
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.semantics.Role import androidx.compose.ui.semantics.Role
@@ -123,6 +121,7 @@ fun UpdateIndicator(
updateStatus: ReleaseViewModel.ReleaseUIState updateStatus: ReleaseViewModel.ReleaseUIState
) { ) {
val context = LocalContext.current val context = LocalContext.current
val resources = LocalResources.current
var enablePopup by remember { mutableStateOf(false) } var enablePopup by remember { mutableStateOf(false) }
@@ -158,8 +157,8 @@ fun UpdateIndicator(
is ReleaseViewModel.ReleaseUIState.Failure -> { is ReleaseViewModel.ReleaseUIState.Failure -> {
val message = when (updateStatus.exception) { val message = when (updateStatus.exception) {
is UnknownHostException, is ConnectException -> is UnknownHostException, is ConnectException ->
context.getString(R.string.release_fetch_no_internet) resources.getString(R.string.release_fetch_no_internet)
else -> context.getString(R.string.preference_check_for_updates_failed) else -> resources.getString(R.string.preference_check_for_updates_failed)
} }
snackbarHostState.showSnackbar(message) snackbarHostState.showSnackbar(message)
@@ -167,17 +166,17 @@ fun UpdateIndicator(
is ReleaseViewModel.ReleaseUIState.Finished -> { is ReleaseViewModel.ReleaseUIState.Finished -> {
if (updateStatus.hasUpdated) { if (updateStatus.hasUpdated) {
snackbarHostState.showSnackbar( snackbarHostState.showSnackbar(
context.getString(R.string.preference_check_for_updates_success) resources.getString(R.string.preference_check_for_updates_success)
) )
} else { } else {
val gameVersion = GamePackageUtils.getGameVersionCodeOrNull(context.packageManager) val gameVersion = GamePackageUtils.getGameVersionCodeOrNull(context.packageManager)
if (gameVersion != null && gameVersion < Constants.SUPPORTED_VERSION_CODE) { if (gameVersion != null && gameVersion < Constants.SUPPORTED_VERSION_CODE) {
snackbarHostState.showSnackbar( snackbarHostState.showSnackbar(
context.getString(R.string.launcher_game_update_required_short) resources.getString(R.string.launcher_game_update_required_short)
) )
} else { } else {
snackbarHostState.showSnackbar( snackbarHostState.showSnackbar(
context.getString(R.string.preference_check_for_updates_none_found) resources.getString(R.string.preference_check_for_updates_none_found)
) )
} }
} }
@@ -218,7 +217,7 @@ fun DeveloperModeDialog(onDismiss: () -> Unit, onEnable: () -> Unit) {
AlertDialog( AlertDialog(
icon = { icon = {
Icon( Icon(
Icons.Filled.Warning, painterResource(R.drawable.icon_warning),
contentDescription = null, contentDescription = null,
) )
}, },
@@ -245,6 +244,7 @@ fun SettingsScreen(
releaseViewModel: ReleaseViewModel = viewModel(factory = ReleaseViewModel.Factory) releaseViewModel: ReleaseViewModel = viewModel(factory = ReleaseViewModel.Factory)
) { ) {
val context = LocalContext.current val context = LocalContext.current
val resources = LocalResources.current
val currentRelease by PreferenceUtils.useStringPreference(PreferenceUtils.Key.CURRENT_VERSION_TAG) val currentRelease by PreferenceUtils.useStringPreference(PreferenceUtils.Key.CURRENT_VERSION_TAG)
val updateStatus by releaseViewModel.uiState.collectAsState() val updateStatus by releaseViewModel.uiState.collectAsState()
@@ -255,7 +255,7 @@ fun SettingsScreen(
if (showUpdateInProgress) { if (showUpdateInProgress) {
LaunchedEffect(snackbarHostState) { LaunchedEffect(snackbarHostState) {
snackbarHostState.showSnackbar( snackbarHostState.showSnackbar(
context.getString(R.string.preference_check_for_updates_already_updating) resources.getString(R.string.preference_check_for_updates_already_updating)
) )
showUpdateInProgress = false showUpdateInProgress = false
} }
@@ -280,14 +280,14 @@ fun SettingsScreen(
navigationIcon = { navigationIcon = {
IconButton(onClick = { onBackPressedDispatcher?.onBackPressed() }) { IconButton(onClick = { onBackPressedDispatcher?.onBackPressed() }) {
Icon( Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, painterResource(R.drawable.icon_arrow_back),
contentDescription = context.getString(R.string.back_icon_alt) contentDescription = stringResource(R.string.back_icon_alt)
) )
} }
}, },
title = { title = {
Text( Text(
context.getString(R.string.title_activity_settings), stringResource(R.string.title_activity_settings),
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
@@ -304,7 +304,7 @@ fun SettingsScreen(
.verticalScroll(rememberScrollState()), .verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(8.dp) verticalArrangement = Arrangement.spacedBy(8.dp)
) { ) {
OptionsGroup(context.getString(R.string.preference_category_testing)) { OptionsGroup(stringResource(R.string.preference_category_testing)) {
SettingsSelectCard( SettingsSelectCard(
title = stringResource(R.string.preference_theme_name), title = stringResource(R.string.preference_theme_name),
dialogTitle = stringResource(R.string.preference_theme_select), dialogTitle = stringResource(R.string.preference_theme_select),
@@ -361,8 +361,8 @@ fun SettingsScreen(
OptionsGroup(stringResource(R.string.preference_category_gameplay)) { OptionsGroup(stringResource(R.string.preference_category_gameplay)) {
SettingsCard( SettingsCard(
title = context.getString(R.string.preference_load_automatically_name), title = stringResource(R.string.preference_load_automatically_name),
description = context.getString(R.string.preference_load_automatically_description), description = stringResource(R.string.preference_load_automatically_description),
preferenceKey = PreferenceUtils.Key.LOAD_AUTOMATICALLY, preferenceKey = PreferenceUtils.Key.LOAD_AUTOMATICALLY,
) )
SettingsSelectCard( SettingsSelectCard(
@@ -407,7 +407,7 @@ fun SettingsScreen(
step = 5, step = 5,
) { ) {
SettingsCard( SettingsCard(
title = context.getString(R.string.preference_screen_zoom_fit_name), title = stringResource(R.string.preference_screen_zoom_fit_name),
preferenceKey = PreferenceUtils.Key.SCREEN_ZOOM_FIT, preferenceKey = PreferenceUtils.Key.SCREEN_ZOOM_FIT,
asCard = false asCard = false
) )
@@ -430,9 +430,9 @@ fun SettingsScreen(
) )
} }
OptionsGroup(context.getString(R.string.preference_category_updater)) { OptionsGroup(stringResource(R.string.preference_category_updater)) {
SettingsCard( SettingsCard(
title = context.getString(R.string.preference_update_automatically_name), title = stringResource(R.string.preference_update_automatically_name),
preferenceKey = PreferenceUtils.Key.UPDATE_AUTOMATICALLY, preferenceKey = PreferenceUtils.Key.UPDATE_AUTOMATICALLY,
) )
OptionsCard( OptionsCard(
@@ -538,7 +538,7 @@ fun SettingsScreen(
} }
val gameSource = remember { val gameSource = remember {
context.getString(when (GamePackageUtils.identifyGameSource(context.packageManager)) { resources.getString(when (GamePackageUtils.identifyGameSource(context.packageManager)) {
GamePackageUtils.GameSource.GOOGLE -> R.string.preference_game_source_google GamePackageUtils.GameSource.GOOGLE -> R.string.preference_game_source_google
GamePackageUtils.GameSource.AMAZON -> R.string.preference_game_source_amazon GamePackageUtils.GameSource.AMAZON -> R.string.preference_game_source_amazon
else -> R.string.preference_game_source_unknown else -> R.string.preference_game_source_unknown
@@ -20,10 +20,6 @@ import androidx.compose.foundation.selection.toggleable
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.Clear
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -274,7 +270,7 @@ fun StringDialog(
if (enteredValue.isNotEmpty()) { if (enteredValue.isNotEmpty()) {
IconButton(onClick = { enteredValue = "" }) { IconButton(onClick = { enteredValue = "" }) {
Icon( Icon(
Icons.Filled.Clear, painterResource(R.drawable.icon_close_small),
contentDescription = stringResource(R.string.preference_text_clear) contentDescription = stringResource(R.string.preference_text_clear)
) )
} }
@@ -419,7 +415,7 @@ fun FrameRateDialog(
enteredValue = nextValue.toString() enteredValue = nextValue.toString()
}, enabled = currentValue == null || currentValue < maxFrameRate) { }, enabled = currentValue == null || currentValue < maxFrameRate) {
Icon( Icon(
Icons.Filled.Add, painterResource(R.drawable.icon_add),
contentDescription = stringResource(R.string.preference_limit_framerate_add) contentDescription = stringResource(R.string.preference_limit_framerate_add)
) )
} }
@@ -794,7 +790,7 @@ fun ProfileSelectCard() {
) )
} else { } else {
Icon( Icon(
Icons.Filled.Delete, painterResource(R.drawable.icon_delete),
contentDescription = stringResource(R.string.preference_profiles_delete_alt) contentDescription = stringResource(R.string.preference_profiles_delete_alt)
) )
} }
+10
View File
@@ -0,0 +1,10 @@
<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="M440,520L200,520L200,440L440,440L440,200L520,200L520,440L760,440L760,520L520,520L520,760L440,760L440,520Z"/>
</vector>
@@ -0,0 +1,11 @@
<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"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M313,520L537,744L480,800L160,480L480,160L537,216L313,440L800,440L800,520L313,520Z"/>
</vector>
+10
View File
@@ -0,0 +1,10 @@
<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>
@@ -0,0 +1,10 @@
<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="M336,680L280,624L424,480L280,337L336,281L480,425L623,281L679,337L535,480L679,624L623,680L480,536L336,680Z"/>
</vector>
+10
View File
@@ -0,0 +1,10 @@
<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="M440,680L520,680L520,440L440,440L440,680ZM480,360Q497,360 508.5,348.5Q520,337 520,320Q520,303 508.5,291.5Q497,280 480,280Q463,280 451.5,291.5Q440,303 440,320Q440,337 451.5,348.5Q463,360 480,360ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
</vector>
@@ -0,0 +1,10 @@
<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="M480,800Q447,800 423.5,776.5Q400,753 400,720Q400,687 423.5,663.5Q447,640 480,640Q513,640 536.5,663.5Q560,687 560,720Q560,753 536.5,776.5Q513,800 480,800ZM480,560Q447,560 423.5,536.5Q400,513 400,480Q400,447 423.5,423.5Q447,400 480,400Q513,400 536.5,423.5Q560,447 560,480Q560,513 536.5,536.5Q513,560 480,560ZM480,320Q447,320 423.5,296.5Q400,273 400,240Q400,207 423.5,183.5Q447,160 480,160Q513,160 536.5,183.5Q560,207 560,240Q560,273 536.5,296.5Q513,320 480,320Z"/>
</vector>
@@ -0,0 +1,10 @@
<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="M320,760L320,200L760,480L320,760ZM400,480L400,480L400,480ZM400,614L610,480L400,346L400,614Z"/>
</vector>
@@ -0,0 +1,10 @@
<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="M480,800Q346,800 253,707Q160,614 160,480Q160,346 253,253Q346,160 480,160Q549,160 612,188.5Q675,217 720,270L720,160L800,160L800,440L520,440L520,360L688,360Q656,304 600.5,272Q545,240 480,240Q380,240 310,310Q240,380 240,480Q240,580 310,650Q380,720 480,720Q557,720 619,676Q681,632 706,560L790,560Q762,666 676,733Q590,800 480,800Z"/>
</vector>
@@ -0,0 +1,10 @@
<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="M370,880L354,752Q341,747 329.5,740Q318,733 307,725L188,775L78,585L181,507Q180,500 180,493.5Q180,487 180,480Q180,473 180,466.5Q180,460 181,453L78,375L188,185L307,235Q318,227 330,220Q342,213 354,208L370,80L590,80L606,208Q619,213 630.5,220Q642,227 653,235L772,185L882,375L779,453Q780,460 780,466.5Q780,473 780,480Q780,487 780,493.5Q780,500 778,507L881,585L771,775L653,725Q642,733 630,740Q618,747 606,752L590,880L370,880ZM440,800L519,800L533,694Q564,686 590.5,670.5Q617,655 639,633L738,674L777,606L691,541Q696,527 698,511.5Q700,496 700,480Q700,464 698,448.5Q696,433 691,419L777,354L738,286L639,328Q617,305 590.5,289.5Q564,274 533,266L520,160L441,160L427,266Q396,274 369.5,289.5Q343,305 321,327L222,286L183,354L269,418Q264,433 262,448Q260,463 260,480Q260,496 262,511Q264,526 269,541L183,606L222,674L321,632Q343,655 369.5,670.5Q396,686 427,694L440,800ZM482,620Q540,620 581,579Q622,538 622,480Q622,422 581,381Q540,340 482,340Q423,340 382.5,381Q342,422 342,480Q342,538 382.5,579Q423,620 482,620ZM480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480Z"/>
</vector>
+10
View File
@@ -0,0 +1,10 @@
<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="M680,880Q630,880 595,845Q560,810 560,760Q560,754 563,732L282,568Q266,583 245,591.5Q224,600 200,600Q150,600 115,565Q80,530 80,480Q80,430 115,395Q150,360 200,360Q224,360 245,368.5Q266,377 282,392L563,228Q561,221 560.5,214.5Q560,208 560,200Q560,150 595,115Q630,80 680,80Q730,80 765,115Q800,150 800,200Q800,250 765,285Q730,320 680,320Q656,320 635,311.5Q614,303 598,288L317,452Q319,459 319.5,465.5Q320,472 320,480Q320,488 319.5,494.5Q319,501 317,508L598,672Q614,657 635,648.5Q656,640 680,640Q730,640 765,675Q800,710 800,760Q800,810 765,845Q730,880 680,880ZM680,800Q697,800 708.5,788.5Q720,777 720,760Q720,743 708.5,731.5Q697,720 680,720Q663,720 651.5,731.5Q640,743 640,760Q640,777 651.5,788.5Q663,800 680,800ZM200,520Q217,520 228.5,508.5Q240,497 240,480Q240,463 228.5,451.5Q217,440 200,440Q183,440 171.5,451.5Q160,463 160,480Q160,497 171.5,508.5Q183,520 200,520ZM680,240Q697,240 708.5,228.5Q720,217 720,200Q720,183 708.5,171.5Q697,160 680,160Q663,160 651.5,171.5Q640,183 640,200Q640,217 651.5,228.5Q663,240 680,240ZM680,760Q680,760 680,760Q680,760 680,760Q680,760 680,760Q680,760 680,760Q680,760 680,760Q680,760 680,760Q680,760 680,760Q680,760 680,760ZM200,480Q200,480 200,480Q200,480 200,480Q200,480 200,480Q200,480 200,480Q200,480 200,480Q200,480 200,480Q200,480 200,480Q200,480 200,480ZM680,200Q680,200 680,200Q680,200 680,200Q680,200 680,200Q680,200 680,200Q680,200 680,200Q680,200 680,200Q680,200 680,200Q680,200 680,200Z"/>
</vector>
@@ -0,0 +1,10 @@
<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="M40,840L480,80L920,840L40,840ZM178,760L782,760L480,240L178,760ZM480,720Q497,720 508.5,708.5Q520,697 520,680Q520,663 508.5,651.5Q497,640 480,640Q463,640 451.5,651.5Q440,663 440,680Q440,697 451.5,708.5Q463,720 480,720ZM440,600L520,600L520,400L440,400L440,600ZM480,500L480,500L480,500Z"/>
</vector>
+6 -6
View File
@@ -1,14 +1,14 @@
buildscript { buildscript {
val composeBOM by extra("2025.09.00") val composeBOM by extra("2025.12.00")
} }
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins { plugins {
id("com.android.application") version "8.13.0" apply false id("com.android.application") version "8.13.2" apply false
id("com.android.library") version "8.13.0" apply false id("com.android.library") version "8.13.2" apply false
id("org.jetbrains.kotlin.android") version "2.2.20" apply false id("org.jetbrains.kotlin.android") version "2.3.0" apply false
id("org.jetbrains.kotlin.plugin.serialization") version "2.2.20" apply false id("org.jetbrains.kotlin.plugin.serialization") version "2.3.0" apply false
id("org.jetbrains.kotlin.plugin.compose") version "2.2.20" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.3.0" apply false
} }
tasks.register<Delete>("clean") { tasks.register<Delete>("clean") {