mirror of
https://github.com/ReVanced/revanced-patcher.git
synced 2026-01-24 03:31:04 +00:00
Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -11,7 +11,6 @@ import app.revanced.patcher.patch.Patch
|
||||
import app.revanced.patcher.patch.PatchResult
|
||||
import app.revanced.patcher.patch.PatchResultError
|
||||
import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.annotations.DependencyType
|
||||
import app.revanced.patcher.patch.impl.BytecodePatch
|
||||
import app.revanced.patcher.patch.impl.ResourcePatch
|
||||
import app.revanced.patcher.util.ListBackedSet
|
||||
@@ -265,11 +264,6 @@ class Patcher(private val options: PatcherOptions) {
|
||||
// recursively apply all dependency patches
|
||||
patch.dependencies.forEach {
|
||||
val dependency = it.patch.java
|
||||
if ( // soft dependencies must be included manually.
|
||||
it.type == DependencyType.SOFT && !data.patches.any { p ->
|
||||
p.patchName == dependency.patchName
|
||||
}
|
||||
) return@forEach
|
||||
|
||||
val result = applyPatch(dependency, appliedPatches)
|
||||
if (result.isSuccess()) return@forEach
|
||||
|
||||
@@ -17,4 +17,9 @@ abstract class Patch<out T : Data> {
|
||||
* The main function of the [Patch] which the patcher will call.
|
||||
*/
|
||||
abstract fun execute(data: @UnsafeVariance T): PatchResult
|
||||
|
||||
/**
|
||||
* A list of [PatchOption]s.
|
||||
*/
|
||||
open val options: Iterable<PatchOption<*>> = listOf()
|
||||
}
|
||||
100
src/main/kotlin/app/revanced/patcher/patch/PatchOption.kt
Normal file
100
src/main/kotlin/app/revanced/patcher/patch/PatchOption.kt
Normal file
@@ -0,0 +1,100 @@
|
||||
package app.revanced.patcher.patch
|
||||
|
||||
/**
|
||||
* A [Patch] option.
|
||||
* @param key Unique identifier of the option. Example: _`settings.microg.enabled`_
|
||||
* @param default The default value of the option.
|
||||
* @param title A human-readable title of the option. Example: _MicroG Settings_
|
||||
* @param description A human-readable description of the option. Example: _Settings integration for MicroG._
|
||||
* @param required Whether the option is required.
|
||||
*/
|
||||
@Suppress("MemberVisibilityCanBePrivate")
|
||||
sealed class PatchOption<T>(
|
||||
val key: String,
|
||||
default: T?,
|
||||
val title: String,
|
||||
val description: String,
|
||||
val required: Boolean
|
||||
) {
|
||||
var value: T? = default
|
||||
|
||||
/**
|
||||
* A [PatchOption] representing a [String].
|
||||
* @see PatchOption
|
||||
*/
|
||||
class StringOption(
|
||||
key: String,
|
||||
default: String?,
|
||||
title: String,
|
||||
description: String,
|
||||
required: Boolean = false
|
||||
) : PatchOption<String>(
|
||||
key, default, title, description, required
|
||||
)
|
||||
|
||||
/**
|
||||
* A [PatchOption] representing a [Boolean].
|
||||
* @see PatchOption
|
||||
*/
|
||||
class BooleanOption(
|
||||
key: String,
|
||||
default: Boolean?,
|
||||
title: String,
|
||||
description: String,
|
||||
required: Boolean = false
|
||||
) : PatchOption<Boolean>(
|
||||
key, default, title, description, required
|
||||
)
|
||||
|
||||
/**
|
||||
* A [PatchOption] with a list of allowed options.
|
||||
* @param options A list of allowed options for the [ListOption].
|
||||
* @see PatchOption
|
||||
*/
|
||||
sealed class ListOption<E>(
|
||||
key: String,
|
||||
default: E?,
|
||||
val options: Iterable<E>,
|
||||
title: String,
|
||||
description: String,
|
||||
required: Boolean = false
|
||||
) : PatchOption<E>(
|
||||
key, default, title, description, required
|
||||
) {
|
||||
init {
|
||||
if (default !in options) {
|
||||
throw IllegalStateException("Default option must be an allowed options")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A [ListOption] of type [String].
|
||||
* @see ListOption
|
||||
*/
|
||||
class StringListOption(
|
||||
key: String,
|
||||
default: String?,
|
||||
options: Iterable<String>,
|
||||
title: String,
|
||||
description: String,
|
||||
required: Boolean = false
|
||||
) : ListOption<String>(
|
||||
key, default, options, title, description, required
|
||||
)
|
||||
|
||||
/**
|
||||
* A [ListOption] of type [Int].
|
||||
* @see ListOption
|
||||
*/
|
||||
class IntListOption(
|
||||
key: String,
|
||||
default: Int?,
|
||||
options: Iterable<Int>,
|
||||
title: String,
|
||||
description: String,
|
||||
required: Boolean = false
|
||||
) : ListOption<Int>(
|
||||
key, default, options, title, description, required
|
||||
)
|
||||
}
|
||||
@@ -43,11 +43,5 @@ enum class DependencyType {
|
||||
/**
|
||||
* Enforces that the dependency is applied, even if it was not selected.
|
||||
*/
|
||||
HARD,
|
||||
|
||||
/**
|
||||
* Applies the dependency only if it was selected.
|
||||
*/
|
||||
@Deprecated("Will be removed when Patch Options is implemented.")
|
||||
SOFT
|
||||
HARD
|
||||
}
|
||||
Reference in New Issue
Block a user