diff --git a/CHANGELOG.md b/CHANGELOG.md index 569ec8f..91a4893 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +# [19.2.0-dev.1](https://github.com/ReVanced/revanced-patcher/compare/v19.1.1-dev.1...v19.2.0-dev.1) (2023-12-22) + + +### Features + +* Add `PatchExtensions#registerNewPatchOption` function to simplify instantiation and registration of patch options ([4a91845](https://github.com/ReVanced/revanced-patcher/commit/4a9184597be99cd458496cce0ee68994e6b8735c)) + +## [19.1.1-dev.1](https://github.com/ReVanced/revanced-patcher/compare/v19.1.0...v19.1.1-dev.1) (2023-12-01) + + +### Bug Fixes + +* Accept `PatchSet` in `PatchesConsumer#acceptPatches` ([716825f](https://github.com/ReVanced/revanced-patcher/commit/716825f232bf1aab3a97723968562aa6dbdb20b1)) + # [19.1.0](https://github.com/ReVanced/revanced-patcher/compare/v19.0.0...v19.1.0) (2023-12-01) diff --git a/api/revanced-patcher.api b/api/revanced-patcher.api index 573e5fe..5c2d9ff 100644 --- a/api/revanced-patcher.api +++ b/api/revanced-patcher.api @@ -44,6 +44,7 @@ public final class app/revanced/patcher/Patcher : app/revanced/patcher/Integrati public fun (Lapp/revanced/patcher/PatcherOptions;)V public fun acceptIntegrations (Ljava/util/List;)V public fun acceptPatches (Ljava/util/List;)V + public fun acceptPatches (Ljava/util/Set;)V public synthetic fun apply (Ljava/lang/Object;)Ljava/lang/Object; public fun apply (Z)Lkotlinx/coroutines/flow/Flow; public fun close ()V @@ -99,6 +100,11 @@ public final class app/revanced/patcher/PatcherResult$PatchedDexFile { public abstract interface class app/revanced/patcher/PatchesConsumer { public abstract fun acceptPatches (Ljava/util/List;)V + public abstract fun acceptPatches (Ljava/util/Set;)V +} + +public final class app/revanced/patcher/PatchesConsumer$DefaultImpls { + public static fun acceptPatches (Lapp/revanced/patcher/PatchesConsumer;Ljava/util/List;)V } public final class app/revanced/patcher/data/BytecodeContext : app/revanced/patcher/data/Context { @@ -329,6 +335,8 @@ public final class app/revanced/patcher/patch/options/PatchOption$PatchExtension public static synthetic fun longArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/Long;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; public final fun longPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Long;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; public static synthetic fun longPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Long;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; + public final fun registerNewPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Object;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Lkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; + public static synthetic fun registerNewPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/Object;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; public final fun stringArrayPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; public static synthetic fun stringArrayPatchOption$default (Lapp/revanced/patcher/patch/options/PatchOption$PatchExtensions;Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;[Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lapp/revanced/patcher/patch/options/PatchOption; public final fun stringPatchOption (Lapp/revanced/patcher/patch/Patch;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;)Lapp/revanced/patcher/patch/options/PatchOption; diff --git a/gradle.properties b/gradle.properties index 1408393..6ab48ba 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 19.1.0 +version = 19.2.0-dev.1 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f23b645..85941e6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ android = "4.1.1.4" kotlin-reflect = "1.9.10" apktool-lib = "2.9.1" -kotlin-test = "1.9.10" +kotlin-test = "1.9.20" kotlinx-coroutines-core = "1.7.3" multidexlib2 = "3.0.3.r3" smali = "3.0.3" diff --git a/settings.gradle.kts b/settings.gradle.kts index 0c24b32..37f0d02 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,6 +2,6 @@ rootProject.name = "revanced-patcher" buildCache { local { - isEnabled = !System.getenv().containsKey("CI") + isEnabled = "CI" !in System.getenv() } } diff --git a/src/main/kotlin/app/revanced/patcher/Patcher.kt b/src/main/kotlin/app/revanced/patcher/Patcher.kt index 2c9f67c..86b2a1a 100644 --- a/src/main/kotlin/app/revanced/patcher/Patcher.kt +++ b/src/main/kotlin/app/revanced/patcher/Patcher.kt @@ -46,7 +46,7 @@ class Patcher( * @param patches The [Patch]es to add. */ @Suppress("NAME_SHADOWING") - override fun acceptPatches(patches: List>) { + override fun acceptPatches(patches: PatchSet) { /** * Add dependencies of a [Patch] recursively to [PatcherContext.allPatches]. * If a [Patch] is already in [PatcherContext.allPatches], it will not be added again. diff --git a/src/main/kotlin/app/revanced/patcher/PatchesConsumer.kt b/src/main/kotlin/app/revanced/patcher/PatchesConsumer.kt index 91b83b9..24533bb 100644 --- a/src/main/kotlin/app/revanced/patcher/PatchesConsumer.kt +++ b/src/main/kotlin/app/revanced/patcher/PatchesConsumer.kt @@ -4,5 +4,7 @@ import app.revanced.patcher.patch.Patch @FunctionalInterface interface PatchesConsumer { - fun acceptPatches(patches: List>) + @Deprecated("Use acceptPatches(PatchSet) instead.", ReplaceWith("acceptPatches(patches.toSet())")) + fun acceptPatches(patches: List>) = acceptPatches(patches.toSet()) + fun acceptPatches(patches: PatchSet) } diff --git a/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt b/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt index ad0f6fe..cc0d130 100644 --- a/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt +++ b/src/main/kotlin/app/revanced/patcher/patch/options/PatchOption.kt @@ -80,6 +80,7 @@ open class PatchOption( if (!validator(value)) throw PatchOptionException.ValueValidationException(value, this) } + override fun toString() = value.toString() operator fun getValue( @@ -120,7 +121,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption.(String?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -129,7 +130,7 @@ open class PatchOption( required, "String", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with an integer value and add it to the current [Patch]. @@ -154,7 +155,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption.(Int?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -163,7 +164,7 @@ open class PatchOption( required, "Int", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a boolean value and add it to the current [Patch]. @@ -188,9 +189,16 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption.(Boolean?) -> Boolean = { true }, - ) = PatchOption(key, default, values, title, description, required, "Boolean", validator).also { - registerOption(it) - } + ) = registerNewPatchOption( + key, + default, + values, + title, + description, + required, + "Boolean", + validator, + ) /** * Create a new [PatchOption] with a float value and add it to the current [Patch]. @@ -215,7 +223,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption.(Float?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -224,7 +232,7 @@ open class PatchOption( required, "Float", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a long value and add it to the current [Patch]. @@ -249,7 +257,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption.(Long?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -258,7 +266,7 @@ open class PatchOption( required, "Long", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a string array value and add it to the current [Patch]. @@ -283,7 +291,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption?>.(Array?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -292,7 +300,7 @@ open class PatchOption( required, "StringArray", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with an integer array value and add it to the current [Patch]. @@ -317,7 +325,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption?>.(Array?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -326,7 +334,7 @@ open class PatchOption( required, "IntArray", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a boolean array value and add it to the current [Patch]. @@ -351,7 +359,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption?>.(Array?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -360,7 +368,7 @@ open class PatchOption( required, "BooleanArray", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a float array value and add it to the current [Patch]. @@ -385,7 +393,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption?>.(Array?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -394,7 +402,7 @@ open class PatchOption( required, "FloatArray", validator, - ).also { registerOption(it) } + ) /** * Create a new [PatchOption] with a long array value and add it to the current [Patch]. @@ -419,7 +427,7 @@ open class PatchOption( description: String? = null, required: Boolean = false, validator: PatchOption?>.(Array?) -> Boolean = { true }, - ) = PatchOption( + ) = registerNewPatchOption( key, default, values, @@ -428,8 +436,42 @@ open class PatchOption( required, "LongArray", validator, - ).also { registerOption(it) } + ) - private fun

> P.registerOption(option: PatchOption<*>) = option.also { options.register(it) } + /** + * Create a new [PatchOption] with a string set value and add it to the current [Patch]. + * + * @param key The identifier. + * @param default The default value. + * @param values The set of guaranteed valid values identified by their string representation. + * @param title The title. + * @param description A description. + * @param required Whether the option is required. + * @param valueType The type of the option value (to handle type erasure). + * @param validator The function to validate the option value. + * + * @return The created [PatchOption]. + * + * @see PatchOption + */ + fun

, T> P.registerNewPatchOption( + key: String, + default: T? = null, + values: Map? = null, + title: String? = null, + description: String? = null, + required: Boolean = false, + valueType: String, + validator: PatchOption.(T?) -> Boolean = { true }, + ) = PatchOption( + key, + default, + values, + title, + description, + required, + valueType, + validator, + ).also(options::register) } }