From 08cec674bbbe5297090ac5ee6039569975fbe9e7 Mon Sep 17 00:00:00 2001 From: Ax333l Date: Fri, 3 Oct 2025 17:28:30 +0200 Subject: [PATCH] feat: Toggle to use pre-release versions of ReVanced Patches --- .../domain/manager/PreferencesManager.kt | 1 + .../manager/network/api/ReVancedAPI.kt | 2 +- .../bundle/BundleInformationDialog.kt | 31 ++++++++++++++++++- .../manager/ui/viewmodel/MainViewModel.kt | 1 + app/src/main/res/values/strings.xml | 2 ++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt b/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt index c2a40f68..b9363df6 100644 --- a/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt +++ b/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt @@ -23,6 +23,7 @@ class PreferencesManager( val managerAutoUpdates = booleanPreference("manager_auto_updates", false) val showManagerUpdateDialogOnLaunch = booleanPreference("show_manager_update_dialog_on_launch", true) val useManagerPrereleases = booleanPreference("manager_prereleases", false) + val usePatchesPrereleases = booleanPreference("patches_prereleases", false) val disablePatchVersionCompatCheck = booleanPreference("disable_patch_version_compatibility_check", false) val disableSelectionWarning = booleanPreference("disable_selection_warning", false) diff --git a/app/src/main/java/app/revanced/manager/network/api/ReVancedAPI.kt b/app/src/main/java/app/revanced/manager/network/api/ReVancedAPI.kt index dddb2641..47a8cd86 100644 --- a/app/src/main/java/app/revanced/manager/network/api/ReVancedAPI.kt +++ b/app/src/main/java/app/revanced/manager/network/api/ReVancedAPI.kt @@ -35,7 +35,7 @@ class ReVancedAPI( suspend fun getLatestAppInfo() = request("manager?prerelease=${prefs.useManagerPrereleases.get()}") - suspend fun getPatchesUpdate() = request("patches") + suspend fun getPatchesUpdate() = request("patches?prerelease=${prefs.usePatchesPrereleases.get()}") suspend fun getContributors() = request>("contributors") diff --git a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt index 9e0bb7c9..87628394 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/bundle/BundleInformationDialog.kt @@ -45,6 +45,7 @@ import app.revanced.manager.domain.bundles.LocalPatchBundle import app.revanced.manager.domain.bundles.PatchBundleSource import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.asRemoteOrNull import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.isDefault +import app.revanced.manager.domain.manager.PreferencesManager import app.revanced.manager.domain.repository.PatchBundleRepository import app.revanced.manager.ui.component.ColumnWithScrollbar import app.revanced.manager.ui.component.ExceptionViewerDialog @@ -65,12 +66,14 @@ fun BundleInformationDialog( ) { val bundleRepo = koinInject() val networkInfo = koinInject() + val prefs = koinInject() val hasNetwork = remember { networkInfo.isConnected() } val composableScope = rememberCoroutineScope() var viewCurrentBundlePatches by remember { mutableStateOf(false) } val isLocal = src is LocalPatchBundle val bundleManifestAttributes = src.patchBundle?.manifestAttributes - val (autoUpdate, endpoint) = src.asRemoteOrNull?.let { it.autoUpdate to it.endpoint } ?: (null to null) + val (autoUpdate, endpoint) = src.asRemoteOrNull?.let { it.autoUpdate to it.endpoint } + ?: (null to null) fun onAutoUpdateChange(new: Boolean) = composableScope.launch { with(bundleRepo) { @@ -173,6 +176,32 @@ fun BundleInformationDialog( ) } + if (src.isDefault) { + val usePrereleases by prefs.usePatchesPrereleases.getAsState() + + BundleListItem( + headlineText = stringResource(R.string.patches_prereleases), + supportingText = stringResource(R.string.patches_prereleases_description), + trailingContent = { + HapticSwitch( + checked = usePrereleases, + onCheckedChange = { + composableScope.launch { + prefs.usePatchesPrereleases.update( + it + ) + } + } + ) + }, + modifier = Modifier.clickable { + composableScope.launch { + prefs.usePatchesPrereleases.update(!usePrereleases) + } + } + ) + } + endpoint?.takeUnless { src.isDefault }?.let { url -> var showUrlInputDialog by rememberSaveable { mutableStateOf(false) diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/MainViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/MainViewModel.kt index 13244c64..f8ba081f 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/MainViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/MainViewModel.kt @@ -122,6 +122,7 @@ class MainViewModel( } settings.usePrereleases?.let { prereleases -> prefs.useManagerPrereleases.update(prereleases) + prefs.usePatchesPrereleases.update(prereleases) } settings.apiUrl?.let { api -> prefs.api.update(api.removeSuffix("/")) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c7067220..3b034375 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -437,6 +437,8 @@ Auto update Add patches Automatically update when a new version is available + Prereleases + Use prerelease versions Patches URL These patches are not compatible with the selected app version (%1$s).\n\nClick on the patches to see more details. Incompatible patch