From 59daceef99984207970bea19651fb849f801fb0a Mon Sep 17 00:00:00 2001 From: Ax333l Date: Mon, 6 Nov 2023 19:33:06 +0100 Subject: [PATCH] chore: bump patcher --- .../domain/bundles/PatchBundleSource.kt | 3 + .../manager/patcher/patch/PatchInfo.kt | 8 +- .../ui/component/patches/OptionFields.kt | 109 +++++++++--------- .../ui/screen/PatchesSelectorScreen.kt | 2 +- gradle/libs.versions.toml | 4 +- 5 files changed, 64 insertions(+), 62 deletions(-) diff --git a/app/src/main/java/app/revanced/manager/domain/bundles/PatchBundleSource.kt b/app/src/main/java/app/revanced/manager/domain/bundles/PatchBundleSource.kt index dedbbf5d..ebff077c 100644 --- a/app/src/main/java/app/revanced/manager/domain/bundles/PatchBundleSource.kt +++ b/app/src/main/java/app/revanced/manager/domain/bundles/PatchBundleSource.kt @@ -1,7 +1,9 @@ package app.revanced.manager.domain.bundles +import android.util.Log import androidx.compose.runtime.Stable import app.revanced.manager.patcher.patch.PatchBundle +import app.revanced.manager.util.tag import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.flowOf @@ -40,6 +42,7 @@ sealed class PatchBundleSource(val name: String, val uid: Int, directory: File) return try { State.Loaded(PatchBundle(patchesFile, integrationsFile.takeIf(File::exists))) } catch (t: Throwable) { + Log.e(tag, "Failed to load patch bundle $name", t) State.Failed(t) } } diff --git a/app/src/main/java/app/revanced/manager/patcher/patch/PatchInfo.kt b/app/src/main/java/app/revanced/manager/patcher/patch/PatchInfo.kt index 8002fa99..4914a07a 100644 --- a/app/src/main/java/app/revanced/manager/patcher/patch/PatchInfo.kt +++ b/app/src/main/java/app/revanced/manager/patcher/patch/PatchInfo.kt @@ -56,15 +56,15 @@ data class Option( val key: String, val description: String, val required: Boolean, - val type: Class>, - val defaultValue: Any? + val type: String, + val default: Any? ) { constructor(option: PatchOption<*>) : this( option.title ?: option.key, option.key, option.description.orEmpty(), option.required, - option::class.java, - option.value + option.valueType, + option.default, ) } \ No newline at end of file diff --git a/app/src/main/java/app/revanced/manager/ui/component/patches/OptionFields.kt b/app/src/main/java/app/revanced/manager/ui/component/patches/OptionFields.kt index e8fb4e4a..8f871afa 100644 --- a/app/src/main/java/app/revanced/manager/ui/component/patches/OptionFields.kt +++ b/app/src/main/java/app/revanced/manager/ui/component/patches/OptionFields.kt @@ -29,7 +29,6 @@ import app.revanced.manager.R import app.revanced.manager.data.platform.Filesystem import app.revanced.manager.patcher.patch.Option import app.revanced.manager.util.toast -import app.revanced.patcher.patch.options.types.* import org.koin.compose.rememberKoinInject // Composable functions do not support function references, so we have to use composable lambdas instead. @@ -136,69 +135,69 @@ private fun StringOptionDialog( ) } -private val StringOption: OptionImpl = { option, value, setValue -> - var showInputDialog by rememberSaveable { mutableStateOf(false) } - fun showInputDialog() { - showInputDialog = true - } - - fun dismissInputDialog() { - showInputDialog = false - } - - if (showInputDialog) { - StringOptionDialog( - name = option.title, - value = value as? String, - onSubmit = { - dismissInputDialog() - setValue(it) - }, - onDismissRequest = ::dismissInputDialog - ) - } - - OptionListItem( - option = option, - onClick = ::showInputDialog - ) { - IconButton(onClick = ::showInputDialog) { - Icon( - Icons.Outlined.Edit, - contentDescription = stringResource(R.string.string_option_icon_description) - ) - } - } -} - -private val BooleanOption: OptionImpl = { option, value, setValue -> - val current = (value as? Boolean) ?: false - - OptionListItem( - option = option, - onClick = { setValue(!current) } - ) { - Switch(checked = current, onCheckedChange = setValue) - } -} - -private val UnknownOption: OptionImpl = { option, _, _ -> +private val unknownOption: OptionImpl = { option, _, _ -> val context = LocalContext.current OptionListItem( option = option, - onClick = { context.toast("Unknown type: ${option.type.name}") }, + onClick = { context.toast("Unknown type: ${option.type}") }, trailingContent = {}) } +private val optionImplementations = mapOf( + // These are the only two types that are currently used by the official patches + "Boolean" to { option, value, setValue -> + val current = (value as? Boolean) ?: false + + OptionListItem( + option = option, + onClick = { setValue(!current) } + ) { + Switch(checked = current, onCheckedChange = setValue) + } + }, + "String" to { option, value, setValue -> + var showInputDialog by rememberSaveable { mutableStateOf(false) } + fun showInputDialog() { + showInputDialog = true + } + + fun dismissInputDialog() { + showInputDialog = false + } + + if (showInputDialog) { + StringOptionDialog( + name = option.title, + value = value as? String, + onSubmit = { + dismissInputDialog() + setValue(it) + }, + onDismissRequest = ::dismissInputDialog + ) + } + + OptionListItem( + option = option, + onClick = ::showInputDialog + ) { + IconButton(onClick = ::showInputDialog) { + Icon( + Icons.Outlined.Edit, + contentDescription = stringResource(R.string.string_option_icon_description) + ) + } + } + } +) + @Composable fun OptionItem(option: Option, value: Any?, setValue: (Any?) -> Unit) { val implementation = remember(option.type) { - when (option.type) { - // These are the only two types that are currently used by the official patches. - StringPatchOption::class.java -> StringOption - BooleanPatchOption::class.java -> BooleanOption - else -> UnknownOption - } + optionImplementations.getOrDefault( + option.type, + unknownOption + ) } implementation(option, value, setValue) diff --git a/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt index 75b6d74b..b91cef03 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt @@ -571,7 +571,7 @@ fun OptionsDialog( items(patch.options, key = { it.key }) { option -> val key = option.key val value = - if (values == null || !values.contains(key)) option.defaultValue else values[key] + if (values == null || !values.contains(key)) option.default else values[key] OptionItem(option = option, value = value, setValue = { set(key, it) }) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dc60f15a..c7f41e2a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,8 +11,8 @@ accompanist = "0.30.1" serialization = "1.6.0" collection = "0.3.5" room-version = "2.5.2" -revanced-patcher = "17.0.0" -revanced-library = "1.1.4" +revanced-patcher = "19.0.0" +revanced-library = "1.2.0" koin-version = "3.4.3" koin-version-compose = "3.4.6" reimagined-navigation = "1.5.0"