diff --git a/patches/src/main/kotlin/app/revanced/patches/pandora/ads/DisableAudioAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/pandora/ads/DisableAudioAdsPatch.kt index a25a8880a..6cc89a0b4 100644 --- a/patches/src/main/kotlin/app/revanced/patches/pandora/ads/DisableAudioAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/pandora/ads/DisableAudioAdsPatch.kt @@ -1,12 +1,7 @@ package app.revanced.patches.pandora.ads -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.bytecodePatch -import app.revanced.patches.pandora.shared.constructUserDataFingerprint -import app.revanced.util.indexOfFirstInstructionOrThrow -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import app.revanced.util.returnEarly @Suppress("unused") val disableAudioAdsPatch = bytecodePatch( @@ -15,16 +10,7 @@ val disableAudioAdsPatch = bytecodePatch( compatibleWith("com.pandora.android") execute { - constructUserDataFingerprint.method.apply { - // First match is "hasAudioAds". - val hasAudioAdsStringIndex = constructUserDataFingerprint.stringMatches!!.first().index - val moveResultIndex = indexOfFirstInstructionOrThrow(hasAudioAdsStringIndex, Opcode.MOVE_RESULT) - val hasAudioAdsRegister = getInstruction(moveResultIndex).registerA - - addInstruction( - moveResultIndex + 1, - "const/4 v$hasAudioAdsRegister, 0" - ) - } + getIsAdSupportedFingerprint.method.returnEarly(false) + requestAudioAdFingerprint.method.returnEarly() } } diff --git a/patches/src/main/kotlin/app/revanced/patches/pandora/ads/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/pandora/ads/Fingerprints.kt new file mode 100644 index 000000000..e3f432e16 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/pandora/ads/Fingerprints.kt @@ -0,0 +1,15 @@ +package app.revanced.patches.pandora.ads + +import app.revanced.patcher.fingerprint + +internal val getIsAdSupportedFingerprint = fingerprint { + custom { method, classDef -> + method.name == "getIsAdSupported" && classDef.endsWith("UserData;") + } +} + +internal val requestAudioAdFingerprint = fingerprint { + custom { method, classDef -> + method.name == "requestAudioAdFromAdSDK" && classDef.endsWith("ContentServiceOpsImpl;") + } +} \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/pandora/misc/EnableUnlimitedSkipsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/pandora/misc/EnableUnlimitedSkipsPatch.kt index aedb5a9c2..2ce53fdfe 100644 --- a/patches/src/main/kotlin/app/revanced/patches/pandora/misc/EnableUnlimitedSkipsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/pandora/misc/EnableUnlimitedSkipsPatch.kt @@ -1,12 +1,7 @@ package app.revanced.patches.pandora.misc -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.bytecodePatch -import app.revanced.patches.pandora.shared.constructUserDataFingerprint -import app.revanced.util.indexOfFirstInstructionOrThrow -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import app.revanced.util.returnEarly @Suppress("unused") val enableUnlimitedSkipsPatch = bytecodePatch( @@ -15,17 +10,6 @@ val enableUnlimitedSkipsPatch = bytecodePatch( compatibleWith("com.pandora.android") execute { - constructUserDataFingerprint.method.apply { - // Last match is "skipLimitBehavior". - val skipLimitBehaviorStringIndex = constructUserDataFingerprint.stringMatches!!.last().index - val moveResultObjectIndex = - indexOfFirstInstructionOrThrow(skipLimitBehaviorStringIndex, Opcode.MOVE_RESULT_OBJECT) - val skipLimitBehaviorRegister = getInstruction(moveResultObjectIndex).registerA - - addInstruction( - moveResultObjectIndex + 1, - "const-string v$skipLimitBehaviorRegister, \"unlimited\"" - ) - } + skipLimitBehaviorFingerprint.method.returnEarly("unlimited") } } diff --git a/patches/src/main/kotlin/app/revanced/patches/pandora/misc/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/pandora/misc/Fingerprints.kt new file mode 100644 index 000000000..2a14e0ed1 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/pandora/misc/Fingerprints.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.pandora.misc + +import app.revanced.patcher.fingerprint + +internal val skipLimitBehaviorFingerprint = fingerprint { + custom { method, classDef -> + method.name == "getSkipLimitBehavior" && classDef.endsWith("UserData;") + } +} \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/pandora/shared/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/pandora/shared/Fingerprints.kt deleted file mode 100644 index c045e0841..000000000 --- a/patches/src/main/kotlin/app/revanced/patches/pandora/shared/Fingerprints.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.revanced.patches.pandora.shared - -import app.revanced.patcher.fingerprint - -internal val constructUserDataFingerprint = fingerprint { - strings("hasAudioAds", "skipLimitBehavior") -}