From 0d26df03f463195dae550240c7f652680763079c Mon Sep 17 00:00:00 2001 From: Robert Date: Sun, 28 Dec 2025 19:13:00 +0100 Subject: [PATCH] fix: Update selected patch count when SelectionState changes (#2896) --- .../manager/ui/screen/SelectedAppInfoScreen.kt | 11 ++++++----- .../manager/ui/viewmodel/SelectedAppInfoViewModel.kt | 11 +++-------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/app/revanced/manager/ui/screen/SelectedAppInfoScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/SelectedAppInfoScreen.kt index cd9ed1d3..6c668870 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/SelectedAppInfoScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/SelectedAppInfoScreen.kt @@ -25,6 +25,7 @@ import androidx.compose.material3.TextButton import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope @@ -76,12 +77,12 @@ fun SelectedAppInfoScreen( val bundles by vm.bundleInfoFlow.collectAsStateWithLifecycle(emptyList()) val allowIncompatiblePatches by vm.prefs.disablePatchVersionCompatCheck.getAsState() - val patches = remember(bundles, allowIncompatiblePatches) { - vm.getPatches(bundles, allowIncompatiblePatches) - } - val selectedPatchCount = remember(patches) { - patches.values.sumOf { it.size } + val patches by remember { + derivedStateOf { + vm.getPatches(bundles, allowIncompatiblePatches) + } } + val selectedPatchCount = patches.values.sumOf { it.size } val launcher = rememberLauncherForActivityResult( contract = ActivityResultContracts.StartActivityForResult(), diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/SelectedAppInfoViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/SelectedAppInfoViewModel.kt index 8b9003a9..665b353b 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/SelectedAppInfoViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/SelectedAppInfoViewModel.kt @@ -8,7 +8,6 @@ import android.os.Parcelable import android.util.Log import androidx.activity.result.ActivityResult import androidx.annotation.StringRes -import androidx.compose.runtime.MutableState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -129,8 +128,6 @@ class SelectedAppInfoViewModel( } var options: Options by savedStateHandle.saveable { - val state = mutableStateOf(emptyMap()) - viewModelScope.launch { if (!persistConfiguration) return@launch // TODO: save options for patched apps. val bundlePatches = bundleInfoFlow.first() @@ -141,7 +138,7 @@ class SelectedAppInfoViewModel( } } - state + mutableStateOf(emptyMap()) } private set @@ -149,8 +146,6 @@ class SelectedAppInfoViewModel( if (input.patches != null) return@saveable mutableStateOf(SelectionState.Customized(input.patches)) - val selection: MutableState = mutableStateOf(SelectionState.Default) - // Try to get the previous selection if customization is enabled. viewModelScope.launch { if (!prefs.disableSelectionWarning.get()) return@launch @@ -160,7 +155,7 @@ class SelectedAppInfoViewModel( selectionState = SelectionState.Customized(previous) } - selection + mutableStateOf(SelectionState.Default) } var showSourceSelector by mutableStateOf(false) @@ -311,7 +306,7 @@ class SelectedAppInfoViewModel( } } - enum class Error(@StringRes val resourceId: Int) { + enum class Error(@param:StringRes val resourceId: Int) { NoPlugins(R.string.downloader_no_plugins_available) }