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:
oSumAtrIX 2023-08-25 00:02:16 +02:00
parent d975eeafb7
commit 47eac14f03
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4
91 changed files with 259 additions and 247 deletions

View File

@ -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)

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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 {

View File

@ -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
} }
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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) }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }

View File

@ -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 {

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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 {

View File

@ -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 {

View File

@ -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)

View File

@ -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(

View File

@ -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(

View File

@ -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
} }
} }

View File

@ -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(

View File

@ -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)

View File

@ -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
} }
} }

View File

@ -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 {

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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 {

View File

@ -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 {

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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
} }
} }

View File

@ -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 {

View File

@ -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

View File

@ -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
} }
} }

View File

@ -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 {

View File

@ -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
} }

View File

@ -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 {

View File

@ -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
} }
} }

View File

@ -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 {

View File

@ -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
} }

View File

@ -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
} }
} }

View File

@ -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,

View File

@ -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
} }

View File

@ -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
/** /**

View File

@ -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")
} }

View File

@ -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
} }

View File

@ -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 {

View File

@ -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.

View File

@ -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

View File

@ -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 {

View File

@ -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 {

View File

@ -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
} }
} }

View File

@ -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 {

View File

@ -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 {

View File

@ -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

View File

@ -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!!

View File

@ -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 {

View File

@ -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!!

View File

@ -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 {

View File

@ -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.

View File

@ -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")
} }

View File

@ -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
} }

View File

@ -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
} }

View File

@ -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 {

View File

@ -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

View File

@ -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
} }
} }

View File

@ -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
} }
} }
} }

View File

@ -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) {