Compare commits

...

13 Commits

Author SHA1 Message Date
semantic-release-bot
69092def55 chore(release): 2.188.0-dev.25 [skip ci]
# [2.188.0-dev.25](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.24...v2.188.0-dev.25) (2023-08-26)

### Features

* **YouTube:** Add `Custom player overlay opacity` patch ([#2721](https://github.com/ReVanced/revanced-patches/issues/2721)) ([004aae8](004aae8258))
2023-08-26 00:15:24 +00:00
johnconner122
004aae8258 feat(YouTube): Add Custom player overlay opacity patch (#2721)
This gets rid of the `Hide player overlay` patch.

Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-08-26 02:12:30 +02:00
semantic-release-bot
c378869941 chore(release): 2.188.0-dev.24 [skip ci]
# [2.188.0-dev.24](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.23...v2.188.0-dev.24) (2023-08-25)

### Features

* Exclude `Custom branding` patch by default ([52e7086](52e70866d9))
2023-08-25 15:57:17 +00:00
oSumAtrIX
52e70866d9 feat: Exclude Custom branding patch by default
Due to design complexity of the patch the default branding included with the patch is mistaken as the branding soley meant for YouTube and not understood merely as the default branding.
2023-08-25 17:54:10 +02:00
semantic-release-bot
c7e1dd7563 chore(release): 2.188.0-dev.23 [skip ci]
# [2.188.0-dev.23](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.22...v2.188.0-dev.23) (2023-08-25)

### Features

* **Strava:** Add `Subscription features` patch ([#2872](https://github.com/ReVanced/revanced-patches/issues/2872)) ([3d4ef97](3d4ef97c1e))
2023-08-25 01:19:27 +00:00
xehpuk
3d4ef97c1e feat(Strava): Add Subscription features patch (#2872)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-08-25 03:16:12 +02:00
semantic-release-bot
040f612818 chore(release): 2.188.0-dev.22 [skip ci]
# [2.188.0-dev.22](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.21...v2.188.0-dev.22) (2023-08-24)

### Features

* Publicize resource utility functions ([520eb07](520eb07277))
* Use an extension property to create new exception when failing to resolve a fingerprint ([a471605](a471605db7))
2023-08-24 22:08:30 +00:00
oSumAtrIX
520eb07277 feat: Publicize resource utility functions
This commit adds the functions to the public API
2023-08-25 00:05:32 +02:00
oSumAtrIX
a471605db7 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
2023-08-25 00:05:30 +02:00
semantic-release-bot
31b5d506a5 chore(release): 2.188.0-dev.21 [skip ci]
# [2.188.0-dev.21](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.20...v2.188.0-dev.21) (2023-08-24)

### Features

* **Duolingo:** Add `Unlock Duolingo Super` patch ([#2862](https://github.com/ReVanced/revanced-patches/issues/2862)) ([1168c0c](1168c0cdf4))
2023-08-24 20:24:14 +00:00
Karol
1168c0cdf4 feat(Duolingo): Add Unlock Duolingo Super patch (#2862) 2023-08-24 22:21:33 +02:00
semantic-release-bot
eeab2fa705 chore(release): 2.188.0-dev.20 [skip ci]
# [2.188.0-dev.20](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.19...v2.188.0-dev.20) (2023-08-24)

### Bug Fixes

* **Enable android debugging:** Update patch description ([#2869](https://github.com/ReVanced/revanced-patches/issues/2869)) ([c10de2d](c10de2da22))
2023-08-24 16:18:34 +00:00
LisoUseInAIKyrios
c10de2da22 fix(Enable android debugging): Update patch description (#2869)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-08-24 20:15:48 +04:00
104 changed files with 510 additions and 311 deletions

View File

@@ -1,3 +1,46 @@
# [2.188.0-dev.25](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.24...v2.188.0-dev.25) (2023-08-26)
### Features
* **YouTube:** Add `Custom player overlay opacity` patch ([#2721](https://github.com/ReVanced/revanced-patches/issues/2721)) ([2622b00](https://github.com/ReVanced/revanced-patches/commit/2622b008ab78b15aa3c28a13b38e63041f29c9ea))
# [2.188.0-dev.24](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.23...v2.188.0-dev.24) (2023-08-25)
### Features
* Exclude `Custom branding` patch by default ([d6de957](https://github.com/ReVanced/revanced-patches/commit/d6de957f4efce11d9a709d4c8f500b039166fc2f))
# [2.188.0-dev.23](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.22...v2.188.0-dev.23) (2023-08-25)
### Features
* **Strava:** Add `Subscription features` patch ([#2872](https://github.com/ReVanced/revanced-patches/issues/2872)) ([387eb29](https://github.com/ReVanced/revanced-patches/commit/387eb29e7ed45169c89a03513af64104d0082f28))
# [2.188.0-dev.22](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.21...v2.188.0-dev.22) (2023-08-24)
### Features
* Publicize resource utility functions ([20aff26](https://github.com/ReVanced/revanced-patches/commit/20aff26784296517257ea19d66ffd3bdfe6b06fa))
* Use an extension property to create new exception when failing to resolve a fingerprint ([47eac14](https://github.com/ReVanced/revanced-patches/commit/47eac14f039dc466c1957470d82255bfa2c06ff0))
# [2.188.0-dev.21](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.20...v2.188.0-dev.21) (2023-08-24)
### Features
* **Duolingo:** Add `Unlock Duolingo Super` patch ([#2862](https://github.com/ReVanced/revanced-patches/issues/2862)) ([61a7533](https://github.com/ReVanced/revanced-patches/commit/61a7533136f38d7a308e31c9f250baad00515d6a))
# [2.188.0-dev.20](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.19...v2.188.0-dev.20) (2023-08-24)
### Bug Fixes
* **Enable android debugging:** Update patch description ([#2869](https://github.com/ReVanced/revanced-patches/issues/2869)) ([d9f0d08](https://github.com/ReVanced/revanced-patches/commit/d9f0d08498662e7aa18edb5201a5d60f3738e4e4))
# [2.188.0-dev.19](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.18...v2.188.0-dev.19) (2023-08-24) # [2.188.0-dev.19](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.18...v2.188.0-dev.19) (2023-08-24)

View File

@@ -1,4 +1,4 @@
org.gradle.parallel = true org.gradle.parallel = true
org.gradle.caching = true org.gradle.caching = true
kotlin.code.style = official kotlin.code.style = official
version = 2.188.0-dev.19 version = 2.188.0-dev.25

File diff suppressed because one or more lines are too long

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

@@ -9,7 +9,7 @@ import org.w3c.dom.Element
@Patch(false) @Patch(false)
@Name("Enable android debugging") @Name("Enable android debugging")
@Description("Enables Android debugging capabilities.") @Description("Enables Android debugging capabilities. This can slow down the app.")
class EnableAndroidDebuggingPatch : ResourcePatch { class EnableAndroidDebuggingPatch : ResourcePatch {
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
context.xmlEditor["AndroidManifest.xml"].use { dom -> context.xmlEditor["AndroidManifest.xml"].use { dom ->

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

@@ -0,0 +1,14 @@
package app.revanced.patches.duolingo.unlocksuper.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
object IsUserSuperMethodFingerprint : MethodFingerprint(
returnType = "Ljava/lang/Object",
parameters = listOf("Ljava/lang/Object"),
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
strings = listOf("user"),
opcodes = listOf(Opcode.IGET_BOOLEAN),
)

View File

@@ -0,0 +1,20 @@
package app.revanced.patches.duolingo.unlocksuper.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
object UserSerializationMethodFingerprint : MethodFingerprint(
returnType = "V",
accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
strings = listOf(
"betaStatus",
"coachOutfit",
"globalAmbassadorStatus",
),
opcodes = listOf(
Opcode.MOVE_FROM16,
Opcode.IPUT_BOOLEAN,
),
)

View File

@@ -0,0 +1,64 @@
package app.revanced.patches.duolingo.unlocksuper.patch
import app.revanced.extensions.exception
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Package
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.getInstructions
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstructions
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patches.duolingo.unlocksuper.fingerprints.IsUserSuperMethodFingerprint
import app.revanced.patches.duolingo.unlocksuper.fingerprints.UserSerializationMethodFingerprint
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction22c
import com.android.tools.smali.dexlib2.iface.reference.Reference
@Patch
@Name("Unlock Duolingo Super")
@Description("Unlocks Duolingo Super features.")
@Compatibility([Package("com.duolingo")])
class UnlockDuolingoSuperPatch : BytecodePatch(
listOf(UserSerializationMethodFingerprint, IsUserSuperMethodFingerprint)
) {
/* First find the reference to the isUserSuper field, then patch the instruction that assigns it to false.
* This strategy is used because the method that sets the isUserSuper field is difficult to fingerprint reliably.
*/
override fun execute(context: BytecodeContext) {
// Find the reference to the isUserSuper field.
val isUserSuperReference = IsUserSuperMethodFingerprint
.result
?.mutableMethod
?.getInstructions()
?.filterIsInstance<BuilderInstruction22c>()
?.firstOrNull { it.opcode == Opcode.IGET_BOOLEAN }
?.reference
?: throw IsUserSuperMethodFingerprint.exception
// Patch the instruction that assigns isUserSuper to true.
UserSerializationMethodFingerprint
.result
?.mutableMethod
?.apply {
replaceInstructions(
indexOfReference(isUserSuperReference) - 1,
"const/4 v2, 0x1"
)
}
?: throw UserSerializationMethodFingerprint.exception
}
private companion object {
private fun MutableMethod.indexOfReference(reference: Reference) = getInstructions()
.filterIsInstance<BuilderInstruction22c>()
.filter { it.opcode == Opcode.IPUT_BOOLEAN }.indexOfFirst { it.reference == reference }.let {
if (it == -1) throw PatchException("Could not find index of instruction with supplied reference.")
else it
}
}
}

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

@@ -0,0 +1,11 @@
package app.revanced.patches.strava.subscription.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.Opcode
object GetSubscribedFingerprint : MethodFingerprint(
opcodes = listOf(Opcode.IGET_BOOLEAN),
customFingerprint = { methodDef, classDef ->
classDef.type.endsWith("SubscriptionDetailResponse;") && methodDef.name == "getSubscribed"
}
)

View File

@@ -0,0 +1,23 @@
package app.revanced.patches.strava.subscription.patch
import app.revanced.extensions.exception
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Package
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.strava.subscription.fingerprints.GetSubscribedFingerprint
@Patch
@Name("Unlock subscription features")
@Description("Unlocks \"Matched Runs\" and \"Segment Efforts\".")
@Compatibility([Package("com.strava", ["320.12"])])
class UnlockSubscriptionPatch : BytecodePatch(listOf(GetSubscribedFingerprint)) {
override fun execute(context: BytecodeContext) = GetSubscribedFingerprint.result?.let { result ->
val isSubscribedIndex = result.scanResult.patternScanResult!!.startIndex
result.mutableMethod.replaceInstruction(isSubscribedIndex, "const/4 v0, 0x1")
} ?: throw GetSubscribedFingerprint.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

@@ -3,7 +3,9 @@ package app.revanced.patches.youtube.layout.branding.icon.patch
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.ResourceContext import app.revanced.patcher.data.ResourceContext
import app.revanced.patcher.patch.* import app.revanced.patcher.patch.OptionsContainer
import app.revanced.patcher.patch.PatchOption
import app.revanced.patcher.patch.ResourcePatch
import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.youtube.layout.branding.icon.annotations.CustomBrandingCompatibility import app.revanced.patches.youtube.layout.branding.icon.annotations.CustomBrandingCompatibility
import app.revanced.util.resources.ResourceUtils import app.revanced.util.resources.ResourceUtils
@@ -11,7 +13,7 @@ import app.revanced.util.resources.ResourceUtils.copyResources
import java.io.File import java.io.File
import java.nio.file.Files import java.nio.file.Files
@Patch @Patch(false)
@Name("Custom branding") @Name("Custom branding")
@Description("Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).") @Description("Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).")
@CustomBrandingCompatibility @CustomBrandingCompatibility

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,44 +0,0 @@
package app.revanced.patches.youtube.layout.hide.player.overlay.bytecode.patch
import app.revanced.extensions.indexOfFirstConstantInstructionValue
import app.revanced.extensions.toErrorResult
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.youtube.layout.hide.player.overlay.annotations.HidePlayerOverlayPatchCompatibility
import app.revanced.patches.youtube.layout.hide.player.overlay.bytecode.fingerprints.CreatePlayerOverviewFingerprint
import app.revanced.patches.youtube.layout.hide.player.overlay.resource.patch.HidePlayerOverlayResourcePatch
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Patch
@Name("Hide player overlay")
@Description("Hides the dark background overlay from the player when player controls are visible.")
@DependsOn([HidePlayerOverlayResourcePatch::class])
@HidePlayerOverlayPatchCompatibility
class HidePlayerOverlayPatch : BytecodePatch(listOf(CreatePlayerOverviewFingerprint)) {
override fun execute(context: BytecodeContext) {
CreatePlayerOverviewFingerprint.result?.let { result ->
result.mutableMethod.apply {
val viewRegisterIndex =
indexOfFirstConstantInstructionValue(HidePlayerOverlayResourcePatch.scrimOverlayId) + 3
val viewRegister = getInstruction<OneRegisterInstruction>(viewRegisterIndex).registerA
val insertIndex = viewRegisterIndex + 1
addInstruction(
insertIndex,
"invoke-static { v$viewRegister }, " +
"$INTEGRATIONS_CLASS_DESCRIPTOR->hidePlayerOverlay(Landroid/widget/ImageView;)V"
)
}
} ?: throw CreatePlayerOverviewFingerprint.toErrorResult()
}
private companion object {
const val INTEGRATIONS_CLASS_DESCRIPTOR = "Lapp/revanced/integrations/patches/HidePlayerOverlayPatch;"
}
}

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,8 +1,8 @@
package app.revanced.patches.youtube.layout.hide.player.overlay.annotations package app.revanced.patches.youtube.layout.player.overlay.annotations
import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package import app.revanced.patcher.annotation.Package
@Compatibility([Package("com.google.android.youtube")]) @Compatibility([Package("com.google.android.youtube")])
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
internal annotation class HidePlayerOverlayPatchCompatibility internal annotation class PlayerOverlayPatchCompatibility

View File

@@ -1,9 +1,9 @@
package app.revanced.patches.youtube.layout.hide.player.overlay.bytecode.fingerprints package app.revanced.patches.youtube.layout.player.overlay.bytecode.fingerprints
import app.revanced.extensions.containsConstantInstructionValue import app.revanced.extensions.containsConstantInstructionValue
import app.revanced.patcher.extensions.or import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patches.youtube.layout.hide.player.overlay.resource.patch.HidePlayerOverlayResourcePatch import app.revanced.patches.youtube.layout.player.overlay.resource.patch.CustomPlayerOverlayOpacityResourcePatch
import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.Opcode
@@ -17,6 +17,6 @@ object CreatePlayerOverviewFingerprint : MethodFingerprint(
Opcode.CHECK_CAST Opcode.CHECK_CAST
), ),
customFingerprint = { methodDef, _ -> customFingerprint = { methodDef, _ ->
methodDef.containsConstantInstructionValue(HidePlayerOverlayResourcePatch.scrimOverlayId) methodDef.containsConstantInstructionValue(CustomPlayerOverlayOpacityResourcePatch.scrimOverlayId)
} }
) )

View File

@@ -0,0 +1,45 @@
package app.revanced.patches.youtube.layout.player.overlay.bytecode.patch
import app.revanced.extensions.indexOfFirstConstantInstructionValue
import app.revanced.extensions.exception
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.youtube.layout.player.overlay.annotations.PlayerOverlayPatchCompatibility
import app.revanced.patches.youtube.layout.player.overlay.bytecode.fingerprints.CreatePlayerOverviewFingerprint
import app.revanced.patches.youtube.layout.player.overlay.resource.patch.CustomPlayerOverlayOpacityResourcePatch
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Patch
@Name("Custom player overlay opacity")
@Description("Change the opacity of the player background, when player controls are visible.")
@DependsOn([CustomPlayerOverlayOpacityResourcePatch::class])
@PlayerOverlayPatchCompatibility
class CustomPlayerOverlayOpacityPatch : BytecodePatch(listOf(CreatePlayerOverviewFingerprint)) {
override fun execute(context: BytecodeContext) {
CreatePlayerOverviewFingerprint.result?.let { result ->
result.mutableMethod.apply {
val viewRegisterIndex =
indexOfFirstConstantInstructionValue(CustomPlayerOverlayOpacityResourcePatch.scrimOverlayId) + 3
val viewRegister =
getInstruction<OneRegisterInstruction>(viewRegisterIndex).registerA
val insertIndex = viewRegisterIndex + 1
addInstruction(
insertIndex,
"invoke-static { v$viewRegister }, " +
"$INTEGRATIONS_CLASS_DESCRIPTOR->changeOpacity(Landroid/widget/ImageView;)V"
)
}
} ?: throw CreatePlayerOverviewFingerprint.exception
}
private companion object {
const val INTEGRATIONS_CLASS_DESCRIPTOR = "Lapp/revanced/integrations/patches/CustomPlayerOverlayOpacityPatch;"
}
}

View File

@@ -1,22 +1,29 @@
package app.revanced.patches.youtube.layout.hide.player.overlay.resource.patch package app.revanced.patches.youtube.layout.player.overlay.resource.patch
import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.data.ResourceContext
import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.ResourcePatch
import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch
import app.revanced.patches.shared.settings.preference.impl.InputType
import app.revanced.patches.shared.settings.preference.impl.StringResource import app.revanced.patches.shared.settings.preference.impl.StringResource
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference import app.revanced.patches.shared.settings.preference.impl.TextPreference
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
@DependsOn([SettingsPatch::class, ResourceMappingPatch::class]) @DependsOn([SettingsPatch::class, ResourceMappingPatch::class])
class HidePlayerOverlayResourcePatch : ResourcePatch { class CustomPlayerOverlayOpacityResourcePatch : ResourcePatch {
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
SwitchPreference( TextPreference(
"revanced_hide_player_overlay", "revanced_player_overlay_opacity",
StringResource("revanced_hide_player_overlay_title", "Hide background overlay in player"), StringResource(
StringResource("revanced_hide_player_overlay_summary_on", "Background overlay is hidden"), "revanced_player_overlay_opacity_title",
StringResource("revanced_hide_player_overlay_summary_off", "Background overlay is shown") "Player overlay opacity"
),
StringResource(
"revanced_player_overlay_opacity_summary",
"Opacity value between 0-100, where 0 is transparent"
),
InputType.NUMBER
) )
) )
@@ -26,6 +33,6 @@ class HidePlayerOverlayResourcePatch : ResourcePatch {
} }
internal companion object { internal companion object {
var scrimOverlayId: Long = -1 var scrimOverlayId = -1L
} }
} }

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 {

Some files were not shown because too many files have changed in this diff Show More