feat: Toggle to use pre-release versions of ReVanced Patches

This commit is contained in:
Ax333l
2025-10-03 17:28:30 +02:00
parent 95fb97ec31
commit 08cec674bb
5 changed files with 35 additions and 2 deletions

View File

@@ -23,6 +23,7 @@ class PreferencesManager(
val managerAutoUpdates = booleanPreference("manager_auto_updates", false) val managerAutoUpdates = booleanPreference("manager_auto_updates", false)
val showManagerUpdateDialogOnLaunch = booleanPreference("show_manager_update_dialog_on_launch", true) val showManagerUpdateDialogOnLaunch = booleanPreference("show_manager_update_dialog_on_launch", true)
val useManagerPrereleases = booleanPreference("manager_prereleases", false) val useManagerPrereleases = booleanPreference("manager_prereleases", false)
val usePatchesPrereleases = booleanPreference("patches_prereleases", false)
val disablePatchVersionCompatCheck = booleanPreference("disable_patch_version_compatibility_check", false) val disablePatchVersionCompatCheck = booleanPreference("disable_patch_version_compatibility_check", false)
val disableSelectionWarning = booleanPreference("disable_selection_warning", false) val disableSelectionWarning = booleanPreference("disable_selection_warning", false)

View File

@@ -35,7 +35,7 @@ class ReVancedAPI(
suspend fun getLatestAppInfo() = suspend fun getLatestAppInfo() =
request<ReVancedAsset>("manager?prerelease=${prefs.useManagerPrereleases.get()}") request<ReVancedAsset>("manager?prerelease=${prefs.useManagerPrereleases.get()}")
suspend fun getPatchesUpdate() = request<ReVancedAsset>("patches") suspend fun getPatchesUpdate() = request<ReVancedAsset>("patches?prerelease=${prefs.usePatchesPrereleases.get()}")
suspend fun getContributors() = request<List<ReVancedGitRepository>>("contributors") suspend fun getContributors() = request<List<ReVancedGitRepository>>("contributors")

View File

@@ -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
import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.asRemoteOrNull import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.asRemoteOrNull
import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.isDefault 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.domain.repository.PatchBundleRepository
import app.revanced.manager.ui.component.ColumnWithScrollbar import app.revanced.manager.ui.component.ColumnWithScrollbar
import app.revanced.manager.ui.component.ExceptionViewerDialog import app.revanced.manager.ui.component.ExceptionViewerDialog
@@ -65,12 +66,14 @@ fun BundleInformationDialog(
) { ) {
val bundleRepo = koinInject<PatchBundleRepository>() val bundleRepo = koinInject<PatchBundleRepository>()
val networkInfo = koinInject<NetworkInfo>() val networkInfo = koinInject<NetworkInfo>()
val prefs = koinInject<PreferencesManager>()
val hasNetwork = remember { networkInfo.isConnected() } val hasNetwork = remember { networkInfo.isConnected() }
val composableScope = rememberCoroutineScope() val composableScope = rememberCoroutineScope()
var viewCurrentBundlePatches by remember { mutableStateOf(false) } var viewCurrentBundlePatches by remember { mutableStateOf(false) }
val isLocal = src is LocalPatchBundle val isLocal = src is LocalPatchBundle
val bundleManifestAttributes = src.patchBundle?.manifestAttributes 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 { fun onAutoUpdateChange(new: Boolean) = composableScope.launch {
with(bundleRepo) { 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 -> endpoint?.takeUnless { src.isDefault }?.let { url ->
var showUrlInputDialog by rememberSaveable { var showUrlInputDialog by rememberSaveable {
mutableStateOf(false) mutableStateOf(false)

View File

@@ -122,6 +122,7 @@ class MainViewModel(
} }
settings.usePrereleases?.let { prereleases -> settings.usePrereleases?.let { prereleases ->
prefs.useManagerPrereleases.update(prereleases) prefs.useManagerPrereleases.update(prereleases)
prefs.usePatchesPrereleases.update(prereleases)
} }
settings.apiUrl?.let { api -> settings.apiUrl?.let { api ->
prefs.api.update(api.removeSuffix("/")) prefs.api.update(api.removeSuffix("/"))

View File

@@ -437,6 +437,8 @@
<string name="auto_update">Auto update</string> <string name="auto_update">Auto update</string>
<string name="add_patches">Add patches</string> <string name="add_patches">Add patches</string>
<string name="auto_update_description">Automatically update when a new version is available</string> <string name="auto_update_description">Automatically update when a new version is available</string>
<string name="patches_prereleases">Prereleases</string>
<string name="patches_prereleases_description">Use prerelease versions</string>
<string name="patches_url">Patches URL</string> <string name="patches_url">Patches URL</string>
<string name="incompatible_patches_dialog">These patches are not compatible with the selected app version (%1$s).\n\nClick on the patches to see more details.</string> <string name="incompatible_patches_dialog">These patches are not compatible with the selected app version (%1$s).\n\nClick on the patches to see more details.</string>
<string name="incompatible_patch">Incompatible patch</string> <string name="incompatible_patch">Incompatible patch</string>