From 197c20fbaaed5351405aa61677568eb09f496bd7 Mon Sep 17 00:00:00 2001 From: rushiiMachine <33725716+rushiiMachine@users.noreply.github.com> Date: Sun, 9 Feb 2025 18:49:51 -0800 Subject: [PATCH] feat: use `rememberSaveable` where applicable --- .../kotlin/com/aliucord/manager/network/utils/SemVer.kt | 5 ++++- .../kotlin/com/aliucord/manager/patcher/steps/StepGroup.kt | 5 ++++- .../ui/components/dialogs/CustomComponentVersionPicker.kt | 3 ++- .../com/aliucord/manager/ui/screens/about/AboutScreen.kt | 2 +- .../aliucord/manager/ui/screens/patching/PatchingScreen.kt | 7 ++++--- .../manager/ui/screens/patchopts/PatchOptionsScreen.kt | 4 ++-- 6 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/com/aliucord/manager/network/utils/SemVer.kt b/app/src/main/kotlin/com/aliucord/manager/network/utils/SemVer.kt index 315c2cd..548b813 100644 --- a/app/src/main/kotlin/com/aliucord/manager/network/utils/SemVer.kt +++ b/app/src/main/kotlin/com/aliucord/manager/network/utils/SemVer.kt @@ -1,6 +1,8 @@ package com.aliucord.manager.network.utils +import android.os.Parcelable import androidx.compose.runtime.Immutable +import kotlinx.parcelize.Parcelize import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable import kotlinx.serialization.descriptors.PrimitiveKind @@ -12,13 +14,14 @@ import kotlinx.serialization.encoding.Encoder * Parses a Semantic version in the format of `v1.0.0` (v[major].[minor].[patch]) */ @Immutable +@Parcelize @Serializable(SemVer.Serializer::class) data class SemVer( val major: Int, val minor: Int, val patch: Int, private val vPrefix: Boolean = false, -) : Comparable { +) : Comparable, Parcelable { override fun compareTo(other: SemVer): Int { val pairs = arrayOf( major to other.major, diff --git a/app/src/main/kotlin/com/aliucord/manager/patcher/steps/StepGroup.kt b/app/src/main/kotlin/com/aliucord/manager/patcher/steps/StepGroup.kt index 218a028..b1e386f 100644 --- a/app/src/main/kotlin/com/aliucord/manager/patcher/steps/StepGroup.kt +++ b/app/src/main/kotlin/com/aliucord/manager/patcher/steps/StepGroup.kt @@ -1,21 +1,24 @@ package com.aliucord.manager.patcher.steps +import android.os.Parcelable import androidx.annotation.StringRes import androidx.compose.runtime.Immutable import com.aliucord.manager.R +import kotlinx.parcelize.Parcelize /** * A group of steps that is shown under one section in the patching UI. * This has no functional impact other than organization. */ @Immutable +@Parcelize enum class StepGroup( /** * The UI name to display this group as */ @get:StringRes val localizedName: Int, -) { +) : Parcelable { Prepare(R.string.install_group_prepare), Download(R.string.install_group_download), Patch(R.string.install_group_patch), diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/CustomComponentVersionPicker.kt b/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/CustomComponentVersionPicker.kt index 4ae4657..7d897ed 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/CustomComponentVersionPicker.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/CustomComponentVersionPicker.kt @@ -5,6 +5,7 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.snapshots.SnapshotStateList import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -25,7 +26,7 @@ fun CustomComponentVersionPicker( onDelete: (SemVer) -> Unit, onCancel: () -> Unit, ) { - var selectedVersion by remember { mutableStateOf(null) } + var selectedVersion by rememberSaveable { mutableStateOf(null) } AlertDialog( properties = DialogProperties( diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/about/AboutScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/about/AboutScreen.kt index 44362a8..8665847 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/about/AboutScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/about/AboutScreen.kt @@ -131,7 +131,7 @@ private fun UserEntry(name: String, roles: String, username: String = name) { .clickable( onClick = { uriHandler.openUri("https://github.com/$username") }, indication = ripple(bounded = false, radius = 90.dp), - interactionSource = remember { MutableInteractionSource() } + interactionSource = remember(::MutableInteractionSource) ) .widthIn(min = 100.dp) ) { diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/patching/PatchingScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/patching/PatchingScreen.kt index e9fa0c9..25e9ee5 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/patching/PatchingScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/patching/PatchingScreen.kt @@ -13,6 +13,7 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.* import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color @@ -61,10 +62,10 @@ class PatchingScreen(private val data: PatchOptions) : Screen, Parcelable { val showMinimizationWarning = remember { !context.isIgnoringBatteryOptimizations() } // Exit warning dialog (dismiss itself if install process state changes, esp. for Success) - var showAbortWarning by remember(model.state.collectAsState().value) { mutableStateOf(false) } + var showAbortWarning by rememberSaveable(model.state.collectAsState().value) { mutableStateOf(false) } // The currently expanded step group on this screen - var expandedGroup by remember { mutableStateOf(StepGroup.Prepare) } + var expandedGroup by rememberSaveable { mutableStateOf(StepGroup.Prepare) } // Only show exit warning if currently working val onTryExit: () -> Unit = remember { @@ -210,7 +211,7 @@ class PatchingScreen(private val data: PatchOptions) : Screen, Parcelable { } item(key = "BUTTONS") { - var cacheCleared by remember { mutableStateOf(false) } + var cacheCleared by rememberSaveable { mutableStateOf(false) } val filteredState by remember { model.state.filter { it.isProgressChange } } .collectAsState(initial = PatchingScreenState.Working) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptionsScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptionsScreen.kt index 38b64cf..33d8543 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptionsScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptionsScreen.kt @@ -61,7 +61,7 @@ class PatchOptionsScreen( context.requestNoBatteryOptimizations() } - var showNetworkWarningDialog by rememberSaveable { mutableStateOf(model.isNetworkDangerous()) } + var showNetworkWarningDialog by remember { mutableStateOf(model.isNetworkDangerous()) } if (showNetworkWarningDialog) { NetworkWarningDialog( onConfirm = { showNetworkWarningDialog = false }, @@ -92,7 +92,7 @@ class PatchOptionsScreen( textAlign = TextAlign.Center, ) - var animatedVersion by remember { mutableStateOf(DiscordVersion.None) } + var animatedVersion by rememberSaveable { mutableStateOf(DiscordVersion.None) } LaunchedEffect(Unit) { animatedVersion = supportedVersion }