From c284098a1f29addcd29d1830179b866e9c9eb274 Mon Sep 17 00:00:00 2001 From: inotia00 Date: Mon, 18 Sep 2023 01:12:02 +0900 Subject: [PATCH] feat(music/exclusive-audio-playback): now patch enables the `Don't play podcast videos` setting --- .../fingerprints/PodCastConfigFingerprint.kt | 13 ++++++++++ .../patch/ExclusiveAudioPatch.kt | 25 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/fingerprints/PodCastConfigFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/fingerprints/PodCastConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/fingerprints/PodCastConfigFingerprint.kt new file mode 100644 index 000000000..dc18d9c10 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/fingerprints/PodCastConfigFingerprint.kt @@ -0,0 +1,13 @@ +package app.revanced.patches.music.misc.exclusiveaudio.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.util.bytecode.isWide32LiteralExists +import com.android.tools.smali.dexlib2.AccessFlags + +object PodCastConfigFingerprint : MethodFingerprint( + returnType = "Z", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = emptyList(), + customFingerprint = { methodDef, _ -> methodDef.isWide32LiteralExists(45388403) } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/patch/ExclusiveAudioPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/patch/ExclusiveAudioPatch.kt index 1d06ce9d5..d19637002 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/patch/ExclusiveAudioPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/patch/ExclusiveAudioPatch.kt @@ -4,15 +4,18 @@ 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.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.music.misc.exclusiveaudio.fingerprints.MusicBrowserServiceFingerprint +import app.revanced.patches.music.misc.exclusiveaudio.fingerprints.PodCastConfigFingerprint import app.revanced.patches.music.utils.annotations.MusicCompatibility import app.revanced.util.bytecode.getStringIndex import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @Patch @@ -20,10 +23,16 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @Description("Enables the option to play music without video.") @MusicCompatibility class ExclusiveAudioPatch : BytecodePatch( - listOf(MusicBrowserServiceFingerprint) + listOf( + MusicBrowserServiceFingerprint, + PodCastConfigFingerprint + ) ) { override fun execute(context: BytecodeContext) { + /** + * Don't play music videos + */ MusicBrowserServiceFingerprint.result?.let { it.mutableMethod.apply { val targetIndex = @@ -54,5 +63,19 @@ class ExclusiveAudioPatch : BytecodePatch( } } ?: throw MusicBrowserServiceFingerprint.exception + /** + * Don't play podcast videos + */ + PodCastConfigFingerprint.result?.let { + it.mutableMethod.apply { + val insertIndex = implementation!!.instructions.size - 1 + val targetRegister = getInstruction(insertIndex).registerA + + addInstruction( + insertIndex, + "const/4 v$targetRegister, 0x1" + ) + } + } ?: throw PodCastConfigFingerprint.exception } }