mirror of
https://github.com/revanced/revanced-patches
synced 2024-12-25 07:15:48 +01:00
feat: Use an extension property to create new exception when failing to resolve a fingerprint
This commit adds the extension property to the public API
This commit is contained in:
parent
d975eeafb7
commit
47eac14f03
@ -15,11 +15,12 @@ import com.android.tools.smali.dexlib2.util.MethodUtil
|
|||||||
import org.w3c.dom.Node
|
import org.w3c.dom.Node
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return [PatchException] from a [MethodFingerprint].
|
* The [PatchException] of failing to resolve a [MethodFingerprint].
|
||||||
*
|
*
|
||||||
* @return The [PatchException] for the [MethodFingerprint].
|
* @return The [PatchException].
|
||||||
*/
|
*/
|
||||||
internal fun MethodFingerprint.toErrorResult() = PatchException("Failed to resolve $name")
|
val MethodFingerprint.exception
|
||||||
|
get() = PatchException("Failed to resolve $name")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the [MutableMethod] from a given [Method] in a [MutableClass].
|
* Find the [MutableMethod] from a given [Method] in a [MutableClass].
|
||||||
@ -27,27 +28,27 @@ internal fun MethodFingerprint.toErrorResult() = PatchException("Failed to resol
|
|||||||
* @param method The [Method] to find.
|
* @param method The [Method] to find.
|
||||||
* @return The [MutableMethod].
|
* @return The [MutableMethod].
|
||||||
*/
|
*/
|
||||||
internal fun MutableClass.findMutableMethodOf(method: Method) = this.methods.first {
|
fun MutableClass.findMutableMethodOf(method: Method) = this.methods.first {
|
||||||
MethodUtil.methodSignaturesMatch(it, method)
|
MethodUtil.methodSignaturesMatch(it, method)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* apply a transform to all methods of the class
|
* apply a transform to all methods of the class.
|
||||||
*
|
*
|
||||||
* @param transform the transformation function. original method goes in, transformed method goes out
|
* @param transform the transformation function. original method goes in, transformed method goes out.
|
||||||
*/
|
*/
|
||||||
internal fun MutableClass.transformMethods(transform: MutableMethod.() -> MutableMethod) {
|
fun MutableClass.transformMethods(transform: MutableMethod.() -> MutableMethod) {
|
||||||
val transformedMethods = methods.map { it.transform() }
|
val transformedMethods = methods.map { it.transform() }
|
||||||
methods.clear()
|
methods.clear()
|
||||||
methods.addAll(transformedMethods)
|
methods.addAll(transformedMethods)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun Node.doRecursively(action: (Node) -> Unit) {
|
fun Node.doRecursively(action: (Node) -> Unit) {
|
||||||
action(this)
|
action(this)
|
||||||
for (i in 0 until this.childNodes.length) this.childNodes.item(i).doRecursively(action)
|
for (i in 0 until this.childNodes.length) this.childNodes.item(i).doRecursively(action)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun MutableMethod.injectHideViewCall(
|
fun MutableMethod.injectHideViewCall(
|
||||||
insertIndex: Int,
|
insertIndex: Int,
|
||||||
viewRegister: Int,
|
viewRegister: Int,
|
||||||
classDescriptor: String,
|
classDescriptor: String,
|
||||||
@ -57,7 +58,13 @@ internal fun MutableMethod.injectHideViewCall(
|
|||||||
"invoke-static { v$viewRegister }, $classDescriptor->$targetMethod(Landroid/view/View;)V"
|
"invoke-static { v$viewRegister }, $classDescriptor->$targetMethod(Landroid/view/View;)V"
|
||||||
)
|
)
|
||||||
|
|
||||||
internal fun Method.findIndexForIdResource(resourceName: String): Int {
|
/**
|
||||||
|
* Find the index of the first constant instruction with the id of the given resource name.
|
||||||
|
*
|
||||||
|
* @param resourceName the name of the resource to find the id for.
|
||||||
|
* @return the index of the first constant instruction with the id of the given resource name, or -1 if not found.
|
||||||
|
*/
|
||||||
|
fun Method.findIndexForIdResource(resourceName: String): Int {
|
||||||
fun getIdResourceId(resourceName: String) = ResourceMappingPatch.resourceMappings.single {
|
fun getIdResourceId(resourceName: String) = ResourceMappingPatch.resourceMappings.single {
|
||||||
it.type == "id" && it.name == resourceName
|
it.type == "id" && it.name == resourceName
|
||||||
}.id
|
}.id
|
||||||
@ -66,6 +73,8 @@ internal fun Method.findIndexForIdResource(resourceName: String): Int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Find the index of the first constant instruction with the given value.
|
||||||
|
*
|
||||||
* @return the first constant instruction with the value, or -1 if not found.
|
* @return the first constant instruction with the value, or -1 if not found.
|
||||||
*/
|
*/
|
||||||
fun Method.indexOfFirstConstantInstructionValue(constantValue: Long): Int {
|
fun Method.indexOfFirstConstantInstructionValue(constantValue: Long): Int {
|
||||||
@ -77,6 +86,8 @@ fun Method.indexOfFirstConstantInstructionValue(constantValue: Long): Int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Check if the method contains a constant with the given value.
|
||||||
|
*
|
||||||
* @return if the method contains a constant with the given value.
|
* @return if the method contains a constant with the given value.
|
||||||
*/
|
*/
|
||||||
fun Method.containsConstantInstructionValue(constantValue: Long): Boolean {
|
fun Method.containsConstantInstructionValue(constantValue: Long): Boolean {
|
||||||
@ -84,10 +95,10 @@ fun Method.containsConstantInstructionValue(constantValue: Long): Boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* traverse the class hierarchy starting from the given root class
|
* Traverse the class hierarchy starting from the given root class.
|
||||||
*
|
*
|
||||||
* @param targetClass the class to start traversing the class hierarchy from
|
* @param targetClass the class to start traversing the class hierarchy from.
|
||||||
* @param callback function that is called for every class in the hierarchy
|
* @param callback function that is called for every class in the hierarchy.
|
||||||
*/
|
*/
|
||||||
fun BytecodeContext.traverseClassHierarchy(targetClass: MutableClass, callback: MutableClass.() -> Unit) {
|
fun BytecodeContext.traverseClassHierarchy(targetClass: MutableClass, callback: MutableClass.() -> Unit) {
|
||||||
callback(targetClass)
|
callback(targetClass)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.backdrops.misc.pro.patch
|
package app.revanced.patches.backdrops.misc.pro.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -33,6 +33,6 @@ class ProUnlockPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
} ?: throw ProUnlockFingerprint.toErrorResult()
|
} ?: throw ProUnlockFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.candylinkvpn.patch
|
package app.revanced.patches.candylinkvpn.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -24,6 +24,6 @@ class UnlockProPatch : BytecodePatch(
|
|||||||
const/4 v0, 0x1
|
const/4 v0, 0x1
|
||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
) ?: throw IsPremiumPurchasedFingerprint.toErrorResult()
|
) ?: throw IsPremiumPurchasedFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.duolingo.unlocksuper.patch
|
package app.revanced.patches.duolingo.unlocksuper.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
@ -38,7 +38,7 @@ class UnlockDuolingoSuperPatch : BytecodePatch(
|
|||||||
?.filterIsInstance<BuilderInstruction22c>()
|
?.filterIsInstance<BuilderInstruction22c>()
|
||||||
?.firstOrNull { it.opcode == Opcode.IGET_BOOLEAN }
|
?.firstOrNull { it.opcode == Opcode.IGET_BOOLEAN }
|
||||||
?.reference
|
?.reference
|
||||||
?: throw IsUserSuperMethodFingerprint.toErrorResult()
|
?: throw IsUserSuperMethodFingerprint.exception
|
||||||
|
|
||||||
// Patch the instruction that assigns isUserSuper to true.
|
// Patch the instruction that assigns isUserSuper to true.
|
||||||
UserSerializationMethodFingerprint
|
UserSerializationMethodFingerprint
|
||||||
@ -50,7 +50,7 @@ class UnlockDuolingoSuperPatch : BytecodePatch(
|
|||||||
"const/4 v2, 0x1"
|
"const/4 v2, 0x1"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
?: throw UserSerializationMethodFingerprint.toErrorResult()
|
?: throw UserSerializationMethodFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.finanzonline.detection.bootloader.patch
|
package app.revanced.patches.finanzonline.detection.bootloader.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -27,7 +27,7 @@ class BootloaderDetectionPatch : BytecodePatch(
|
|||||||
const/4 v0, 0x1
|
const/4 v0, 0x1
|
||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
) ?: throw fingerprint.toErrorResult()
|
) ?: throw fingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.finanzonline.detection.root.patch
|
package app.revanced.patches.finanzonline.detection.root.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -24,6 +24,6 @@ class RootDetectionPatch : BytecodePatch(
|
|||||||
sget-object v0, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
|
sget-object v0, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
|
||||||
return-object v0
|
return-object v0
|
||||||
"""
|
"""
|
||||||
) ?: throw RootDetectionFingerprint.toErrorResult()
|
) ?: throw RootDetectionFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.googlerecorder.restrictions.patch
|
package app.revanced.patches.googlerecorder.restrictions.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
@ -34,6 +34,6 @@ class RemoveDeviceRestrictions : BytecodePatch(
|
|||||||
// Override "isPixelDevice()" to return true.
|
// Override "isPixelDevice()" to return true.
|
||||||
addInstruction(featureStringIndex, "const/4 v$featureAvailableRegister, 0x1")
|
addInstruction(featureStringIndex, "const/4 v$featureAvailableRegister, 0x1")
|
||||||
}
|
}
|
||||||
} ?: throw OnApplicationCreateFingerprint.toErrorResult()
|
} ?: throw OnApplicationCreateFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.inshorts.ad.patch
|
package app.revanced.patches.inshorts.ad.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
@ -27,6 +27,6 @@ class HideAdsPatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw InshortsAdsFingerprint.toErrorResult()
|
} ?: throw InshortsAdsFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.instagram.patches.ads.timeline.patch
|
package app.revanced.patches.instagram.patches.ads.timeline.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.*
|
import app.revanced.patcher.annotation.*
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||||
@ -33,16 +33,16 @@ class HideTimelineAdsPatch : BytecodePatch(
|
|||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
// region Resolve required methods to check for ads.
|
// region Resolve required methods to check for ads.
|
||||||
|
|
||||||
ShowAdFingerprint.result ?: throw ShowAdFingerprint.toErrorResult()
|
ShowAdFingerprint.result ?: throw ShowAdFingerprint.exception
|
||||||
|
|
||||||
PaidPartnershipAdFingerprint.result ?: throw PaidPartnershipAdFingerprint.toErrorResult()
|
PaidPartnershipAdFingerprint.result ?: throw PaidPartnershipAdFingerprint.exception
|
||||||
|
|
||||||
MediaFingerprint.result?.let {
|
MediaFingerprint.result?.let {
|
||||||
GenericMediaAdFingerprint.resolve(context, it.classDef)
|
GenericMediaAdFingerprint.resolve(context, it.classDef)
|
||||||
ShoppingAdFingerprint.resolve(context, it.classDef)
|
ShoppingAdFingerprint.resolve(context, it.classDef)
|
||||||
|
|
||||||
return@let
|
return@let
|
||||||
} ?: throw MediaFingerprint.toErrorResult()
|
} ?: throw MediaFingerprint.exception
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.lightroom.misc.login.patch
|
package app.revanced.patches.lightroom.misc.login.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||||
@ -18,6 +18,6 @@ class DisableMandatoryLoginPatch : BytecodePatch(listOf(IsLoggedInFingerprint))
|
|||||||
val index = implementation!!.instructions.lastIndex - 1
|
val index = implementation!!.instructions.lastIndex - 1
|
||||||
// Set isLoggedIn = true.
|
// Set isLoggedIn = true.
|
||||||
replaceInstruction(index, "const/4 v0, 0x1")
|
replaceInstruction(index, "const/4 v0, 0x1")
|
||||||
} ?: throw IsLoggedInFingerprint.toErrorResult()
|
} ?: throw IsLoggedInFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.lightroom.misc.premium.patch
|
package app.revanced.patches.lightroom.misc.premium.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -18,6 +18,6 @@ class UnlockPremiumPatch : BytecodePatch(listOf(HasPurchasedFingerprint)) {
|
|||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
// Set hasPremium = true.
|
// Set hasPremium = true.
|
||||||
HasPurchasedFingerprint.result?.mutableMethod?.replaceInstruction(2, "const/4 v2, 0x1")
|
HasPurchasedFingerprint.result?.mutableMethod?.replaceInstruction(2, "const/4 v2, 0x1")
|
||||||
?: throw HasPurchasedFingerprint.toErrorResult()
|
?: throw HasPurchasedFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.memegenerator.detection.license.patch
|
package app.revanced.patches.memegenerator.detection.license.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstructions
|
||||||
@ -20,6 +20,6 @@ class LicenseValidationPatch : BytecodePatch(
|
|||||||
return p0
|
return p0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw LicenseValidationFingerprint.toErrorResult()
|
} ?: throw LicenseValidationFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.memegenerator.detection.signature.patch
|
package app.revanced.patches.memegenerator.detection.signature.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstructions
|
||||||
@ -20,6 +20,6 @@ class SignatureVerificationPatch : BytecodePatch(
|
|||||||
return p0
|
return p0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw VerifySignatureFingerprint.toErrorResult()
|
} ?: throw VerifySignatureFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.memegenerator.misc.pro.patch
|
package app.revanced.patches.memegenerator.misc.pro.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -34,6 +34,6 @@ class UnlockProVersionPatch : BytecodePatch(
|
|||||||
return-object p0
|
return-object p0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw IsFreeVersionFingerprint.toErrorResult()
|
} ?: throw IsFreeVersionFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.messenger.ads.inbox.patch
|
package app.revanced.patches.messenger.ads.inbox.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.*
|
import app.revanced.patcher.annotation.*
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||||
@ -18,7 +18,7 @@ class HideInboxAdsPatch : BytecodePatch(
|
|||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
LoadInboxAdsFingerprint.result?.mutableMethod?.apply {
|
LoadInboxAdsFingerprint.result?.mutableMethod?.apply {
|
||||||
this.replaceInstruction(0, "return-void")
|
this.replaceInstruction(0, "return-void")
|
||||||
} ?: throw LoadInboxAdsFingerprint.toErrorResult()
|
} ?: throw LoadInboxAdsFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.messenger.inputfield.patch
|
package app.revanced.patches.messenger.inputfield.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.*
|
import app.revanced.patcher.annotation.*
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
@ -27,6 +27,6 @@ class DisableSwitchingEmojiToStickerInMessageInputField : BytecodePatch(listOf(S
|
|||||||
"const-string v$targetRegister, \"expression\""
|
"const-string v$targetRegister, \"expression\""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw SwitchMessangeInputEmojiButtonFingerprint.toErrorResult()
|
} ?: throw SwitchMessangeInputEmojiButtonFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.messenger.inputfield.patch
|
package app.revanced.patches.messenger.inputfield.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
@ -18,6 +18,6 @@ import app.revanced.patches.messenger.inputfield.fingerprints.SendTypingIndicato
|
|||||||
class DisableTypingIndicator : BytecodePatch(listOf(SendTypingIndicatorFingerprint)) {
|
class DisableTypingIndicator : BytecodePatch(listOf(SendTypingIndicatorFingerprint)) {
|
||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
SendTypingIndicatorFingerprint.result?.mutableMethod?.replaceInstruction(0, "return-void")
|
SendTypingIndicatorFingerprint.result?.mutableMethod?.replaceInstruction(0, "return-void")
|
||||||
?: throw SendTypingIndicatorFingerprint.toErrorResult()
|
?: throw SendTypingIndicatorFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.music.interaction.permanentrepeat.patch
|
package app.revanced.patches.music.interaction.permanentrepeat.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -31,6 +31,6 @@ class PermanentRepeatPatch : BytecodePatch(
|
|||||||
ExternalLabel("repeat", getInstruction(repeatIndex))
|
ExternalLabel("repeat", getInstruction(repeatIndex))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw RepeatTrackFingerprint.toErrorResult()
|
} ?: throw RepeatTrackFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.music.interaction.permanentshuffle.patch
|
package app.revanced.patches.music.interaction.permanentshuffle.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -20,6 +20,6 @@ class PermanentShuffleTogglePatch : BytecodePatch(
|
|||||||
) {
|
) {
|
||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
DisableShuffleFingerprint.result?.mutableMethod?.addInstruction(0, "return-void")
|
DisableShuffleFingerprint.result?.mutableMethod?.addInstruction(0, "return-void")
|
||||||
?: throw DisableShuffleFingerprint.toErrorResult()
|
?: throw DisableShuffleFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.music.misc.androidauto.patch
|
package app.revanced.patches.music.misc.androidauto.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -25,6 +25,6 @@ class BypassCertificateChecksPatch : BytecodePatch(
|
|||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw CheckCertificateFingerprint.toErrorResult()
|
} ?: throw CheckCertificateFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.nfctoolsse.misc.pro.patch
|
package app.revanced.patches.nfctoolsse.misc.pro.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -29,7 +29,7 @@ class UnlockProPatch : BytecodePatch(
|
|||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw IsLicenseRegisteredFingerprint.toErrorResult()
|
} ?: throw IsLicenseRegisteredFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.photomath.detection.signature.patch
|
package app.revanced.patches.photomath.detection.signature.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
@ -21,7 +21,7 @@ class SignatureDetectionPatch : BytecodePatch(
|
|||||||
val checkRegister = (signatureCheckInstruction as OneRegisterInstruction).registerA
|
val checkRegister = (signatureCheckInstruction as OneRegisterInstruction).registerA
|
||||||
|
|
||||||
mutableMethod.replaceInstruction(signatureCheckInstruction.location.index, "const/4 v$checkRegister, 0x1")
|
mutableMethod.replaceInstruction(signatureCheckInstruction.location.index, "const/4 v$checkRegister, 0x1")
|
||||||
} ?: throw CheckSignatureFingerprint.toErrorResult()
|
} ?: throw CheckSignatureFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.photomath.misc.unlockplus.patch
|
package app.revanced.patches.photomath.misc.unlockplus.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -31,7 +31,7 @@ class UnlockPlusPatch : BytecodePatch(
|
|||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw IsPlusUnlockedFingerprint.toErrorResult()
|
} ?: throw IsPlusUnlockedFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.pixiv.ads.patch
|
package app.revanced.patches.pixiv.ads.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.*
|
import app.revanced.patcher.annotation.*
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
@ -23,6 +23,6 @@ class HideAdsPatch : BytecodePatch(listOf(IsNotPremiumFingerprint)) {
|
|||||||
const/4 v0, 0x0
|
const/4 v0, 0x0
|
||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
) ?: throw IsNotPremiumFingerprint.toErrorResult()
|
) ?: throw IsNotPremiumFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package app.revanced.patches.reddit.customclients
|
package app.revanced.patches.reddit.customclients
|
||||||
|
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprintResult
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprintResult
|
||||||
@ -47,7 +47,7 @@ abstract class AbstractSpoofClientPatch(
|
|||||||
|
|
||||||
fun List<MethodFingerprint>?.executePatch(
|
fun List<MethodFingerprint>?.executePatch(
|
||||||
patch: List<MethodFingerprintResult>.(BytecodeContext) -> Unit
|
patch: List<MethodFingerprintResult>.(BytecodeContext) -> Unit
|
||||||
) = this?.map { it.result ?: throw it.toErrorResult() }?.patch(context)
|
) = this?.map { it.result ?: throw it.exception }?.patch(context)
|
||||||
|
|
||||||
clientIdFingerprints.executePatch { patchClientId(context) }
|
clientIdFingerprints.executePatch { patchClientId(context) }
|
||||||
userAgentFingerprints.executePatch { patchUserAgent(context) }
|
userAgentFingerprints.executePatch { patchUserAgent(context) }
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.reddit.customclients.joeyforreddit.ads.patch
|
package app.revanced.patches.reddit.customclients.joeyforreddit.ads.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.annotation.Package
|
import app.revanced.patcher.annotation.Package
|
||||||
@ -24,6 +24,6 @@ class DisableAdsPatch : BytecodePatch(listOf(IsAdFreeUserFingerprint)) {
|
|||||||
const/4 v0, 0x1
|
const/4 v0, 0x1
|
||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
) ?: throw IsAdFreeUserFingerprint.toErrorResult()
|
) ?: throw IsAdFreeUserFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.reddit.customclients.joeyforreddit.detection.piracy.patch
|
package app.revanced.patches.reddit.customclients.joeyforreddit.detection.piracy.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
@ -13,6 +13,6 @@ class DisablePiracyDetectionPatch : BytecodePatch(listOf(PiracyDetectionFingerpr
|
|||||||
"""
|
"""
|
||||||
return-void
|
return-void
|
||||||
"""
|
"""
|
||||||
) ?: throw PiracyDetectionFingerprint.toErrorResult()
|
) ?: throw PiracyDetectionFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.reddit.customclients.syncforreddit.ads.patch
|
package app.revanced.patches.reddit.customclients.syncforreddit.ads.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.*
|
import app.revanced.patcher.annotation.*
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
@ -24,7 +24,7 @@ class DisableAdsPatch : BytecodePatch(listOf(IsAdsEnabledFingerprint)) {
|
|||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw IsAdsEnabledFingerprint.toErrorResult()
|
} ?: throw IsAdsEnabledFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.reddit.customclients.syncforreddit.api.patch
|
package app.revanced.patches.reddit.customclients.syncforreddit.api.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Package
|
import app.revanced.patcher.annotation.Package
|
||||||
@ -48,7 +48,7 @@ class SpoofClientPatch : AbstractSpoofClientPatch(
|
|||||||
return-object v0
|
return-object v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw GetBearerTokenFingerprint.toErrorResult()
|
} ?: throw GetBearerTokenFingerprint.exception
|
||||||
}.let {
|
}.let {
|
||||||
val occurrenceIndex = it.scanResult.stringsScanResult!!.matches.first().index
|
val occurrenceIndex = it.scanResult.stringsScanResult!!.matches.first().index
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.reddit.layout.disablescreenshotpopup.patch
|
package app.revanced.patches.reddit.layout.disablescreenshotpopup.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -19,6 +19,6 @@ class DisableScreenshotPopupPatch : BytecodePatch(
|
|||||||
) {
|
) {
|
||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
DisableScreenshotPopupFingerprint.result?.mutableMethod?.addInstruction(0, "return-void")
|
DisableScreenshotPopupFingerprint.result?.mutableMethod?.addInstruction(0, "return-void")
|
||||||
?: throw DisableScreenshotPopupFingerprint.toErrorResult()
|
?: throw DisableScreenshotPopupFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.reddit.misc.tracking.url.patch
|
package app.revanced.patches.reddit.misc.tracking.url.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -22,7 +22,7 @@ class SanitizeUrlQueryPatch : BytecodePatch(
|
|||||||
ShareLinkFormatterFingerprint.result?.mutableMethod?.addInstructions(
|
ShareLinkFormatterFingerprint.result?.mutableMethod?.addInstructions(
|
||||||
0,
|
0,
|
||||||
"return-object p0"
|
"return-object p0"
|
||||||
) ?: throw ShareLinkFormatterFingerprint.toErrorResult()
|
) ?: throw ShareLinkFormatterFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.shared.misc.fix.verticalscroll.patch
|
package app.revanced.patches.shared.misc.fix.verticalscroll.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
@ -27,6 +27,6 @@ class VerticalScrollPatch : BytecodePatch(
|
|||||||
"const/4 v$moveResultRegister, 0x0"
|
"const/4 v$moveResultRegister, 0x0"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw CanScrollVerticallyFingerprint.toErrorResult()
|
} ?: throw CanScrollVerticallyFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.solidexplorer2.functionality.filesize.patch
|
package app.revanced.patches.solidexplorer2.functionality.filesize.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
@ -23,5 +23,5 @@ class RemoveFileSizeLimitPatch : BytecodePatch(listOf(OnReadyFingerprint)) {
|
|||||||
val cmpResultRegister = result.mutableMethod.getInstruction<ThreeRegisterInstruction>(cmpIndex).registerA
|
val cmpResultRegister = result.mutableMethod.getInstruction<ThreeRegisterInstruction>(cmpIndex).registerA
|
||||||
|
|
||||||
result.mutableMethod.replaceInstruction(cmpIndex, "const/4 v${cmpResultRegister}, 0x0")
|
result.mutableMethod.replaceInstruction(cmpIndex, "const/4 v${cmpResultRegister}, 0x0")
|
||||||
} ?: throw OnReadyFingerprint.toErrorResult()
|
} ?: throw OnReadyFingerprint.exception
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.songpal.badge.patch
|
package app.revanced.patches.songpal.badge.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -50,7 +50,7 @@ class BadgeTabPatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|
||||||
} ?: throw CreateTabsFingerprint.toErrorResult()
|
} ?: throw CreateTabsFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.songpal.badge.patch
|
package app.revanced.patches.songpal.badge.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -20,6 +20,6 @@ class RemoveNotificationBadgePatch : BytecodePatch(
|
|||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
ShowNotificationFingerprint.result?.mutableMethod?.apply {
|
ShowNotificationFingerprint.result?.mutableMethod?.apply {
|
||||||
addInstructions(0, "return-void")
|
addInstructions(0, "return-void")
|
||||||
} ?: throw ShowNotificationFingerprint.toErrorResult()
|
} ?: throw ShowNotificationFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.spotify.lite.ondemand.patch
|
package app.revanced.patches.spotify.lite.ondemand.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -24,6 +24,6 @@ class OnDemandPatch : BytecodePatch(
|
|||||||
val insertIndex = scanResult.patternScanResult!!.endIndex - 1
|
val insertIndex = scanResult.patternScanResult!!.endIndex - 1
|
||||||
// Spoof a premium account
|
// Spoof a premium account
|
||||||
mutableMethod.addInstruction(insertIndex, "const/4 v0, 0x2")
|
mutableMethod.addInstruction(insertIndex, "const/4 v0, 0x2")
|
||||||
} ?: throw OnDemandFingerprint.toErrorResult()
|
} ?: throw OnDemandFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.tiktok.interaction.seekbar.patch
|
package app.revanced.patches.tiktok.interaction.seekbar.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -40,7 +40,7 @@ class ShowSeekbarPatch : BytecodePatch(
|
|||||||
const/16 v$typeRegister, 0x64
|
const/16 v$typeRegister, 0x64
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw SetSeekBarShowTypeFingerprint.toErrorResult()
|
} ?: throw SetSeekBarShowTypeFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.tiktok.misc.settings.patch
|
package app.revanced.patches.tiktok.misc.settings.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -34,9 +34,9 @@ class SettingsPatch : BytecodePatch(
|
|||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
// Find the class name of classes which construct a settings entry
|
// Find the class name of classes which construct a settings entry
|
||||||
val settingsButtonClass = SettingsEntryFingerprint.result?.classDef?.type?.toClassName()
|
val settingsButtonClass = SettingsEntryFingerprint.result?.classDef?.type?.toClassName()
|
||||||
?: throw SettingsEntryFingerprint.toErrorResult()
|
?: throw SettingsEntryFingerprint.exception
|
||||||
val settingsButtonInfoClass = SettingsEntryInfoFingerprint.result?.classDef?.type?.toClassName()
|
val settingsButtonInfoClass = SettingsEntryInfoFingerprint.result?.classDef?.type?.toClassName()
|
||||||
?: throw SettingsEntryInfoFingerprint.toErrorResult()
|
?: throw SettingsEntryInfoFingerprint.exception
|
||||||
|
|
||||||
// Create a settings entry for 'revanced settings' and add it to settings fragment
|
// Create a settings entry for 'revanced settings' and add it to settings fragment
|
||||||
AddSettingsEntryFingerprint.result?.apply {
|
AddSettingsEntryFingerprint.result?.apply {
|
||||||
@ -64,7 +64,7 @@ class SettingsPatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw AddSettingsEntryFingerprint.toErrorResult()
|
} ?: throw AddSettingsEntryFingerprint.exception
|
||||||
|
|
||||||
// Initialize the settings menu once the replaced setting entry is clicked.
|
// Initialize the settings menu once the replaced setting entry is clicked.
|
||||||
AdPersonalizationActivityOnCreateFingerprint.result?.mutableMethod?.apply {
|
AdPersonalizationActivityOnCreateFingerprint.result?.mutableMethod?.apply {
|
||||||
@ -85,7 +85,7 @@ class SettingsPatch : BytecodePatch(
|
|||||||
""",
|
""",
|
||||||
ExternalLabel("notrevanced", getInstruction(initializeSettingsIndex))
|
ExternalLabel("notrevanced", getInstruction(initializeSettingsIndex))
|
||||||
)
|
)
|
||||||
} ?: throw AdPersonalizationActivityOnCreateFingerprint.toErrorResult()
|
} ?: throw AdPersonalizationActivityOnCreateFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun String.toClassName(): String {
|
private fun String.toClassName(): String {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.trakt.patch
|
package app.revanced.patches.trakt.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -25,13 +25,13 @@ class UnlockProPatch : BytecodePatch(
|
|||||||
arrayOf(IsVIPFingerprint, IsVIPEPFingerprint).onEach { fingerprint ->
|
arrayOf(IsVIPFingerprint, IsVIPEPFingerprint).onEach { fingerprint ->
|
||||||
// Resolve both fingerprints on the same class.
|
// Resolve both fingerprints on the same class.
|
||||||
if (!fingerprint.resolve(context, remoteUserClass))
|
if (!fingerprint.resolve(context, remoteUserClass))
|
||||||
throw fingerprint.toErrorResult()
|
throw fingerprint.exception
|
||||||
}.forEach { fingerprint ->
|
}.forEach { fingerprint ->
|
||||||
// Return true for both VIP check methods.
|
// Return true for both VIP check methods.
|
||||||
fingerprint.result?.mutableMethod?.addInstructions(0, RETURN_TRUE_INSTRUCTIONS)
|
fingerprint.result?.mutableMethod?.addInstructions(0, RETURN_TRUE_INSTRUCTIONS)
|
||||||
?: throw fingerprint.toErrorResult()
|
?: throw fingerprint.exception
|
||||||
}
|
}
|
||||||
} ?: throw RemoteUserFingerprint.toErrorResult()
|
} ?: throw RemoteUserFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.twelvewidgets.unlock.patch
|
package app.revanced.patches.twelvewidgets.unlock.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.*
|
import app.revanced.patcher.annotation.*
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
@ -32,7 +32,7 @@ class UnlockPaidWidgetsPatch : BytecodePatch(
|
|||||||
ScreentimeSmallWidgetUnlockFingerprint,
|
ScreentimeSmallWidgetUnlockFingerprint,
|
||||||
WeatherWidgetUnlockFingerprint
|
WeatherWidgetUnlockFingerprint
|
||||||
).map { fingerprint ->
|
).map { fingerprint ->
|
||||||
fingerprint.result?.mutableMethod ?: throw fingerprint.toErrorResult()
|
fingerprint.result?.mutableMethod ?: throw fingerprint.exception
|
||||||
}.forEach { method ->
|
}.forEach { method ->
|
||||||
method.apply {
|
method.apply {
|
||||||
removeInstructions(4, 3)
|
removeInstructions(4, 3)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.twitch.ad.video.patch
|
package app.revanced.patches.twitch.ad.video.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -95,7 +95,7 @@ class VideoAdsPatch : AbstractAdPatch(
|
|||||||
""",
|
""",
|
||||||
ExternalLabel(skipLabelName, mutableMethod.getInstruction(0))
|
ExternalLabel(skipLabelName, mutableMethod.getInstruction(0))
|
||||||
)
|
)
|
||||||
} ?: throw CheckAdEligibilityLambdaFingerprint.toErrorResult()
|
} ?: throw CheckAdEligibilityLambdaFingerprint.exception
|
||||||
|
|
||||||
GetReadyToShowAdFingerprint.result?.apply {
|
GetReadyToShowAdFingerprint.result?.apply {
|
||||||
val adFormatDeclined = "Ltv/twitch/android/shared/display/ads/theatre/StreamDisplayAdsPresenter\$Action\$AdFormatDeclined;"
|
val adFormatDeclined = "Ltv/twitch/android/shared/display/ads/theatre/StreamDisplayAdsPresenter\$Action\$AdFormatDeclined;"
|
||||||
@ -110,7 +110,7 @@ class VideoAdsPatch : AbstractAdPatch(
|
|||||||
""",
|
""",
|
||||||
ExternalLabel(skipLabelName, mutableMethod.getInstruction(0))
|
ExternalLabel(skipLabelName, mutableMethod.getInstruction(0))
|
||||||
)
|
)
|
||||||
} ?: throw GetReadyToShowAdFingerprint.toErrorResult()
|
} ?: throw GetReadyToShowAdFingerprint.exception
|
||||||
|
|
||||||
// Spoof showAds JSON field
|
// Spoof showAds JSON field
|
||||||
ContentConfigShowAdsFingerprint.result?.apply {
|
ContentConfigShowAdsFingerprint.result?.apply {
|
||||||
@ -121,7 +121,7 @@ class VideoAdsPatch : AbstractAdPatch(
|
|||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw ContentConfigShowAdsFingerprint.toErrorResult()
|
} ?: throw ContentConfigShowAdsFingerprint.exception
|
||||||
|
|
||||||
SettingsPatch.PreferenceScreen.ADS.CLIENT_SIDE.addPreferences(
|
SettingsPatch.PreferenceScreen.ADS.CLIENT_SIDE.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.twitch.chat.antidelete.patch
|
package app.revanced.patches.twitch.chat.antidelete.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -51,11 +51,11 @@ class ShowDeletedMessagesPatch : BytecodePatch(
|
|||||||
""",
|
""",
|
||||||
ExternalLabel("no_spoiler", getInstruction(implementation!!.instructions.lastIndex))
|
ExternalLabel("no_spoiler", getInstruction(implementation!!.instructions.lastIndex))
|
||||||
)
|
)
|
||||||
} ?: throw DeletedMessageClickableSpanCtorFingerprint.toErrorResult()
|
} ?: throw DeletedMessageClickableSpanCtorFingerprint.exception
|
||||||
|
|
||||||
// Spoiler mode: Disable setHasModAccess setter
|
// Spoiler mode: Disable setHasModAccess setter
|
||||||
SetHasModAccessFingerprint.result?.mutableMethod?.addInstruction(0, "return-void")
|
SetHasModAccessFingerprint.result?.mutableMethod?.addInstruction(0, "return-void")
|
||||||
?: throw SetHasModAccessFingerprint.toErrorResult()
|
?: throw SetHasModAccessFingerprint.exception
|
||||||
|
|
||||||
// Cross-out mode: Reformat span of deleted message
|
// Cross-out mode: Reformat span of deleted message
|
||||||
ChatUtilCreateDeletedSpanFingerprint.result?.mutableMethod?.apply {
|
ChatUtilCreateDeletedSpanFingerprint.result?.mutableMethod?.apply {
|
||||||
@ -69,7 +69,7 @@ class ShowDeletedMessagesPatch : BytecodePatch(
|
|||||||
""",
|
""",
|
||||||
ExternalLabel("no_reformat", getInstruction(0))
|
ExternalLabel("no_reformat", getInstruction(0))
|
||||||
)
|
)
|
||||||
} ?: throw ChatUtilCreateDeletedSpanFingerprint.toErrorResult()
|
} ?: throw ChatUtilCreateDeletedSpanFingerprint.exception
|
||||||
|
|
||||||
SettingsPatch.PreferenceScreen.CHAT.GENERAL.addPreferences(
|
SettingsPatch.PreferenceScreen.CHAT.GENERAL.addPreferences(
|
||||||
ListPreference(
|
ListPreference(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.twitch.chat.autoclaim.patch
|
package app.revanced.patches.twitch.chat.autoclaim.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -60,6 +60,6 @@ class AutoClaimChannelPointPatch : BytecodePatch(
|
|||||||
""",
|
""",
|
||||||
ExternalLabel("auto_claim", getInstruction(lastIndex))
|
ExternalLabel("auto_claim", getInstruction(lastIndex))
|
||||||
)
|
)
|
||||||
} ?: throw CommunityPointsButtonViewDelegateFingerprint.toErrorResult()
|
} ?: throw CommunityPointsButtonViewDelegateFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.twitch.debug.patch
|
package app.revanced.patches.twitch.debug.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -44,7 +44,7 @@ class DebugModePatch : BytecodePatch(
|
|||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw it.toErrorResult()
|
} ?: throw it.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsPatch.PreferenceScreen.MISC.OTHER.addPreferences(
|
SettingsPatch.PreferenceScreen.MISC.OTHER.addPreferences(
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.twitch.misc.settings.bytecode.patch
|
package app.revanced.patches.twitch.misc.settings.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -55,7 +55,7 @@ class SettingsPatch : BytecodePatch(
|
|||||||
""",
|
""",
|
||||||
ExternalLabel("no_rv_settings_init", mutableMethod.getInstruction(insertIndex))
|
ExternalLabel("no_rv_settings_init", mutableMethod.getInstruction(insertIndex))
|
||||||
)
|
)
|
||||||
} ?: throw SettingsActivityOnCreateFingerprint.toErrorResult()
|
} ?: throw SettingsActivityOnCreateFingerprint.exception
|
||||||
|
|
||||||
// Create new menu item for settings menu
|
// Create new menu item for settings menu
|
||||||
SettingsMenuItemEnumFingerprint.result?.apply {
|
SettingsMenuItemEnumFingerprint.result?.apply {
|
||||||
@ -65,7 +65,7 @@ class SettingsPatch : BytecodePatch(
|
|||||||
REVANCED_SETTINGS_MENU_ITEM_TITLE_RES,
|
REVANCED_SETTINGS_MENU_ITEM_TITLE_RES,
|
||||||
REVANCED_SETTINGS_MENU_ITEM_ICON_RES
|
REVANCED_SETTINGS_MENU_ITEM_ICON_RES
|
||||||
)
|
)
|
||||||
} ?: throw SettingsMenuItemEnumFingerprint.toErrorResult()
|
} ?: throw SettingsMenuItemEnumFingerprint.exception
|
||||||
|
|
||||||
// Intercept settings menu creation and add new menu item
|
// Intercept settings menu creation and add new menu item
|
||||||
MenuGroupsUpdatedFingerprint.result?.apply {
|
MenuGroupsUpdatedFingerprint.result?.apply {
|
||||||
@ -77,7 +77,7 @@ class SettingsPatch : BytecodePatch(
|
|||||||
move-result-object p1
|
move-result-object p1
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw MenuGroupsUpdatedFingerprint.toErrorResult()
|
} ?: throw MenuGroupsUpdatedFingerprint.exception
|
||||||
|
|
||||||
// Intercept onclick events for the settings menu
|
// Intercept onclick events for the settings menu
|
||||||
MenuGroupsOnClickFingerprint.result?.apply {
|
MenuGroupsOnClickFingerprint.result?.apply {
|
||||||
@ -94,7 +94,7 @@ class SettingsPatch : BytecodePatch(
|
|||||||
""",
|
""",
|
||||||
ExternalLabel("no_rv_settings_onclick", mutableMethod.getInstruction(insertIndex))
|
ExternalLabel("no_rv_settings_onclick", mutableMethod.getInstruction(insertIndex))
|
||||||
)
|
)
|
||||||
} ?: throw MenuGroupsOnClickFingerprint.toErrorResult()
|
} ?: throw MenuGroupsOnClickFingerprint.exception
|
||||||
|
|
||||||
addString("revanced_settings", "ReVanced Settings", false)
|
addString("revanced_settings", "ReVanced Settings", false)
|
||||||
addString("revanced_reboot_message", "Twitch needs to restart to apply your changes. Restart now?", false)
|
addString("revanced_reboot_message", "Twitch needs to restart to apply your changes. Restart now?", false)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.vsco.misc.pro.patch
|
package app.revanced.patches.vsco.misc.pro.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.*
|
import app.revanced.patcher.annotation.*
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
@ -25,6 +25,6 @@ class UnlockProPatch : BytecodePatch(
|
|||||||
const p1, 0x1
|
const p1, 0x1
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw RevCatSubscriptionFingerprint.toErrorResult()
|
} ?: throw RevCatSubscriptionFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.ad.getpremium.bytecode.patch
|
package app.revanced.patches.youtube.ad.getpremium.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||||
@ -62,7 +62,7 @@ class HideGetPremiumPatch : BytecodePatch(listOf(GetPremiumViewFingerprint)) {
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw GetPremiumViewFingerprint.toErrorResult()
|
} ?: throw GetPremiumViewFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.interaction.seekbar.patch
|
package app.revanced.patches.youtube.interaction.seekbar.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -43,7 +43,7 @@ class EnableSeekbarTappingPatch : BytecodePatch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
seekbarTappingMethods ?: throw OnTouchEventHandlerFingerprint.toErrorResult()
|
seekbarTappingMethods ?: throw OnTouchEventHandlerFingerprint.exception
|
||||||
|
|
||||||
SeekbarTappingFingerprint.result?.let {
|
SeekbarTappingFingerprint.result?.let {
|
||||||
val insertIndex = it.scanResult.patternScanResult!!.endIndex - 1
|
val insertIndex = it.scanResult.patternScanResult!!.endIndex - 1
|
||||||
@ -72,6 +72,6 @@ class EnableSeekbarTappingPatch : BytecodePatch(
|
|||||||
ExternalLabel("disabled", getInstruction(insertIndex))
|
ExternalLabel("disabled", getInstruction(insertIndex))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw SeekbarTappingFingerprint.toErrorResult()
|
} ?: throw SeekbarTappingFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package app.revanced.patches.youtube.layout.buttons.autoplay.patch
|
package app.revanced.patches.youtube.layout.buttons.autoplay.patch
|
||||||
|
|
||||||
import app.revanced.extensions.findIndexForIdResource
|
import app.revanced.extensions.findIndexForIdResource
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -68,6 +68,6 @@ class HideAutoplayButtonPatch : BytecodePatch(
|
|||||||
""",
|
""",
|
||||||
ExternalLabel("hidden", jumpInstruction)
|
ExternalLabel("hidden", jumpInstruction)
|
||||||
)
|
)
|
||||||
} ?: throw LayoutConstructorFingerprint.toErrorResult()
|
} ?: throw LayoutConstructorFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.buttons.navigation.patch
|
package app.revanced.patches.youtube.layout.buttons.navigation.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -101,7 +101,7 @@ class NavigationButtonsPatch : BytecodePatch(listOf(AddCreateButtonViewFingerpri
|
|||||||
initializeButtonsResult.mutableClass
|
initializeButtonsResult.mutableClass
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
throw it.toErrorResult()
|
throw it.exception
|
||||||
}
|
}
|
||||||
.map { it.result!!.scanResult.patternScanResult!! }
|
.map { it.result!!.scanResult.patternScanResult!! }
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ class NavigationButtonsPatch : BytecodePatch(listOf(AddCreateButtonViewFingerpri
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw AddCreateButtonViewFingerprint.toErrorResult()
|
} ?: throw AddCreateButtonViewFingerprint.exception
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Resolve fingerprints
|
* Resolve fingerprints
|
||||||
@ -158,7 +158,7 @@ class NavigationButtonsPatch : BytecodePatch(listOf(AddCreateButtonViewFingerpri
|
|||||||
|
|
||||||
InitializeButtonsFingerprint.result!!.let {
|
InitializeButtonsFingerprint.result!!.let {
|
||||||
if (!PivotBarCreateButtonViewFingerprint.resolve(context, it.mutableMethod, it.mutableClass))
|
if (!PivotBarCreateButtonViewFingerprint.resolve(context, it.mutableMethod, it.mutableClass))
|
||||||
throw PivotBarCreateButtonViewFingerprint.toErrorResult()
|
throw PivotBarCreateButtonViewFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
PivotBarCreateButtonViewFingerprint.result!!.apply {
|
PivotBarCreateButtonViewFingerprint.result!!.apply {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.buttons.navigation.patch
|
package app.revanced.patches.youtube.layout.buttons.navigation.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
|
||||||
@ -28,8 +28,8 @@ class ResolvePivotBarFingerprintsPatch : BytecodePatch(
|
|||||||
context,
|
context,
|
||||||
it.classDef
|
it.classDef
|
||||||
)
|
)
|
||||||
) throw InitializeButtonsFingerprint.toErrorResult()
|
) throw InitializeButtonsFingerprint.exception
|
||||||
} ?: throw PivotBarConstructorFingerprint.toErrorResult()
|
} ?: throw PivotBarConstructorFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
internal companion object {
|
internal companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.buttons.player.hide.patch
|
package app.revanced.patches.youtube.layout.buttons.player.hide.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -67,6 +67,6 @@ class HidePlayerButtonsPatch : BytecodePatch(
|
|||||||
move-result v$hasPreviousParameterRegister
|
move-result v$hasPreviousParameterRegister
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw PlayerControlsVisibilityModelFingerprint.toErrorResult()
|
} ?: throw PlayerControlsVisibilityModelFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.albumcards.bytecode.patch
|
package app.revanced.patches.youtube.layout.hide.albumcards.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -41,6 +41,6 @@ class AlbumCardsPatch : BytecodePatch(
|
|||||||
"hideAlbumCard(Landroid/view/View;)V"
|
"hideAlbumCard(Landroid/view/View;)V"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw AlbumCardsFingerprint.toErrorResult()
|
} ?: throw AlbumCardsFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.breakingnews.bytecode.patch
|
package app.revanced.patches.youtube.layout.hide.breakingnews.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -42,7 +42,7 @@ class BreakingNewsPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
} ?: throw BreakingNewsFingerprint.toErrorResult()
|
} ?: throw BreakingNewsFingerprint.exception
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.crowdfundingbox.bytecode.patch
|
package app.revanced.patches.youtube.layout.hide.crowdfundingbox.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -33,7 +33,7 @@ class CrowdfundingBoxPatch : BytecodePatch(
|
|||||||
|
|
||||||
addInstruction(insertIndex, "invoke-static {v$objectRegister}, $INTEGRATIONS_METHOD_DESCRIPTOR")
|
addInstruction(insertIndex, "invoke-static {v$objectRegister}, $INTEGRATIONS_METHOD_DESCRIPTOR")
|
||||||
}
|
}
|
||||||
} ?: throw CrowdfundingBoxFingerprint.toErrorResult()
|
} ?: throw CrowdfundingBoxFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.endscreencards.bytecode.patch
|
package app.revanced.patches.youtube.layout.hide.endscreencards.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -32,7 +32,7 @@ class HideEndscreenCardsPatch : BytecodePatch(
|
|||||||
) {
|
) {
|
||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
fun MethodFingerprint.injectHideCall() {
|
fun MethodFingerprint.injectHideCall() {
|
||||||
val layoutResult = result ?: throw toErrorResult()
|
val layoutResult = result ?: throw exception
|
||||||
layoutResult.mutableMethod.apply {
|
layoutResult.mutableMethod.apply {
|
||||||
val insertIndex = layoutResult.scanResult.patternScanResult!!.endIndex + 1
|
val insertIndex = layoutResult.scanResult.patternScanResult!!.endIndex + 1
|
||||||
val viewRegister = getInstruction<Instruction21c>(insertIndex - 1).registerA
|
val viewRegister = getInstruction<Instruction21c>(insertIndex - 1).registerA
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.filterbar.patch
|
package app.revanced.patches.youtube.layout.hide.filterbar.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -76,6 +76,6 @@ class HideFilterBarPatch : BytecodePatch(
|
|||||||
|
|
||||||
addInstructions(insertIndex, instructions(register))
|
addInstructions(insertIndex, instructions(register))
|
||||||
}
|
}
|
||||||
} ?: throw toErrorResult()
|
} ?: throw exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.floatingmicrophone.patch
|
package app.revanced.patches.youtube.layout.hide.floatingmicrophone.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -35,7 +35,7 @@ class HideFloatingMicrophoneButtonPatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw ShowFloatingMicrophoneButtonFingerprint.toErrorResult()
|
} ?: throw ShowFloatingMicrophoneButtonFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.general.patch
|
package app.revanced.patches.youtube.layout.hide.general.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -272,7 +272,7 @@ class HideLayoutComponentsPatch : BytecodePatch(
|
|||||||
addInstruction(0, "move-object/from16 v$freeRegister, p3")
|
addInstruction(0, "move-object/from16 v$freeRegister, p3")
|
||||||
}
|
}
|
||||||
|
|
||||||
} ?: throw ConvertElementToFlatBufferFingerprint.toErrorResult()
|
} ?: throw ConvertElementToFlatBufferFingerprint.exception
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.loadmorebutton.bytecode.patch
|
package app.revanced.patches.youtube.layout.hide.loadmorebutton.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -33,7 +33,7 @@ class HideLoadMoreButtonPatch : BytecodePatch(listOf(HideLoadMoreButtonFingerpri
|
|||||||
"$INTEGRATIONS_CLASS_DESCRIPTOR->hideLoadMoreButton(Landroid/view/View;)V"
|
"$INTEGRATIONS_CLASS_DESCRIPTOR->hideLoadMoreButton(Landroid/view/View;)V"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw HideLoadMoreButtonFingerprint.toErrorResult()
|
} ?: throw HideLoadMoreButtonFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.personalinformation.bytecode.patch
|
package app.revanced.patches.youtube.layout.hide.personalinformation.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -41,6 +41,6 @@ class HideEmailAddressPatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw AccountSwitcherAccessibilityLabelFingerprint.toErrorResult()
|
} ?: throw AccountSwitcherAccessibilityLabelFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.player.overlay.bytecode.patch
|
package app.revanced.patches.youtube.layout.hide.player.overlay.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.indexOfFirstConstantInstructionValue
|
import app.revanced.extensions.indexOfFirstConstantInstructionValue
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -35,7 +35,7 @@ class HidePlayerOverlayPatch : BytecodePatch(listOf(CreatePlayerOverviewFingerpr
|
|||||||
"$INTEGRATIONS_CLASS_DESCRIPTOR->hidePlayerOverlay(Landroid/widget/ImageView;)V"
|
"$INTEGRATIONS_CLASS_DESCRIPTOR->hidePlayerOverlay(Landroid/widget/ImageView;)V"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw CreatePlayerOverviewFingerprint.toErrorResult()
|
} ?: throw CreatePlayerOverviewFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.hide.shorts.bytecode.patch
|
|||||||
|
|
||||||
import app.revanced.extensions.findIndexForIdResource
|
import app.revanced.extensions.findIndexForIdResource
|
||||||
import app.revanced.extensions.injectHideViewCall
|
import app.revanced.extensions.injectHideViewCall
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -61,7 +61,7 @@ class HideShortsComponentsPatch : BytecodePatch(
|
|||||||
"hideShortsShelf"
|
"hideShortsShelf"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw ReelConstructorFingerprint.toErrorResult()
|
} ?: throw ReelConstructorFingerprint.exception
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ class HideShortsComponentsPatch : BytecodePatch(
|
|||||||
// Some Shorts buttons are views, hide them by setting their visibility to GONE.
|
// Some Shorts buttons are views, hide them by setting their visibility to GONE.
|
||||||
CreateShortsButtonsFingerprint.result?.let {
|
CreateShortsButtonsFingerprint.result?.let {
|
||||||
ShortsButtons.values().forEach { button -> button.injectHideCall(it.mutableMethod) }
|
ShortsButtons.values().forEach { button -> button.injectHideCall(it.mutableMethod) }
|
||||||
} ?: throw CreateShortsButtonsFingerprint.toErrorResult()
|
} ?: throw CreateShortsButtonsFingerprint.exception
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ class HideShortsComponentsPatch : BytecodePatch(
|
|||||||
// Hook to get the pivotBar view.
|
// Hook to get the pivotBar view.
|
||||||
SetPivotBarVisibilityParentFingerprint.result?.let {
|
SetPivotBarVisibilityParentFingerprint.result?.let {
|
||||||
if (!SetPivotBarVisibilityFingerprint.resolve(context, it.classDef))
|
if (!SetPivotBarVisibilityFingerprint.resolve(context, it.classDef))
|
||||||
throw SetPivotBarVisibilityFingerprint.toErrorResult()
|
throw SetPivotBarVisibilityFingerprint.exception
|
||||||
|
|
||||||
SetPivotBarVisibilityFingerprint.result!!.let { result ->
|
SetPivotBarVisibilityFingerprint.result!!.let { result ->
|
||||||
result.mutableMethod.apply {
|
result.mutableMethod.apply {
|
||||||
@ -92,17 +92,17 @@ class HideShortsComponentsPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ?: throw SetPivotBarVisibilityParentFingerprint.toErrorResult()
|
} ?: throw SetPivotBarVisibilityParentFingerprint.exception
|
||||||
|
|
||||||
// Hook to hide the navigation bar when Shorts are being played.
|
// Hook to hide the navigation bar when Shorts are being played.
|
||||||
RenderBottomNavigationBarParentFingerprint.result?.let {
|
RenderBottomNavigationBarParentFingerprint.result?.let {
|
||||||
if (!RenderBottomNavigationBarFingerprint.resolve(context, it.classDef))
|
if (!RenderBottomNavigationBarFingerprint.resolve(context, it.classDef))
|
||||||
throw RenderBottomNavigationBarFingerprint.toErrorResult()
|
throw RenderBottomNavigationBarFingerprint.exception
|
||||||
|
|
||||||
RenderBottomNavigationBarFingerprint.result!!.mutableMethod.apply {
|
RenderBottomNavigationBarFingerprint.result!!.mutableMethod.apply {
|
||||||
addInstruction(0, "invoke-static { }, $FILTER_CLASS_DESCRIPTOR->hideNavigationBar()V")
|
addInstruction(0, "invoke-static { }, $FILTER_CLASS_DESCRIPTOR->hideNavigationBar()V")
|
||||||
}
|
}
|
||||||
} ?: throw RenderBottomNavigationBarParentFingerprint.toErrorResult()
|
} ?: throw RenderBottomNavigationBarParentFingerprint.exception
|
||||||
|
|
||||||
// Required to prevent a black bar from appearing at the bottom of the screen.
|
// Required to prevent a black bar from appearing at the bottom of the screen.
|
||||||
BottomNavigationBarFingerprint.result?.let {
|
BottomNavigationBarFingerprint.result?.let {
|
||||||
@ -117,7 +117,7 @@ class HideShortsComponentsPatch : BytecodePatch(
|
|||||||
"hideNavigationBar(Landroid/view/View;)Landroid/view/View;"
|
"hideNavigationBar(Landroid/view/View;)Landroid/view/View;"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw BottomNavigationBarFingerprint.toErrorResult()
|
} ?: throw BottomNavigationBarFingerprint.exception
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.hide.time.patch
|
package app.revanced.patches.youtube.layout.hide.time.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -47,6 +47,6 @@ class HideTimestampPatch : BytecodePatch(
|
|||||||
nop
|
nop
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw TimeCounterFingerprint.toErrorResult()
|
} ?: throw TimeCounterFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.panels.popup.patch
|
package app.revanced.patches.youtube.layout.panels.popup.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -36,7 +36,7 @@ class PlayerPopupPanelsPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val engagementPanelControllerMethod = EngagementPanelControllerFingerprint
|
val engagementPanelControllerMethod = EngagementPanelControllerFingerprint
|
||||||
.result?.mutableMethod ?: throw EngagementPanelControllerFingerprint.toErrorResult()
|
.result?.mutableMethod ?: throw EngagementPanelControllerFingerprint.exception
|
||||||
|
|
||||||
engagementPanelControllerMethod.addInstructionsWithLabels(
|
engagementPanelControllerMethod.addInstructionsWithLabels(
|
||||||
0,
|
0,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.returnyoutubedislike.patch
|
package app.revanced.patches.youtube.layout.returnyoutubedislike.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -89,7 +89,7 @@ class ReturnYouTubeDislikePatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
}.result?.also { result ->
|
}.result?.also { result ->
|
||||||
if (!TextComponentAtomicReferenceFingerprint.resolve(context, result.method, result.classDef))
|
if (!TextComponentAtomicReferenceFingerprint.resolve(context, result.method, result.classDef))
|
||||||
throw TextComponentAtomicReferenceFingerprint.toErrorResult()
|
throw TextComponentAtomicReferenceFingerprint.exception
|
||||||
}?.let { textComponentContextFingerprintResult ->
|
}?.let { textComponentContextFingerprintResult ->
|
||||||
val conversionContextIndex = textComponentContextFingerprintResult
|
val conversionContextIndex = textComponentContextFingerprintResult
|
||||||
.scanResult.patternScanResult!!.startIndex
|
.scanResult.patternScanResult!!.startIndex
|
||||||
@ -126,7 +126,7 @@ class ReturnYouTubeDislikePatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw TextComponentContextFingerprint.toErrorResult()
|
} ?: throw TextComponentContextFingerprint.exception
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
@ -166,7 +166,7 @@ class ReturnYouTubeDislikePatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw ShortsTextViewFingerprint.toErrorResult()
|
} ?: throw ShortsTextViewFingerprint.exception
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
@ -184,7 +184,7 @@ class ReturnYouTubeDislikePatch : BytecodePatch(
|
|||||||
"invoke-static {v$resourceIdentifierRegister, v$textViewRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->setOldUILayoutDislikes(ILandroid/widget/TextView;)V"
|
"invoke-static {v$resourceIdentifierRegister, v$textViewRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->setOldUILayoutDislikes(ILandroid/widget/TextView;)V"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw DislikesOldLayoutTextViewFingerprint.toErrorResult()
|
} ?: throw DislikesOldLayoutTextViewFingerprint.exception
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.searchbar.patch
|
package app.revanced.patches.youtube.layout.searchbar.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -38,7 +38,7 @@ class WideSearchbarPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
val result = CreateSearchSuggestionsFingerprint.result ?: throw CreateSearchSuggestionsFingerprint.toErrorResult()
|
val result = CreateSearchSuggestionsFingerprint.result ?: throw CreateSearchSuggestionsFingerprint.exception
|
||||||
|
|
||||||
// patch methods
|
// patch methods
|
||||||
mapOf(
|
mapOf(
|
||||||
@ -60,7 +60,7 @@ class WideSearchbarPatch : BytecodePatch(
|
|||||||
fun BytecodeContext.walkMutable(index: Int, fromFingerprint: MethodFingerprint) =
|
fun BytecodeContext.walkMutable(index: Int, fromFingerprint: MethodFingerprint) =
|
||||||
fromFingerprint.result?.let {
|
fromFingerprint.result?.let {
|
||||||
toMethodWalker(it.method).nextMethod(index, true).getMethod() as MutableMethod
|
toMethodWalker(it.method).nextMethod(index, true).getMethod() as MutableMethod
|
||||||
} ?: throw fromFingerprint.toErrorResult()
|
} ?: throw fromFingerprint.exception
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package app.revanced.patches.youtube.layout.seekbar.bytecode.patch
|
package app.revanced.patches.youtube.layout.seekbar.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.indexOfFirstConstantInstructionValue
|
import app.revanced.extensions.indexOfFirstConstantInstructionValue
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
@ -42,11 +42,11 @@ class SeekbarColorBytecodePatch : BytecodePatch(
|
|||||||
PlayerSeekbarColorFingerprint.result?.mutableMethod?.apply {
|
PlayerSeekbarColorFingerprint.result?.mutableMethod?.apply {
|
||||||
addColorChangeInstructions(SeekbarColorResourcePatch.inlineTimeBarColorizedBarPlayedColorDarkId)
|
addColorChangeInstructions(SeekbarColorResourcePatch.inlineTimeBarColorizedBarPlayedColorDarkId)
|
||||||
addColorChangeInstructions(SeekbarColorResourcePatch.inlineTimeBarPlayedNotHighlightedColorId)
|
addColorChangeInstructions(SeekbarColorResourcePatch.inlineTimeBarPlayedNotHighlightedColorId)
|
||||||
} ?: throw PlayerSeekbarColorFingerprint.toErrorResult()
|
} ?: throw PlayerSeekbarColorFingerprint.exception
|
||||||
|
|
||||||
ShortsSeekbarColorFingerprint.result?.mutableMethod?.apply {
|
ShortsSeekbarColorFingerprint.result?.mutableMethod?.apply {
|
||||||
addColorChangeInstructions(SeekbarColorResourcePatch.reelTimeBarPlayedColorId)
|
addColorChangeInstructions(SeekbarColorResourcePatch.reelTimeBarPlayedColorId)
|
||||||
} ?: throw ShortsSeekbarColorFingerprint.toErrorResult()
|
} ?: throw ShortsSeekbarColorFingerprint.exception
|
||||||
|
|
||||||
SetSeekbarClickedColorFingerprint.result?.let { result ->
|
SetSeekbarClickedColorFingerprint.result?.let { result ->
|
||||||
result.mutableMethod.let {
|
result.mutableMethod.let {
|
||||||
@ -67,7 +67,7 @@ class SeekbarColorBytecodePatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ?: throw SetSeekbarClickedColorFingerprint.toErrorResult()
|
} ?: throw SetSeekbarClickedColorFingerprint.exception
|
||||||
|
|
||||||
lithoColorOverrideHook(INTEGRATIONS_CLASS_DESCRIPTOR, "getLithoColor")
|
lithoColorOverrideHook(INTEGRATIONS_CLASS_DESCRIPTOR, "getLithoColor")
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.sponsorblock.bytecode.patch
|
package app.revanced.patches.youtube.layout.sponsorblock.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -64,8 +64,8 @@ class SponsorBlockBytecodePatch : BytecodePatch(
|
|||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
LayoutConstructorFingerprint.result?.let {
|
LayoutConstructorFingerprint.result?.let {
|
||||||
if (!ControlsOverlayFingerprint.resolve(context, it.classDef))
|
if (!ControlsOverlayFingerprint.resolve(context, it.classDef))
|
||||||
throw ControlsOverlayFingerprint.toErrorResult()
|
throw ControlsOverlayFingerprint.exception
|
||||||
} ?: throw LayoutConstructorFingerprint.toErrorResult()
|
} ?: throw LayoutConstructorFingerprint.exception
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hook the video time methods
|
* Hook the video time methods
|
||||||
@ -219,7 +219,7 @@ class SponsorBlockBytecodePatch : BytecodePatch(
|
|||||||
"invoke-static {v$frameLayoutRegister}, $INTEGRATIONS_SPONSORBLOCK_VIEW_CONTROLLER_CLASS_DESCRIPTOR->initialize(Landroid/view/ViewGroup;)V"
|
"invoke-static {v$frameLayoutRegister}, $INTEGRATIONS_SPONSORBLOCK_VIEW_CONTROLLER_CLASS_DESCRIPTOR->initialize(Landroid/view/ViewGroup;)V"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw ControlsOverlayFingerprint.toErrorResult()
|
} ?: throw ControlsOverlayFingerprint.exception
|
||||||
|
|
||||||
// get rectangle field name
|
// get rectangle field name
|
||||||
RectangleFieldInvalidatorFingerprint.resolve(context, seekbarSignatureResult.classDef)
|
RectangleFieldInvalidatorFingerprint.resolve(context, seekbarSignatureResult.classDef)
|
||||||
@ -258,13 +258,13 @@ class SponsorBlockBytecodePatch : BytecodePatch(
|
|||||||
// The vote and create segment buttons automatically change their visibility when appropriate,
|
// The vote and create segment buttons automatically change their visibility when appropriate,
|
||||||
// but if buttons are showing when the end of the video is reached then they will not automatically hide.
|
// but if buttons are showing when the end of the video is reached then they will not automatically hide.
|
||||||
// Add a hook to forcefully hide when the end of the video is reached.
|
// Add a hook to forcefully hide when the end of the video is reached.
|
||||||
AutoRepeatParentFingerprint.result ?: throw AutoRepeatParentFingerprint.toErrorResult()
|
AutoRepeatParentFingerprint.result ?: throw AutoRepeatParentFingerprint.exception
|
||||||
AutoRepeatFingerprint.also {
|
AutoRepeatFingerprint.also {
|
||||||
it.resolve(context, AutoRepeatParentFingerprint.result!!.classDef)
|
it.resolve(context, AutoRepeatParentFingerprint.result!!.classDef)
|
||||||
}.result?.mutableMethod?.addInstruction(
|
}.result?.mutableMethod?.addInstruction(
|
||||||
0,
|
0,
|
||||||
"invoke-static {}, $INTEGRATIONS_SPONSORBLOCK_VIEW_CONTROLLER_CLASS_DESCRIPTOR->endOfVideoReached()V"
|
"invoke-static {}, $INTEGRATIONS_SPONSORBLOCK_VIEW_CONTROLLER_CLASS_DESCRIPTOR->endOfVideoReached()V"
|
||||||
) ?: throw AutoRepeatFingerprint.toErrorResult()
|
) ?: throw AutoRepeatFingerprint.exception
|
||||||
|
|
||||||
// TODO: isSBChannelWhitelisting implementation
|
// TODO: isSBChannelWhitelisting implementation
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.spoofappversion.bytecode.patch
|
package app.revanced.patches.youtube.layout.spoofappversion.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -77,7 +77,7 @@ class SpoofAppVersionPatch : BytecodePatch(
|
|||||||
move-result-object v$buildOverrideNameRegister
|
move-result-object v$buildOverrideNameRegister
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw SpoofAppVersionFingerprint.toErrorResult()
|
} ?: throw SpoofAppVersionFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.tabletminiplayer.patch
|
package app.revanced.patches.youtube.layout.tabletminiplayer.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -47,7 +47,7 @@ class TabletMiniPlayerPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
// First resolve the fingerprints via the parent fingerprint.
|
// First resolve the fingerprints via the parent fingerprint.
|
||||||
MiniPlayerDimensionsCalculatorParentFingerprint.result ?: throw MiniPlayerDimensionsCalculatorParentFingerprint.toErrorResult()
|
MiniPlayerDimensionsCalculatorParentFingerprint.result ?: throw MiniPlayerDimensionsCalculatorParentFingerprint.exception
|
||||||
val miniPlayerClass = MiniPlayerDimensionsCalculatorParentFingerprint.result!!.classDef
|
val miniPlayerClass = MiniPlayerDimensionsCalculatorParentFingerprint.result!!.classDef
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -89,7 +89,7 @@ class TabletMiniPlayerPatch : BytecodePatch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return@let
|
return@let
|
||||||
} ?: throw MiniPlayerOverrideFingerprint.toErrorResult()
|
} ?: throw MiniPlayerOverrideFingerprint.exception
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Size check return value override.
|
* Size check return value override.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.theme.bytecode.patch
|
package app.revanced.patches.youtube.layout.theme.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -19,7 +19,7 @@ class LithoColorHookPatch : BytecodePatch(listOf(LithoThemeFingerprint)) {
|
|||||||
insertionIndex = it.scanResult.patternScanResult!!.endIndex - 1
|
insertionIndex = it.scanResult.patternScanResult!!.endIndex - 1
|
||||||
colorRegister = "p1"
|
colorRegister = "p1"
|
||||||
insertionMethod = it.mutableMethod
|
insertionMethod = it.mutableMethod
|
||||||
} ?: throw LithoThemeFingerprint.toErrorResult()
|
} ?: throw LithoThemeFingerprint.exception
|
||||||
}
|
}
|
||||||
companion object {
|
companion object {
|
||||||
private var insertionIndex : Int = -1
|
private var insertionIndex : Int = -1
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.layout.thumbnails.patch
|
package app.revanced.patches.youtube.layout.thumbnails.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -73,23 +73,23 @@ class AlternativeThumbnailsPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
MessageDigestImageUrlParentFingerprint.result
|
MessageDigestImageUrlParentFingerprint.result
|
||||||
?: throw MessageDigestImageUrlParentFingerprint.toErrorResult()
|
?: throw MessageDigestImageUrlParentFingerprint.exception
|
||||||
MessageDigestImageUrlFingerprint.resolve(context, MessageDigestImageUrlParentFingerprint.result!!.classDef)
|
MessageDigestImageUrlFingerprint.resolve(context, MessageDigestImageUrlParentFingerprint.result!!.classDef)
|
||||||
MessageDigestImageUrlFingerprint.result?.apply {
|
MessageDigestImageUrlFingerprint.result?.apply {
|
||||||
loadImageUrlMethod = mutableMethod
|
loadImageUrlMethod = mutableMethod
|
||||||
} ?: throw MessageDigestImageUrlFingerprint.toErrorResult()
|
} ?: throw MessageDigestImageUrlFingerprint.exception
|
||||||
addImageUrlHook(INTEGRATIONS_CLASS_DESCRIPTOR, true)
|
addImageUrlHook(INTEGRATIONS_CLASS_DESCRIPTOR, true)
|
||||||
|
|
||||||
|
|
||||||
CronetURLRequestCallbackOnResponseStartedFingerprint.result
|
CronetURLRequestCallbackOnResponseStartedFingerprint.result
|
||||||
?: throw CronetURLRequestCallbackOnResponseStartedFingerprint.toErrorResult()
|
?: throw CronetURLRequestCallbackOnResponseStartedFingerprint.exception
|
||||||
CronetURLRequestCallbackOnSucceededFingerprint.resolve(
|
CronetURLRequestCallbackOnSucceededFingerprint.resolve(
|
||||||
context,
|
context,
|
||||||
CronetURLRequestCallbackOnResponseStartedFingerprint.result!!.classDef
|
CronetURLRequestCallbackOnResponseStartedFingerprint.result!!.classDef
|
||||||
)
|
)
|
||||||
CronetURLRequestCallbackOnSucceededFingerprint.result?.apply {
|
CronetURLRequestCallbackOnSucceededFingerprint.result?.apply {
|
||||||
loadImageSuccessCallbackMethod = mutableMethod
|
loadImageSuccessCallbackMethod = mutableMethod
|
||||||
} ?: throw CronetURLRequestCallbackOnSucceededFingerprint.toErrorResult()
|
} ?: throw CronetURLRequestCallbackOnSucceededFingerprint.exception
|
||||||
addImageUrlSuccessCallbackHook(INTEGRATIONS_CLASS_DESCRIPTOR)
|
addImageUrlSuccessCallbackHook(INTEGRATIONS_CLASS_DESCRIPTOR)
|
||||||
|
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ class AlternativeThumbnailsPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
CronetURLRequestCallbackOnFailureFingerprint.result?.apply {
|
CronetURLRequestCallbackOnFailureFingerprint.result?.apply {
|
||||||
loadImageErrorCallbackMethod = mutableMethod
|
loadImageErrorCallbackMethod = mutableMethod
|
||||||
} ?: throw CronetURLRequestCallbackOnFailureFingerprint.toErrorResult()
|
} ?: throw CronetURLRequestCallbackOnFailureFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
internal companion object {
|
internal companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.misc.bottomsheet.hook.patch
|
package app.revanced.patches.youtube.misc.bottomsheet.hook.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
@ -29,7 +29,7 @@ class BottomSheetHookPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ?: throw CreateBottomSheetFingerprint.toErrorResult()
|
} ?: throw CreateBottomSheetFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
internal companion object {
|
internal companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.misc.fix.backtoexitgesture.patch
|
package app.revanced.patches.youtube.misc.fix.backtoexitgesture.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
@ -27,7 +27,7 @@ class FixBackToExitGesturePatch : BytecodePatch(
|
|||||||
resolve(
|
resolve(
|
||||||
context,
|
context,
|
||||||
RecyclerViewTopScrollingParentFingerprint.result?.classDef
|
RecyclerViewTopScrollingParentFingerprint.result?.classDef
|
||||||
?: throw RecyclerViewTopScrollingParentFingerprint.toErrorResult()
|
?: throw RecyclerViewTopScrollingParentFingerprint.exception
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,6 +68,6 @@ class FixBackToExitGesturePatch : BytecodePatch(
|
|||||||
mutableMethod.addInstruction(
|
mutableMethod.addInstruction(
|
||||||
scanResult.patternScanResult!!.endIndex, targetMethod.toString()
|
scanResult.patternScanResult!!.endIndex, targetMethod.toString()
|
||||||
)
|
)
|
||||||
} ?: throw this.toErrorResult()
|
} ?: throw this.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.misc.fix.playback.patch
|
package app.revanced.patches.youtube.misc.fix.playback.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -30,7 +30,7 @@ class ClientSpoofPatch : BytecodePatch(
|
|||||||
addInstruction(insertIndex, "const-string v$packageNameRegister, \"$ORIGINAL_PACKAGE_NAME\"")
|
addInstruction(insertIndex, "const-string v$packageNameRegister, \"$ORIGINAL_PACKAGE_NAME\"")
|
||||||
}
|
}
|
||||||
|
|
||||||
} ?: throw UserAgentHeaderBuilderFingerprint.toErrorResult()
|
} ?: throw UserAgentHeaderBuilderFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.misc.fix.playback.patch
|
package app.revanced.patches.youtube.misc.fix.playback.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -52,14 +52,14 @@ class SpoofSignatureVerificationPatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw ProtobufParameterBuilderFingerprint.toErrorResult()
|
} ?: throw ProtobufParameterBuilderFingerprint.exception
|
||||||
|
|
||||||
|
|
||||||
// When signature spoofing is enabled, the seekbar when tapped does not show
|
// When signature spoofing is enabled, the seekbar when tapped does not show
|
||||||
// the video time, chapter names, or the video thumbnail.
|
// the video time, chapter names, or the video thumbnail.
|
||||||
// Changing the value returned of this method forces all of these to show up,
|
// Changing the value returned of this method forces all of these to show up,
|
||||||
// except the thumbnails are blank, which is handled with the patch below.
|
// except the thumbnails are blank, which is handled with the patch below.
|
||||||
StoryboardThumbnailParentFingerprint.result ?: throw StoryboardThumbnailParentFingerprint.toErrorResult()
|
StoryboardThumbnailParentFingerprint.result ?: throw StoryboardThumbnailParentFingerprint.exception
|
||||||
StoryboardThumbnailFingerprint.resolve(context, StoryboardThumbnailParentFingerprint.result!!.classDef)
|
StoryboardThumbnailFingerprint.resolve(context, StoryboardThumbnailParentFingerprint.result!!.classDef)
|
||||||
StoryboardThumbnailFingerprint.result?.apply {
|
StoryboardThumbnailFingerprint.result?.apply {
|
||||||
val endIndex = scanResult.patternScanResult!!.endIndex
|
val endIndex = scanResult.patternScanResult!!.endIndex
|
||||||
@ -81,7 +81,7 @@ class SpoofSignatureVerificationPatch : BytecodePatch(
|
|||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw StoryboardThumbnailFingerprint.toErrorResult()
|
} ?: throw StoryboardThumbnailFingerprint.exception
|
||||||
|
|
||||||
|
|
||||||
// Seekbar thumbnail now show up but are always a blank image.
|
// Seekbar thumbnail now show up but are always a blank image.
|
||||||
@ -99,7 +99,7 @@ class SpoofSignatureVerificationPatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw ScrubbedPreviewLayoutFingerprint.toErrorResult()
|
} ?: throw ScrubbedPreviewLayoutFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.misc.links.open.patch
|
package app.revanced.patches.youtube.misc.links.open.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -42,7 +42,7 @@ class OpenLinksExternallyPatch : BytecodePatch(
|
|||||||
BindSessionServiceFingerprint,
|
BindSessionServiceFingerprint,
|
||||||
InitializeCustomTabSupportFingerprint
|
InitializeCustomTabSupportFingerprint
|
||||||
).forEach {
|
).forEach {
|
||||||
val result = it.result ?: throw it.toErrorResult()
|
val result = it.result ?: throw it.exception
|
||||||
val insertIndex = result.scanResult.patternScanResult!!.endIndex + 1
|
val insertIndex = result.scanResult.patternScanResult!!.endIndex + 1
|
||||||
with(result.mutableMethod) {
|
with(result.mutableMethod) {
|
||||||
val register = (implementation!!.instructions[insertIndex - 1] as Instruction21c).registerA
|
val register = (implementation!!.instructions[insertIndex - 1] as Instruction21c).registerA
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.misc.litho.filter.patch
|
package app.revanced.patches.youtube.misc.litho.filter.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
@ -66,7 +66,7 @@ class LithoFilterPatch : BytecodePatch(
|
|||||||
ReadComponentIdentifierFingerprint
|
ReadComponentIdentifierFingerprint
|
||||||
).forEach { fingerprint ->
|
).forEach { fingerprint ->
|
||||||
if (fingerprint.resolve(context, it.mutableMethod, it.mutableClass)) return@forEach
|
if (fingerprint.resolve(context, it.mutableMethod, it.mutableClass)) return@forEach
|
||||||
throw fingerprint.toErrorResult()
|
throw fingerprint.exception
|
||||||
}
|
}
|
||||||
}?.let { bytesToComponentContextMethod ->
|
}?.let { bytesToComponentContextMethod ->
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ class LithoFilterPatch : BytecodePatch(
|
|||||||
ProtobufBufferReferenceFingerprint.result
|
ProtobufBufferReferenceFingerprint.result
|
||||||
?.mutableMethod?.addInstruction(0,
|
?.mutableMethod?.addInstruction(0,
|
||||||
" invoke-static { p2 }, $INTEGRATIONS_CLASS_DESCRIPTOR->setProtoBuffer(Ljava/nio/ByteBuffer;)V")
|
" invoke-static { p2 }, $INTEGRATIONS_CLASS_DESCRIPTOR->setProtoBuffer(Ljava/nio/ByteBuffer;)V")
|
||||||
?: throw ProtobufBufferReferenceFingerprint.toErrorResult()
|
?: throw ProtobufBufferReferenceFingerprint.exception
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ class LithoFilterPatch : BytecodePatch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
} ?: throw ComponentContextParserFingerprint.toErrorResult()
|
} ?: throw ComponentContextParserFingerprint.exception
|
||||||
|
|
||||||
LithoFilterFingerprint.result?.mutableMethod?.apply {
|
LithoFilterFingerprint.result?.mutableMethod?.apply {
|
||||||
removeInstructions(2, 4) // Remove dummy filter.
|
removeInstructions(2, 4) // Remove dummy filter.
|
||||||
@ -157,7 +157,7 @@ class LithoFilterPatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw LithoFilterFingerprint.toErrorResult()
|
} ?: throw LithoFilterFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun close() = LithoFilterFingerprint.result!!
|
override fun close() = LithoFilterFingerprint.result!!
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.misc.minimizedplayback.patch
|
package app.revanced.patches.youtube.misc.minimizedplayback.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -54,10 +54,10 @@ class MinimizedPlaybackPatch : BytecodePatch(
|
|||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw MinimizedPlaybackManagerFingerprint.toErrorResult()
|
} ?: throw MinimizedPlaybackManagerFingerprint.exception
|
||||||
|
|
||||||
// Enable minimized playback option in YouTube settings
|
// Enable minimized playback option in YouTube settings
|
||||||
MinimizedPlaybackSettingsParentFingerprint.result ?: throw MinimizedPlaybackSettingsParentFingerprint.toErrorResult()
|
MinimizedPlaybackSettingsParentFingerprint.result ?: throw MinimizedPlaybackSettingsParentFingerprint.exception
|
||||||
MinimizedPlaybackSettingsFingerprint.resolve(context, MinimizedPlaybackSettingsParentFingerprint.result!!.classDef)
|
MinimizedPlaybackSettingsFingerprint.resolve(context, MinimizedPlaybackSettingsParentFingerprint.result!!.classDef)
|
||||||
MinimizedPlaybackSettingsFingerprint.result?.apply {
|
MinimizedPlaybackSettingsFingerprint.result?.apply {
|
||||||
val booleanCalls = method.implementation!!.instructions.withIndex()
|
val booleanCalls = method.implementation!!.instructions.withIndex()
|
||||||
@ -75,7 +75,7 @@ class MinimizedPlaybackPatch : BytecodePatch(
|
|||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw MinimizedPlaybackSettingsFingerprint.toErrorResult()
|
} ?: throw MinimizedPlaybackSettingsFingerprint.exception
|
||||||
|
|
||||||
// Force allowing background play for videos labeled for kids.
|
// Force allowing background play for videos labeled for kids.
|
||||||
// Some regions and YouTube accounts do not require this patch.
|
// Some regions and YouTube accounts do not require this patch.
|
||||||
@ -84,7 +84,7 @@ class MinimizedPlaybackPatch : BytecodePatch(
|
|||||||
0,
|
0,
|
||||||
"return-void"
|
"return-void"
|
||||||
)
|
)
|
||||||
} ?: throw KidsMinimizedPlaybackPolicyControllerFingerprint.toErrorResult()
|
} ?: throw KidsMinimizedPlaybackPolicyControllerFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.misc.playercontrols.bytecode.patch
|
package app.revanced.patches.youtube.misc.playercontrols.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -29,8 +29,8 @@ class PlayerControlsBytecodePatch : BytecodePatch(
|
|||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
LayoutConstructorFingerprint.result?.let {
|
LayoutConstructorFingerprint.result?.let {
|
||||||
if (!PlayerControlsVisibilityFingerprint.resolve(context, it.classDef))
|
if (!PlayerControlsVisibilityFingerprint.resolve(context, it.classDef))
|
||||||
throw LayoutConstructorFingerprint.toErrorResult()
|
throw LayoutConstructorFingerprint.exception
|
||||||
} ?: throw LayoutConstructorFingerprint.toErrorResult()
|
} ?: throw LayoutConstructorFingerprint.exception
|
||||||
|
|
||||||
showPlayerControlsFingerprintResult = PlayerControlsVisibilityFingerprint.result!!
|
showPlayerControlsFingerprintResult = PlayerControlsVisibilityFingerprint.result!!
|
||||||
inflateFingerprintResult = BottomControlsInflateFingerprint.result!!
|
inflateFingerprintResult = BottomControlsInflateFingerprint.result!!
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.misc.playertype.patch
|
package app.revanced.patches.youtube.misc.playertype.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -24,7 +24,7 @@ class PlayerTypeHookPatch : BytecodePatch(
|
|||||||
PlayerTypeFingerprint.result?.mutableMethod?.addInstruction(
|
PlayerTypeFingerprint.result?.mutableMethod?.addInstruction(
|
||||||
0,
|
0,
|
||||||
"invoke-static {p1}, $INTEGRATIONS_CLASS_DESCRIPTOR->setPlayerType(Ljava/lang/Enum;)V"
|
"invoke-static {p1}, $INTEGRATIONS_CLASS_DESCRIPTOR->setPlayerType(Ljava/lang/Enum;)V"
|
||||||
) ?: throw PlayerTypeFingerprint.toErrorResult()
|
) ?: throw PlayerTypeFingerprint.exception
|
||||||
|
|
||||||
VideoStateFingerprint.result?.let {
|
VideoStateFingerprint.result?.let {
|
||||||
it.mutableMethod.apply {
|
it.mutableMethod.apply {
|
||||||
@ -39,7 +39,7 @@ class PlayerTypeHookPatch : BytecodePatch(
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw VideoStateFingerprint.toErrorResult()
|
} ?: throw VideoStateFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.misc.settings.bytecode.patch
|
package app.revanced.patches.youtube.misc.settings.bytecode.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -55,7 +55,7 @@ class SettingsPatch : BytecodePatch(
|
|||||||
addInstruction(returnIndex + 1, "return-object v0")
|
addInstruction(returnIndex + 1, "return-object v0")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ?: throw SetThemeFingerprint.toErrorResult()
|
} ?: throw SetThemeFingerprint.exception
|
||||||
|
|
||||||
|
|
||||||
// Modify the license activity and remove all existing layout code.
|
// Modify the license activity and remove all existing layout code.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.video.information.patch
|
package app.revanced.patches.youtube.video.information.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -133,7 +133,7 @@ class VideoInformationPatch : BytecodePatch(
|
|||||||
getReference(speedSelectionMethodInstructions, 1, Opcode.IGET)
|
getReference(speedSelectionMethodInstructions, 1, Opcode.IGET)
|
||||||
setPlaybackSpeedMethodReference =
|
setPlaybackSpeedMethodReference =
|
||||||
getReference(speedSelectionMethodInstructions, 2, Opcode.IGET)
|
getReference(speedSelectionMethodInstructions, 2, Opcode.IGET)
|
||||||
} ?: throw OnPlaybackSpeedItemClickFingerprint.toErrorResult()
|
} ?: throw OnPlaybackSpeedItemClickFingerprint.exception
|
||||||
|
|
||||||
userSelectedPlaybackSpeedHook(INTEGRATIONS_CLASS_DESCRIPTOR, "userSelectedPlaybackSpeed")
|
userSelectedPlaybackSpeedHook(INTEGRATIONS_CLASS_DESCRIPTOR, "userSelectedPlaybackSpeed")
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.video.quality.patch
|
package app.revanced.patches.youtube.video.quality.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -158,7 +158,7 @@ class RememberVideoQualityPatch : BytecodePatch(
|
|||||||
move-result p2
|
move-result p2
|
||||||
""",
|
""",
|
||||||
)
|
)
|
||||||
} ?: throw VideoQualitySetterFingerprint.toErrorResult()
|
} ?: throw VideoQualitySetterFingerprint.exception
|
||||||
|
|
||||||
|
|
||||||
// Inject a call to remember the selected quality.
|
// Inject a call to remember the selected quality.
|
||||||
@ -173,7 +173,7 @@ class RememberVideoQualityPatch : BytecodePatch(
|
|||||||
"invoke-static {p$listItemIndexParameter}, $INTEGRATIONS_CLASS_DESCRIPTOR->userChangedQuality(I)V"
|
"invoke-static {p$listItemIndexParameter}, $INTEGRATIONS_CLASS_DESCRIPTOR->userChangedQuality(I)V"
|
||||||
)
|
)
|
||||||
} ?: throw PatchException("Failed to find onItemClick method")
|
} ?: throw PatchException("Failed to find onItemClick method")
|
||||||
} ?: throw VideoQualityItemOnClickParentFingerprint.toErrorResult()
|
} ?: throw VideoQualityItemOnClickParentFingerprint.exception
|
||||||
|
|
||||||
|
|
||||||
// Remember video quality if not using old layout menu.
|
// Remember video quality if not using old layout menu.
|
||||||
@ -187,7 +187,7 @@ class RememberVideoQualityPatch : BytecodePatch(
|
|||||||
"invoke-static {v$qualityRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->userChangedQualityInNewFlyout(I)V"
|
"invoke-static {v$qualityRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->userChangedQualityInNewFlyout(I)V"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} ?: throw NewVideoQualityChangedFingerprint.toErrorResult()
|
} ?: throw NewVideoQualityChangedFingerprint.exception
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.video.speed.custom.patch
|
package app.revanced.patches.youtube.video.speed.custom.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -156,7 +156,7 @@ class CustomPlaybackSpeedPatch : BytecodePatch(
|
|||||||
// This is later called on the field INSTANCE.
|
// This is later called on the field INSTANCE.
|
||||||
val showOldPlaybackSpeedMenuMethod = ShowOldPlaybackSpeedMenuFingerprint.also {
|
val showOldPlaybackSpeedMenuMethod = ShowOldPlaybackSpeedMenuFingerprint.also {
|
||||||
if (!it.resolve(context, result.classDef))
|
if (!it.resolve(context, result.classDef))
|
||||||
throw ShowOldPlaybackSpeedMenuFingerprint.toErrorResult()
|
throw ShowOldPlaybackSpeedMenuFingerprint.exception
|
||||||
}.result!!.method.toString()
|
}.result!!.method.toString()
|
||||||
|
|
||||||
// Insert the call to the "showOldPlaybackSpeedMenu" method on the field INSTANCE.
|
// Insert the call to the "showOldPlaybackSpeedMenu" method on the field INSTANCE.
|
||||||
@ -171,8 +171,8 @@ class CustomPlaybackSpeedPatch : BytecodePatch(
|
|||||||
invoke-virtual { v0 }, $showOldPlaybackSpeedMenuMethod
|
invoke-virtual { v0 }, $showOldPlaybackSpeedMenuMethod
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
} ?: throw ShowOldPlaybackSpeedMenuIntegrationsFingerprint.toErrorResult()
|
} ?: throw ShowOldPlaybackSpeedMenuIntegrationsFingerprint.exception
|
||||||
} ?: throw GetOldPlaybackSpeedsFingerprint.toErrorResult()
|
} ?: throw GetOldPlaybackSpeedsFingerprint.exception
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.video.speed.remember.patch
|
package app.revanced.patches.youtube.video.speed.remember.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -103,7 +103,7 @@ class RememberPlaybackSpeedPatch : BytecodePatch(
|
|||||||
""".trimIndent(),
|
""".trimIndent(),
|
||||||
ExternalLabel("do_not_override", mutableMethod.getInstruction(0))
|
ExternalLabel("do_not_override", mutableMethod.getInstruction(0))
|
||||||
)
|
)
|
||||||
} ?: throw InitializePlaybackSpeedValuesFingerprint.toErrorResult()
|
} ?: throw InitializePlaybackSpeedValuesFingerprint.exception
|
||||||
}
|
}
|
||||||
|
|
||||||
private companion object {
|
private companion object {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtube.video.videoid.patch
|
package app.revanced.patches.youtube.video.videoid.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -38,7 +38,7 @@ class VideoIdPatch : BytecodePatch(
|
|||||||
consumer(it, insertIndex, videoIdRegister)
|
consumer(it, insertIndex, videoIdRegister)
|
||||||
|
|
||||||
}
|
}
|
||||||
} ?: throw VideoIdFingerprint.toErrorResult()
|
} ?: throw VideoIdFingerprint.exception
|
||||||
|
|
||||||
VideoIdFingerprint.setFields { method, insertIndex, videoIdRegister ->
|
VideoIdFingerprint.setFields { method, insertIndex, videoIdRegister ->
|
||||||
insertMethod = method
|
insertMethod = method
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.youtubevanced.ad.general.patch
|
package app.revanced.patches.youtubevanced.ad.general.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
@ -54,6 +54,6 @@ class HideAdsPatch : BytecodePatch(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ?: throw ContainsAdFingerprint.toErrorResult()
|
} ?: throw ContainsAdFingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package app.revanced.util.microg
|
package app.revanced.util.microg
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
import app.revanced.extensions.exception
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
@ -237,7 +237,7 @@ internal object MicroGBytecodeHelper {
|
|||||||
result.mutableMethod.addInstructions(
|
result.mutableMethod.addInstructions(
|
||||||
0, stringInstructions
|
0, stringInstructions
|
||||||
)
|
)
|
||||||
} ?: throw fingerprint.toErrorResult()
|
} ?: throw fingerprint.exception
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ internal object ResourceUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Merge strings. This manages [StringResource]s automatically.
|
* Merge strings. This manages [StringResource]s automatically.
|
||||||
|
*
|
||||||
* @param host The hosting xml resource. Needs to be a valid strings.xml resource.
|
* @param host The hosting xml resource. Needs to be a valid strings.xml resource.
|
||||||
*/
|
*/
|
||||||
internal fun ResourceContext.mergeStrings(host: String) {
|
internal fun ResourceContext.mergeStrings(host: String) {
|
||||||
|
Loading…
Reference in New Issue
Block a user