From 2c942b09f4011445a3e0466a0621637482a4fccd Mon Sep 17 00:00:00 2001 From: Ishan09811 <156402647+Ishan09811@users.noreply.github.com> Date: Wed, 18 Mar 2026 23:16:15 +0530 Subject: [PATCH] update dependencies AGP: update to 8.13.2 gradle: update to 8.13 kotlin: update to 2.3.20 coreKtx: update to 1.18.0 OkHttp3: update to 5.3.2 material: update to 1.13.0 appcompat: update to 1.7.1 navigationCompose: update to 2.9.7 activity: update to 1.13.0 activityCompose: update to 1.13.0 kotlinxSerializationJson: update to 1.10.0 composeBom: update to 2026.02.01 --- app/build.gradle.kts | 10 +- .../net/rpcsx/overlay/OverlayEditActivity.kt | 20 ++-- .../ui/channels/UpdateChannelListScreen.kt | 9 +- .../rpcsx/ui/channels/UpdateChannelsScreen.kt | 5 +- .../net/rpcsx/ui/drivers/GpuDriversScreen.kt | 8 +- .../java/net/rpcsx/ui/games/GamesScreen.kt | 8 +- .../net/rpcsx/ui/navigation/AppNavHost.kt | 14 +-- .../net/rpcsx/ui/settings/SettingsScreen.kt | 22 ++-- .../components/base/BasePreference.kt | 13 ++- .../components/core/DeletableListItem.kt | 6 +- .../components/core/MaterialSwitch.kt | 100 ------------------ .../preference/CheckboxPreference.kt | 14 +-- .../components/preference/ListPreference.kt | 8 +- .../preference/RegularPreference.kt | 19 ++-- .../components/preference/SliderPreference.kt | 12 +-- .../components/preference/SwitchPreference.kt | 34 +++--- .../java/net/rpcsx/ui/user/UsersScreen.kt | 5 +- app/src/main/java/net/rpcsx/utils/GitHub.kt | 8 +- app/src/main/res/drawable/ic_add.xml | 10 ++ app/src/main/res/drawable/ic_build.xml | 10 ++ app/src/main/res/drawable/ic_close.xml | 10 ++ app/src/main/res/drawable/ic_delete.xml | 10 ++ app/src/main/res/drawable/ic_info.xml | 10 ++ .../res/drawable/ic_keyboard_arrow_down.xml | 10 ++ .../res/drawable/ic_keyboard_arrow_left.xml | 11 ++ .../res/drawable/ic_keyboard_arrow_right.xml | 11 ++ .../res/drawable/ic_keyboard_arrow_up.xml | 10 ++ app/src/main/res/drawable/ic_lock.xml | 10 ++ app/src/main/res/drawable/ic_menu.xml | 10 ++ app/src/main/res/drawable/ic_person.xml | 10 ++ app/src/main/res/drawable/ic_refresh.xml | 10 ++ app/src/main/res/drawable/ic_search.xml | 10 ++ app/src/main/res/drawable/ic_settings.xml | 10 ++ app/src/main/res/drawable/ic_share.xml | 10 ++ app/src/main/res/drawable/ic_star.xml | 10 ++ gradle/libs.versions.toml | 24 +++-- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 1 + 38 files changed, 290 insertions(+), 224 deletions(-) delete mode 100644 app/src/main/java/net/rpcsx/ui/settings/components/core/MaterialSwitch.kt create mode 100644 app/src/main/res/drawable/ic_add.xml create mode 100644 app/src/main/res/drawable/ic_build.xml create mode 100644 app/src/main/res/drawable/ic_close.xml create mode 100644 app/src/main/res/drawable/ic_delete.xml create mode 100644 app/src/main/res/drawable/ic_info.xml create mode 100644 app/src/main/res/drawable/ic_keyboard_arrow_down.xml create mode 100644 app/src/main/res/drawable/ic_keyboard_arrow_left.xml create mode 100644 app/src/main/res/drawable/ic_keyboard_arrow_right.xml create mode 100644 app/src/main/res/drawable/ic_keyboard_arrow_up.xml create mode 100644 app/src/main/res/drawable/ic_lock.xml create mode 100644 app/src/main/res/drawable/ic_menu.xml create mode 100644 app/src/main/res/drawable/ic_person.xml create mode 100644 app/src/main/res/drawable/ic_refresh.xml create mode 100644 app/src/main/res/drawable/ic_search.xml create mode 100644 app/src/main/res/drawable/ic_settings.xml create mode 100644 app/src/main/res/drawable/ic_share.xml create mode 100644 app/src/main/res/drawable/ic_star.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c50dd311..d3306f4b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -83,8 +83,10 @@ android { targetCompatibility = JavaVersion.VERSION_11 } - kotlinOptions { - jvmTarget = "11" + kotlin { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11) + } } externalNativeBuild { @@ -115,7 +117,7 @@ base.archivesName = "rpcsx" dependencies { implementation(libs.androidx.navigation.compose) implementation(libs.androidx.ui.tooling.preview.android) - val composeBom = platform("androidx.compose:compose-bom:2025.02.00") + val composeBom = platform("androidx.compose:compose-bom:2026.02.01") implementation(composeBom) implementation(libs.androidx.material3) implementation(libs.androidx.core.ktx) @@ -131,4 +133,6 @@ dependencies { implementation(libs.kotlinx.serialization.json) implementation(libs.coil.compose) implementation(libs.squareup.okhttp3) + implementation(libs.androidx.documentfile) + implementation(libs.com.github.ishan09811.materialswitch) } diff --git a/app/src/main/java/net/rpcsx/overlay/OverlayEditActivity.kt b/app/src/main/java/net/rpcsx/overlay/OverlayEditActivity.kt index ea2fd720..8388b34d 100644 --- a/app/src/main/java/net/rpcsx/overlay/OverlayEditActivity.kt +++ b/app/src/main/java/net/rpcsx/overlay/OverlayEditActivity.kt @@ -31,12 +31,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.KeyboardArrowDown -import androidx.compose.material.icons.filled.KeyboardArrowUp import androidx.compose.material3.AlertDialog import androidx.compose.material3.Checkbox import androidx.compose.material3.CheckboxDefaults @@ -173,7 +167,7 @@ fun OverlayEditScreen() { containerColor = MaterialTheme.colorScheme.primary, contentColor = Color.White ) { - Icon(Icons.Default.KeyboardArrowDown, contentDescription = "Open Control Panel") + Icon(painter = painterResource(id = R.drawable.ic_keyboard_arrow_down), contentDescription = "Open Control Panel") } } @@ -275,7 +269,7 @@ fun ControlPanel( verticalAlignment = Alignment.CenterVertically ) { IconButton(onClick = {}, modifier = Modifier.alpha(0f)) { - Icon(Icons.Default.Close, contentDescription = "Disabled Button") + Icon(painter = painterResource(id = R.drawable.ic_close), contentDescription = "Disabled Button") } Text( text = stringResource(R.string.control_panel), @@ -285,7 +279,7 @@ fun ControlPanel( color = MaterialTheme.colorScheme.onSurface ) IconButton(onClick = onCloseClick) { - Icon(Icons.Default.Close, contentDescription = "Close", tint = MaterialTheme.colorScheme.error) + Icon(painter = painterResource(id = R.drawable.ic_close), contentDescription = "Close", tint = MaterialTheme.colorScheme.error) } } @@ -310,7 +304,7 @@ fun ControlPanel( ) { IconButton(onClick = onMoveUp) { Icon( - imageVector = Icons.Default.KeyboardArrowUp, + painter = painterResource(id = R.drawable.ic_keyboard_arrow_up), contentDescription = "Move Up", tint = MaterialTheme.colorScheme.primary ) @@ -321,7 +315,7 @@ fun ControlPanel( ) { IconButton(onClick = onMoveLeft) { Icon( - imageVector = Icons.AutoMirrored.Filled.KeyboardArrowLeft, + painter = painterResource(id = R.drawable.ic_keyboard_arrow_left), contentDescription = "Move Left", tint = MaterialTheme.colorScheme.primary ) @@ -340,7 +334,7 @@ fun ControlPanel( IconButton(onClick = onMoveRight) { Icon( - imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight, + painter = painterResource(id = R.drawable.ic_keyboard_arrow_right), contentDescription = "Move Right", tint = MaterialTheme.colorScheme.primary ) @@ -349,7 +343,7 @@ fun ControlPanel( IconButton(onClick = onMoveDown) { Icon( - imageVector = Icons.Default.KeyboardArrowDown, + painter = painterResource(id = R.drawable.ic_keyboard_arrow_down), contentDescription = "Move Down", tint = MaterialTheme.colorScheme.primary ) diff --git a/app/src/main/java/net/rpcsx/ui/channels/UpdateChannelListScreen.kt b/app/src/main/java/net/rpcsx/ui/channels/UpdateChannelListScreen.kt index 0ca625c2..fda9ca96 100644 --- a/app/src/main/java/net/rpcsx/ui/channels/UpdateChannelListScreen.kt +++ b/app/src/main/java/net/rpcsx/ui/channels/UpdateChannelListScreen.kt @@ -1,6 +1,5 @@ package net.rpcsx.ui.channels -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer @@ -11,9 +10,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft -import androidx.compose.material.icons.filled.Add import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults @@ -37,6 +33,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp @@ -108,7 +105,7 @@ fun UpdateChannelListScreen( IconButton( onClick = navigateBack ) { - Icon(imageVector = Icons.AutoMirrored.Default.KeyboardArrowLeft, null) + Icon(painter = painterResource(id = R.drawable.ic_keyboard_arrow_left), null) } }, actions = actions @@ -178,7 +175,7 @@ fun UpdateChannelListScreen( elevation = ButtonDefaults.elevatedButtonElevation(defaultElevation = 4.dp) ) { Icon( - imageVector = Icons.Default.Add, contentDescription = "Add Source" + painter = painterResource(id = R.drawable.ic_add), contentDescription = "Add Source" ) } } diff --git a/app/src/main/java/net/rpcsx/ui/channels/UpdateChannelsScreen.kt b/app/src/main/java/net/rpcsx/ui/channels/UpdateChannelsScreen.kt index cddaab21..07ae38d8 100644 --- a/app/src/main/java/net/rpcsx/ui/channels/UpdateChannelsScreen.kt +++ b/app/src/main/java/net/rpcsx/ui/channels/UpdateChannelsScreen.kt @@ -4,8 +4,6 @@ import android.content.Context import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -19,6 +17,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp @@ -73,7 +72,7 @@ fun UpdateChannelsScreen( IconButton( onClick = navigateBack ) { - Icon(imageVector = Icons.AutoMirrored.Default.KeyboardArrowLeft, null) + Icon(painter = painterResource(id = R.drawable.ic_keyboard_arrow_left), null) } }) }) { paddingValues -> diff --git a/app/src/main/java/net/rpcsx/ui/drivers/GpuDriversScreen.kt b/app/src/main/java/net/rpcsx/ui/drivers/GpuDriversScreen.kt index e591719e..a26b7f6e 100644 --- a/app/src/main/java/net/rpcsx/ui/drivers/GpuDriversScreen.kt +++ b/app/src/main/java/net/rpcsx/ui/drivers/GpuDriversScreen.kt @@ -22,9 +22,6 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft -import androidx.compose.material.icons.filled.Add import androidx.compose.material3.AlertDialog import androidx.compose.material3.BasicAlertDialog import androidx.compose.material3.Button @@ -61,6 +58,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp @@ -173,7 +171,7 @@ fun GpuDriversScreen(navigateBack: () -> Unit) { IconButton( onClick = navigateBack ) { - Icon(imageVector = Icons.AutoMirrored.Default.KeyboardArrowLeft, null) + Icon(painter = painterResource(id = R.drawable.ic_keyboard_arrow_left), null) } }) }) { paddingValues -> @@ -268,7 +266,7 @@ fun GpuDriversScreen(navigateBack: () -> Unit) { Text(stringResource(R.string.installing)) } else { Icon( - imageVector = Icons.Default.Add, + painter = painterResource(id = R.drawable.ic_add), contentDescription = "Install Driver" ) } diff --git a/app/src/main/java/net/rpcsx/ui/games/GamesScreen.kt b/app/src/main/java/net/rpcsx/ui/games/GamesScreen.kt index 668ac0c4..6a662027 100644 --- a/app/src/main/java/net/rpcsx/ui/games/GamesScreen.kt +++ b/app/src/main/java/net/rpcsx/ui/games/GamesScreen.kt @@ -21,9 +21,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Delete -import androidx.compose.material.icons.outlined.Lock import androidx.compose.material3.AlertDialog import androidx.compose.material3.Card import androidx.compose.material3.CircularProgressIndicator @@ -54,6 +51,7 @@ import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview @@ -137,7 +135,7 @@ fun GameItem(game: Game) { if (game.progressList.isEmpty()) { DropdownMenuItem( text = { Text(stringResource(R.string.delete)) }, - leadingIcon = { Icon(Icons.Outlined.Delete, contentDescription = null) }, + leadingIcon = { Icon(painter = painterResource(id = R.drawable.ic_delete), contentDescription = null) }, onClick = { menuExpanded.value = false val deleteProgress = ProgressRepository.create(context, context.getString(R.string.deleting_game)) @@ -321,7 +319,7 @@ fun GameItem(game: Game) { }) { Icon( - Icons.Outlined.Lock, + painter = painterResource(id = R.drawable.ic_lock), contentDescription = "Game is locked", modifier = Modifier .size(30.dp) diff --git a/app/src/main/java/net/rpcsx/ui/navigation/AppNavHost.kt b/app/src/main/java/net/rpcsx/ui/navigation/AppNavHost.kt index 10d90fd4..41fd535e 100644 --- a/app/src/main/java/net/rpcsx/ui/navigation/AppNavHost.kt +++ b/app/src/main/java/net/rpcsx/ui/navigation/AppNavHost.kt @@ -26,11 +26,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Add -import androidx.compose.material.icons.filled.Menu -import androidx.compose.material.icons.filled.Settings -import androidx.compose.material.icons.outlined.Info import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.DrawerValue @@ -56,7 +51,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector @@ -593,7 +587,7 @@ fun GamesDestination( NavigationDrawerItem( label = { Text(stringResource(R.string.settings)) }, selected = false, - icon = { Icon(Icons.Default.Settings, null) }, + icon = { Icon(painter = painterResource(id = R.drawable.ic_settings), null) }, onClick = navigateToSettings ) @@ -649,7 +643,7 @@ fun GamesDestination( NavigationDrawerItem( label = { Text(stringResource(R.string.about)) }, selected = false, - icon = { Icon(Icons.Outlined.Info, contentDescription = null) }, + icon = { Icon(painter = painterResource(id = R.drawable.ic_info), contentDescription = null) }, onClick = { val versionInfo = "UI: ${BuildConfig.Version}\nRPCSX: ${RpcsxUpdater.getCurrentVersion()}" AlertDialogQueue.showDialog( @@ -705,7 +699,7 @@ fun GamesDestination( } }) { Icon( - imageVector = Icons.Filled.Menu, + painter = painterResource(id = R.drawable.ic_menu), contentDescription = "Open menu" ) } @@ -781,7 +775,7 @@ fun DropUpFloatingActionButton( FloatingActionButton( onClick = { expanded = !expanded } ) { - Icon(Icons.Filled.Add, contentDescription = "Add") + Icon(painter = painterResource(id = R.drawable.ic_add), contentDescription = "Add") } } } diff --git a/app/src/main/java/net/rpcsx/ui/settings/SettingsScreen.kt b/app/src/main/java/net/rpcsx/ui/settings/SettingsScreen.kt index f86575c0..a20b45d2 100644 --- a/app/src/main/java/net/rpcsx/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/net/rpcsx/ui/settings/SettingsScreen.kt @@ -33,12 +33,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.Person -import androidx.compose.material.icons.filled.Search -import androidx.compose.material.icons.filled.Share import androidx.compose.material3.Button import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.HorizontalDivider @@ -201,7 +195,7 @@ fun AdvancedSettingsScreen( onSearch = { expanded = false }, placeholder = { Text(stringResource(R.string.search)) }, leadingIcon = { - Icon(Icons.Default.Search, null) + Icon(painter = painterResource(id = R.drawable.ic_search), null) }, trailingIcon = { IconButton(onClick = { @@ -211,7 +205,7 @@ fun AdvancedSettingsScreen( isSearching = false } }) { - Icon(Icons.Default.Close, null) + Icon(painter = painterResource(id = R.drawable.ic_close), null) } }, expanded = expanded, @@ -235,7 +229,7 @@ fun AdvancedSettingsScreen( modifier = Modifier.padding(0.dp) ) { Icon( - imageVector = Icons.AutoMirrored.Default.KeyboardArrowLeft, + painter = painterResource(id = R.drawable.ic_keyboard_arrow_left), contentDescription = null ) } @@ -246,7 +240,7 @@ fun AdvancedSettingsScreen( onClick = { isSearching = true } ) { Icon( - imageVector = Icons.Default.Search, + painter = painterResource(id = R.drawable.ic_search), contentDescription = "Search" ) } @@ -563,7 +557,7 @@ fun SettingsScreen( IconButton( onClick = navigateBack ) { - Icon(imageVector = Icons.AutoMirrored.Default.KeyboardArrowLeft, null) + Icon(painter = painterResource(id = R.drawable.ic_keyboard_arrow_left), null) } }) } @@ -620,7 +614,7 @@ fun SettingsScreen( title = stringResource(R.string.users), description = "${stringResource(R.string.active_user)}: ${UserRepository.getUsername(activeUser)}", icon = { - PreferenceIcon(icon = Icons.Default.Person) + PreferenceIcon(icon = painterResource(id = R.drawable.ic_person)) }, onClick = { navigateTo("users") @@ -697,7 +691,7 @@ fun SettingsScreen( item(key = "share_logs") { HomePreference( title = stringResource(R.string.share_log), - icon = { Icon(imageVector = Icons.Default.Share, contentDescription = null) }, + icon = { Icon(painter = painterResource(id = R.drawable.ic_share), contentDescription = null) }, description = stringResource(R.string.share_log_description), onClick = { val file = DocumentFile.fromSingleUri( @@ -743,7 +737,7 @@ fun ControllerSettings( IconButton( onClick = navigateBack ) { - Icon(imageVector = Icons.AutoMirrored.Default.KeyboardArrowLeft, null) + Icon(painter = painterResource(id = R.drawable.ic_keyboard_arrow_left), null) } } ) diff --git a/app/src/main/java/net/rpcsx/ui/settings/components/base/BasePreference.kt b/app/src/main/java/net/rpcsx/ui/settings/components/base/BasePreference.kt index c051f7b3..53bcbeb8 100644 --- a/app/src/main/java/net/rpcsx/ui/settings/components/base/BasePreference.kt +++ b/app/src/main/java/net/rpcsx/ui/settings/components/base/BasePreference.kt @@ -9,18 +9,17 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight -import androidx.compose.material.icons.filled.Search import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import net.rpcsx.R import net.rpcsx.ui.common.ComposePreview import net.rpcsx.ui.settings.components.LocalPreferenceState import net.rpcsx.ui.settings.components.core.PreferenceIcon @@ -109,8 +108,8 @@ private fun BasePreferencePreview() { BasePreference( title = { PreferenceTitle("Preference Title") }, subContent = { PreferenceSubtitle("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ullamcorper tempor imperdiet. Tempor magna proident pariatur nonumy iusto, sint laborum possim accumsan, elit nonummy facer enim autem eiusmod lobortis reprehenderit molestie vel esse aliquyam cupiditat velit nisi aliquid ipsum. Erat accusam reprehenderit. Feugiat aliquyam iure. Nisi ex officia.", maxLines = 2) }, - leadingContent = { PreferenceIcon(Icons.Default.Search) }, - trailingContent = { PreferenceIcon(Icons.AutoMirrored.Default.KeyboardArrowRight) }, + leadingContent = { PreferenceIcon(painterResource(id = R.drawable.ic_search)) }, + trailingContent = { PreferenceIcon(painterResource(id = R.drawable.ic_keyboard_arrow_right)) }, onClick = {} ) } @@ -123,8 +122,8 @@ private fun BasePreferenceDisabledPreview() { BasePreference( title = { PreferenceTitle("Preference Title") }, subContent = { PreferenceSubtitle("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ullamcorper tempor imperdiet. Tempor magna proident pariatur nonumy iusto, sint laborum possim accumsan, elit nonummy facer enim autem eiusmod lobortis reprehenderit molestie vel esse aliquyam cupiditat velit nisi aliquid ipsum. Erat accusam reprehenderit. Feugiat aliquyam iure. Nisi ex officia.", maxLines = 2) }, - leadingContent = { PreferenceIcon(Icons.Default.Search) }, - trailingContent = { PreferenceIcon(Icons.AutoMirrored.Default.KeyboardArrowRight) }, + leadingContent = { PreferenceIcon(painterResource(id = R.drawable.ic_search)) }, + trailingContent = { PreferenceIcon(painterResource(id = R.drawable.ic_keyboard_arrow_right)) }, enabled = false, onClick = {} ) diff --git a/app/src/main/java/net/rpcsx/ui/settings/components/core/DeletableListItem.kt b/app/src/main/java/net/rpcsx/ui/settings/components/core/DeletableListItem.kt index 391eed30..460b5f08 100644 --- a/app/src/main/java/net/rpcsx/ui/settings/components/core/DeletableListItem.kt +++ b/app/src/main/java/net/rpcsx/ui/settings/components/core/DeletableListItem.kt @@ -6,8 +6,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Delete import androidx.compose.material3.Icon import androidx.compose.material3.SwipeToDismissBox import androidx.compose.material3.SwipeToDismissBoxValue @@ -16,7 +14,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp +import net.rpcsx.R @Composable fun DeletableListItem( @@ -51,7 +51,7 @@ fun DeletableListItem( contentAlignment = Alignment.CenterEnd, ) { Icon( - imageVector = Icons.Default.Delete, + painter = painterResource(id = R.drawable.ic_delete), contentDescription = "Delete", tint = Color.White, ) diff --git a/app/src/main/java/net/rpcsx/ui/settings/components/core/MaterialSwitch.kt b/app/src/main/java/net/rpcsx/ui/settings/components/core/MaterialSwitch.kt deleted file mode 100644 index 327dddd7..00000000 --- a/app/src/main/java/net/rpcsx/ui/settings/components/core/MaterialSwitch.kt +++ /dev/null @@ -1,100 +0,0 @@ - -package net.rpcsx.ui.settings.components.core - -import androidx.compose.animation.animateColor -import androidx.compose.animation.core.FastOutSlowInEasing -import androidx.compose.animation.core.animateDp -import androidx.compose.animation.core.animateFloat -import androidx.compose.animation.core.tween -import androidx.compose.animation.core.updateTransition -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.offset -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.SwitchDefaults -import androidx.compose.runtime.Composable -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.draw.shadow -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp - -@Composable -fun MaterialSwitch( - modifier: Modifier = Modifier, - checked: Boolean = true, - enabled: Boolean = true, - onCheckedChange: (Boolean) -> Unit, -) { - val colors = SwitchDefaults.colors() - val transition = updateTransition(targetState = checked, label = "switchTransition") - - val thumbOffset by transition.animateFloat( - transitionSpec = { tween(300, easing = FastOutSlowInEasing) }, - label = "thumbOffset" - ) { if (it) 24f else 6f } - - val thumbSize by transition.animateDp( - transitionSpec = { tween(300) }, - label = "thumbSize" - ) { if (it) 24.dp else 15.dp } - - val trackColor by transition.animateColor( - transitionSpec = { tween(300) }, - label = "trackColor" - ) { if (it) if (enabled) colors.checkedTrackColor else colors.disabledCheckedTrackColor - else if (enabled) colors.uncheckedTrackColor else colors.disabledUncheckedTrackColor - } - - val thumbColor by transition.animateColor( - transitionSpec = { tween(300) }, - label = "thumbColor" - ) { if (it) if (enabled) colors.checkedThumbColor else colors.disabledCheckedThumbColor - else if (enabled) colors.uncheckedThumbColor else colors.disabledUncheckedThumbColor - } - - val borderColor by transition.animateColor( - transitionSpec = { tween(300) }, - label = "borderColor" - ) { if (it) if (enabled) colors.checkedBorderColor else colors.disabledCheckedBorderColor - else if (enabled) colors.uncheckedBorderColor else colors.disabledUncheckedBorderColor - } - - Box( - modifier = modifier - .width(52.dp) - .height(32.dp) - .clip(RoundedCornerShape(16.dp)) - .border(if (!checked) 2.dp else 0.dp, borderColor, RoundedCornerShape(16.dp)) - .background(trackColor) - .clickable(enabled) { onCheckedChange(!checked) }, - contentAlignment = Alignment.CenterStart - ) { - Box( - modifier = Modifier - .size(thumbSize) - .offset(x = thumbOffset.dp) - .shadow(4.dp, CircleShape) - .clip(CircleShape) - .background(thumbColor) - ) - } -} - -@Preview -@Composable -fun MaterialSwitchPreview() { - var switchState = true - MaterialSwitch( - checked = switchState, - onCheckedChange = { switchState = it } - ) -} diff --git a/app/src/main/java/net/rpcsx/ui/settings/components/preference/CheckboxPreference.kt b/app/src/main/java/net/rpcsx/ui/settings/components/preference/CheckboxPreference.kt index c680525f..3ddebac2 100644 --- a/app/src/main/java/net/rpcsx/ui/settings/components/preference/CheckboxPreference.kt +++ b/app/src/main/java/net/rpcsx/ui/settings/components/preference/CheckboxPreference.kt @@ -1,10 +1,10 @@ package net.rpcsx.ui.settings.components.preference -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Build import androidx.compose.material3.Checkbox import androidx.compose.material3.CheckboxColors import androidx.compose.material3.CheckboxDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -12,7 +12,9 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.PreviewLightDark +import net.rpcsx.R import net.rpcsx.ui.common.ComposePreview import net.rpcsx.ui.settings.components.core.PreferenceIcon import net.rpcsx.ui.settings.components.core.PreferenceSubtitle @@ -78,9 +80,9 @@ private fun CheckboxPreferencePreview() { var isChecked by remember { mutableStateOf(true) } CheckboxPreference( checked = isChecked, - title = "Enable Something", + title = { Text("Enable Something") }, subtitle = { PreferenceSubtitle(text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.") }, - leadingIcon = Icons.Default.Build + leadingIcon = { Icon(painter = painterResource(id = R.drawable.ic_build), contentDescription = "Build") } ) { isChecked = it } } } @@ -92,9 +94,9 @@ private fun CheckboxPreferenceDisabledPreview() { var isChecked by remember { mutableStateOf(false) } CheckboxPreference( checked = isChecked, - title = "Enable Something", + title = { Text("Enable Something") }, subtitle = { PreferenceSubtitle(text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.") }, - leadingIcon = Icons.Default.Build, + leadingIcon = { Icon(painter = painterResource(id = R.drawable.ic_build), contentDescription = "Build") }, enabled = false ) { isChecked = it } } diff --git a/app/src/main/java/net/rpcsx/ui/settings/components/preference/ListPreference.kt b/app/src/main/java/net/rpcsx/ui/settings/components/preference/ListPreference.kt index 41433e63..9b5a1f66 100644 --- a/app/src/main/java/net/rpcsx/ui/settings/components/preference/ListPreference.kt +++ b/app/src/main/java/net/rpcsx/ui/settings/components/preference/ListPreference.kt @@ -10,8 +10,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.selection.selectable -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Star import androidx.compose.material3.MaterialTheme import androidx.compose.material3.RadioButton import androidx.compose.material3.Text @@ -26,11 +24,13 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.painterResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import net.rpcsx.R import net.rpcsx.ui.common.ComposePreview import net.rpcsx.ui.settings.components.base.BaseDialogPreference import net.rpcsx.ui.settings.components.core.PreferenceIcon @@ -208,7 +208,7 @@ private fun SingleSelectionDialogPreview() { onValueChange = { currentValue = it }, values = (1..10).toList(), title = { PreferenceTitle("Choose a number") }, - icon = { PreferenceIcon(Icons.Default.Star) } + icon = { PreferenceIcon(painterResource(id = R.drawable.ic_star)) } ) } } @@ -229,7 +229,7 @@ private fun SingleSelectionDialogDisabledPreview() { onValueChange = { currentValue = it }, values = (1..10).toList(), title = { PreferenceTitle("Choose a number") }, - icon = { PreferenceIcon(Icons.Default.Star) }, + icon = { PreferenceIcon(painterResource(id = R.drawable.ic_star)) }, enabled = false ) } diff --git a/app/src/main/java/net/rpcsx/ui/settings/components/preference/RegularPreference.kt b/app/src/main/java/net/rpcsx/ui/settings/components/preference/RegularPreference.kt index 58cd729a..6f7e0194 100644 --- a/app/src/main/java/net/rpcsx/ui/settings/components/preference/RegularPreference.kt +++ b/app/src/main/java/net/rpcsx/ui/settings/components/preference/RegularPreference.kt @@ -1,12 +1,13 @@ package net.rpcsx.ui.settings.components.preference -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight -import androidx.compose.material.icons.filled.Settings +import androidx.compose.material3.Icon +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.PreviewLightDark +import net.rpcsx.R import net.rpcsx.ui.common.ComposePreview import net.rpcsx.ui.settings.components.base.BasePreference import net.rpcsx.ui.settings.components.core.PreferenceIcon @@ -76,10 +77,10 @@ fun RegularPreference( private fun RegularPreferencePreview() { ComposePreview { RegularPreference( - title = "Install Firmware", - leadingIcon = Icons.Default.Settings, + title = { Text("Install Firmware") }, + leadingIcon = { Icon(painterResource(id = R.drawable.ic_settings), contentDescription = "Settings") }, subtitle = { PreferenceSubtitle(text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ullamcorper tempor imperdiet. Tempor magna proident pariatur nonumy iusto, sint laborum possim accumsan, elit nonummy facer enim autem eiusmod lobortis reprehenderit molestie vel esse aliquyam cupiditat velit nisi aliquid ipsum. Erat accusam reprehenderit. Feugiat aliquyam iure. Nisi ex officia.") }, - trailingContent = { PreferenceIcon(icon = Icons.AutoMirrored.Default.KeyboardArrowRight) }, + trailingContent = { PreferenceIcon(icon = painterResource(id = R.drawable.ic_keyboard_arrow_right)) }, onClick = { } ) } @@ -90,10 +91,10 @@ private fun RegularPreferencePreview() { private fun RegularPreferenceDisabledPreview() { ComposePreview { RegularPreference( - title = "Advanced Settings", - leadingIcon = Icons.Default.Settings, + title = { Text("Advanced Settings") }, + leadingIcon = { Icon(painterResource(id = R.drawable.ic_settings), contentDescription = "Settings") }, subtitle = { PreferenceSubtitle(text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ullamcorper tempor imperdiet. Tempor magna proident pariatur nonumy iusto, sint laborum possim accumsan, elit nonummy facer enim autem eiusmod lobortis reprehenderit molestie vel esse aliquyam cupiditat velit nisi aliquid ipsum. Erat accusam reprehenderit. Feugiat aliquyam iure. Nisi ex officia.") }, - trailingContent = { PreferenceIcon(icon = Icons.AutoMirrored.Default.KeyboardArrowRight) }, + trailingContent = { PreferenceIcon(icon = painterResource(id = R.drawable.ic_keyboard_arrow_right)) }, enabled = false, onClick = { } ) diff --git a/app/src/main/java/net/rpcsx/ui/settings/components/preference/SliderPreference.kt b/app/src/main/java/net/rpcsx/ui/settings/components/preference/SliderPreference.kt index d44867fd..462032e4 100644 --- a/app/src/main/java/net/rpcsx/ui/settings/components/preference/SliderPreference.kt +++ b/app/src/main/java/net/rpcsx/ui/settings/components/preference/SliderPreference.kt @@ -3,9 +3,8 @@ package net.rpcsx.ui.settings.components.preference import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.text.KeyboardOptions -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Refresh import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Icon import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Slider import androidx.compose.material3.SliderColors @@ -20,6 +19,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.tooling.preview.PreviewLightDark @@ -36,7 +36,7 @@ fun SliderPreference( onValueChange: (Float) -> Unit, title: String, modifier: Modifier = Modifier, - leadingIcon: ImageVector? = null, + leadingIcon: @Composable (() -> Unit)? = null, subtitle: String? = null, enabled: Boolean = true, valueRange: ClosedFloatingPointRange = 0f..1f, @@ -59,7 +59,7 @@ fun SliderPreference( RegularPreference( modifier = modifier, title = { PreferenceTitle(title = title) }, - leadingIcon = { PreferenceIcon(icon = leadingIcon) }, + leadingIcon = leadingIcon, subtitle = { subtitle?.let { PreferenceSubtitle(text = it) } }, enabled = enabled, onClick = { showDialog = true }, @@ -148,7 +148,7 @@ private fun SliderPreferencePreview() { value = value, onValueChange = { value = it }, title = "Refresh Duration", - leadingIcon = Icons.Default.Refresh, + leadingIcon = { Icon(painterResource(id = R.drawable.ic_refresh), contentDescription = "Refresh") }, subtitle = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit." ) } @@ -163,7 +163,7 @@ private fun SliderPreferenceDisabledPreview() { value = value, onValueChange = { value = it }, title = "Refresh Duration", - leadingIcon = Icons.Default.Refresh, + leadingIcon = { Icon(painterResource(id = R.drawable.ic_refresh), contentDescription = "Refresh") }, subtitle = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.", enabled = false ) diff --git a/app/src/main/java/net/rpcsx/ui/settings/components/preference/SwitchPreference.kt b/app/src/main/java/net/rpcsx/ui/settings/components/preference/SwitchPreference.kt index 54a1f921..9cbabb9e 100644 --- a/app/src/main/java/net/rpcsx/ui/settings/components/preference/SwitchPreference.kt +++ b/app/src/main/java/net/rpcsx/ui/settings/components/preference/SwitchPreference.kt @@ -1,9 +1,9 @@ package net.rpcsx.ui.settings.components.preference -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Build -import androidx.compose.material3.SwitchColors +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SwitchDefaults +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -11,9 +11,12 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.PreviewLightDark +import com.github.ishan09811.materialswitch.MaterialSwitch +import com.github.ishan09811.materialswitch.MaterialSwitchColors +import net.rpcsx.R import net.rpcsx.ui.common.ComposePreview -import net.rpcsx.ui.settings.components.core.MaterialSwitch import net.rpcsx.ui.settings.components.core.PreferenceIcon import net.rpcsx.ui.settings.components.core.PreferenceSubtitle import net.rpcsx.ui.settings.components.core.PreferenceTitle @@ -22,11 +25,14 @@ import net.rpcsx.ui.settings.components.core.PreferenceTitle fun SwitchPreference( checked: Boolean, title: @Composable () -> Unit, - leadingIcon: @Composable () -> Unit = {}, + leadingIcon: @Composable (() -> Unit)? = null, modifier: Modifier = Modifier, subtitle: @Composable (() -> Unit)? = null, enabled: Boolean = true, - switchColors: SwitchColors = SwitchDefaults.colors(), + switchColors: MaterialSwitchColors = MaterialSwitchColors( + MaterialTheme.colorScheme, + SwitchDefaults.colors() + ), onClick: (Boolean) -> Unit, onLongClick: () -> Unit = {} ) { @@ -40,7 +46,8 @@ fun SwitchPreference( MaterialSwitch( checked = checked, onCheckedChange = { onValueUpdated(it) }, - enabled = enabled + enabled = enabled, + colors = switchColors ) }, enabled = enabled, @@ -57,7 +64,10 @@ fun SwitchPreference( modifier: Modifier = Modifier, subtitle: @Composable (() -> Unit)? = null, enabled: Boolean = true, - switchColors: SwitchColors = SwitchDefaults.colors(), + switchColors: MaterialSwitchColors = MaterialSwitchColors( + MaterialTheme.colorScheme, + SwitchDefaults.colors() + ), onClick: (Boolean) -> Unit, onLongClick: () -> Unit = {} ) { @@ -81,9 +91,9 @@ private fun SwitchPreview() { var switchState by remember { mutableStateOf(true) } SwitchPreference( checked = switchState, - title = "Enable Something", + title = { Text("Enable Something") }, subtitle = { PreferenceSubtitle(text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.") }, - leadingIcon = Icons.Default.Build, + leadingIcon = { Icon(painterResource(id = R.drawable.ic_build), contentDescription = "Build") }, onClick = { switchState = it } @@ -98,9 +108,9 @@ private fun SwitchDisabledPreview() { var switchState by remember { mutableStateOf(true) } SwitchPreference( checked = switchState, - title = "Enable Something", + title = { Text("Enable Something") }, subtitle = { PreferenceSubtitle(text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.") }, - leadingIcon = Icons.Default.Build, + leadingIcon = { Icon(painterResource(id = R.drawable.ic_build), contentDescription = "Build") }, enabled = false, onClick = { switchState = it diff --git a/app/src/main/java/net/rpcsx/ui/user/UsersScreen.kt b/app/src/main/java/net/rpcsx/ui/user/UsersScreen.kt index a7c3ddee..bab5cdf4 100644 --- a/app/src/main/java/net/rpcsx/ui/user/UsersScreen.kt +++ b/app/src/main/java/net/rpcsx/ui/user/UsersScreen.kt @@ -12,8 +12,6 @@ import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -29,6 +27,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import net.rpcsx.EmulatorState @@ -94,7 +93,7 @@ fun UsersScreen( navigationIcon = { IconButton(onClick = navigateBack) { Icon( - imageVector = Icons.AutoMirrored.Default.KeyboardArrowLeft, + painter = painterResource(id = R.drawable.ic_keyboard_arrow_left), contentDescription = null ) } diff --git a/app/src/main/java/net/rpcsx/utils/GitHub.kt b/app/src/main/java/net/rpcsx/utils/GitHub.kt index 84135f4f..6e06a69c 100644 --- a/app/src/main/java/net/rpcsx/utils/GitHub.kt +++ b/app/src/main/java/net/rpcsx/utils/GitHub.kt @@ -95,8 +95,8 @@ object GitHub { val request = Request.Builder().url(url).build() try { val response = client.newCall(request).execute() - val body = response.body?.string() - if (!response.isSuccessful || body == null) { + val body = response.body.string() + if (!response.isSuccessful) { return@withContext GetResult.Error(response.code, response.message) } @@ -177,11 +177,11 @@ object GitHub { .build() client.newCall(partRequest).execute().use { partResponse -> - if (!partResponse.isSuccessful || partResponse.body == null) { + if (!partResponse.isSuccessful) { throw IOException("Part $i failed") } - val inputStream = partResponse.body!!.byteStream() + val inputStream = partResponse.body.byteStream() val raf = RandomAccessFile(destinationFile, "rw") raf.seek(start) diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml new file mode 100644 index 00000000..d6fd3d37 --- /dev/null +++ b/app/src/main/res/drawable/ic_add.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_build.xml b/app/src/main/res/drawable/ic_build.xml new file mode 100644 index 00000000..6ea7c5c6 --- /dev/null +++ b/app/src/main/res/drawable/ic_build.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml new file mode 100644 index 00000000..7a0ff35d --- /dev/null +++ b/app/src/main/res/drawable/ic_close.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml new file mode 100644 index 00000000..d1ed443c --- /dev/null +++ b/app/src/main/res/drawable/ic_delete.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 00000000..cfe4882a --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_keyboard_arrow_down.xml b/app/src/main/res/drawable/ic_keyboard_arrow_down.xml new file mode 100644 index 00000000..3f4697d6 --- /dev/null +++ b/app/src/main/res/drawable/ic_keyboard_arrow_down.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_keyboard_arrow_left.xml b/app/src/main/res/drawable/ic_keyboard_arrow_left.xml new file mode 100644 index 00000000..7c486f84 --- /dev/null +++ b/app/src/main/res/drawable/ic_keyboard_arrow_left.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_keyboard_arrow_right.xml b/app/src/main/res/drawable/ic_keyboard_arrow_right.xml new file mode 100644 index 00000000..3d036ecb --- /dev/null +++ b/app/src/main/res/drawable/ic_keyboard_arrow_right.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_keyboard_arrow_up.xml b/app/src/main/res/drawable/ic_keyboard_arrow_up.xml new file mode 100644 index 00000000..62e05938 --- /dev/null +++ b/app/src/main/res/drawable/ic_keyboard_arrow_up.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_lock.xml b/app/src/main/res/drawable/ic_lock.xml new file mode 100644 index 00000000..cf535d06 --- /dev/null +++ b/app/src/main/res/drawable/ic_lock.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu.xml b/app/src/main/res/drawable/ic_menu.xml new file mode 100644 index 00000000..538d1cf6 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_person.xml b/app/src/main/res/drawable/ic_person.xml new file mode 100644 index 00000000..e9049c0f --- /dev/null +++ b/app/src/main/res/drawable/ic_person.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 00000000..f4302a5c --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml new file mode 100644 index 00000000..390774bb --- /dev/null +++ b/app/src/main/res/drawable/ic_search.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml new file mode 100644 index 00000000..bc7c2637 --- /dev/null +++ b/app/src/main/res/drawable/ic_settings.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_share.xml b/app/src/main/res/drawable/ic_share.xml new file mode 100644 index 00000000..8fb78f48 --- /dev/null +++ b/app/src/main/res/drawable/ic_share.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_star.xml b/app/src/main/res/drawable/ic_star.xml new file mode 100644 index 00000000..99b100a3 --- /dev/null +++ b/app/src/main/res/drawable/ic_star.xml @@ -0,0 +1,10 @@ + + + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7ef9b140..3fad2c53 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,25 +1,28 @@ [versions] -activityCompose = "1.10.1" -agp = "8.9.1" +activityCompose = "1.13.0" +agp = "8.13.2" coilCompose = "3.1.0" -kotlin = "2.1.10" -coreKtx = "1.16.0" +documentfile = "1.1.0" +kotlin = "2.3.20" +coreKtx = "1.18.0" junit = "4.13.2" junitVersion = "1.2.1" espressoCore = "3.6.1" -appcompat = "1.7.0" -kotlinxSerializationJson = "1.8.0" -squareupOkHttp3 = "4.12.0" -material = "1.12.0" +appcompat = "1.7.1" +kotlinxSerializationJson = "1.10.0" +squareupOkHttp3 = "5.3.2" +material = "1.13.0" constraintlayout = "2.2.1" -navigationCompose = "2.8.9" -activity = "1.10.1" +navigationCompose = "2.9.7" +activity = "1.13.0" uiToolingPreviewAndroid = "1.7.8" uiTooling = "1.7.8" +materialSwitch = "1.0.0" [libraries] androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activityCompose" } androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +androidx-documentfile = { module = "androidx.documentfile:documentfile", version.ref = "documentfile" } androidx-material3 = { module = "androidx.compose.material3:material3" } coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coilCompose" } junit = { group = "junit", name = "junit", version.ref = "junit" } @@ -34,6 +37,7 @@ androidx-activity = { group = "androidx.activity", name = "activity", version.re androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } androidx-ui-tooling-preview-android = { group = "androidx.compose.ui", name = "ui-tooling-preview-android", version.ref = "uiToolingPreviewAndroid" } androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "uiTooling" } +com-github-ishan09811-materialswitch = { group = "com.github.Ishan09811", name = "materialswitch", version.ref = "materialSwitch" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 160162fd..9b1a4409 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Sun Feb 23 17:37:34 MSK 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle.kts b/settings.gradle.kts index c929be0c..5a62eff5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,6 +16,7 @@ dependencyResolutionManagement { repositories { google() mavenCentral() + maven { url = uri("https://jitpack.io") } } }