From dfb5afdc168df0b48725ef69bd23482b33ac83dc Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Sun, 1 Oct 2023 22:45:04 +0900 Subject: [PATCH] feat(music): add `player-type-hook` patch (unused) --- .../fingerprint/PlayerTypeFingerprint.kt | 19 ++++++++++++ .../playertype/patch/PlayerTypeHookPatch.kt | 30 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/music/utils/playertype/fingerprint/PlayerTypeFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/utils/playertype/patch/PlayerTypeHookPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/music/utils/playertype/fingerprint/PlayerTypeFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/playertype/fingerprint/PlayerTypeFingerprint.kt new file mode 100644 index 000000000..28e6a4482 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/utils/playertype/fingerprint/PlayerTypeFingerprint.kt @@ -0,0 +1,19 @@ +package app.revanced.patches.music.utils.playertype.fingerprint + +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 PlayerTypeFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("L"), + opcodes = listOf( + Opcode.IGET_BOOLEAN, + Opcode.IF_NEZ, + Opcode.IPUT_OBJECT, + Opcode.RETURN_VOID + ), + customFingerprint = { methodDef, _ -> methodDef.definingClass.endsWith("/MppWatchWhileLayout;") } +) diff --git a/src/main/kotlin/app/revanced/patches/music/utils/playertype/patch/PlayerTypeHookPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/playertype/patch/PlayerTypeHookPatch.kt new file mode 100644 index 000000000..558e81aed --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/utils/playertype/patch/PlayerTypeHookPatch.kt @@ -0,0 +1,30 @@ +package app.revanced.patches.music.utils.playertype.patch + +import app.revanced.extensions.exception +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patches.music.utils.playertype.fingerprint.PlayerTypeFingerprint +import app.revanced.util.integrations.Constants.MUSIC_UTILS_PATH + +class PlayerTypeHookPatch : BytecodePatch( + listOf(PlayerTypeFingerprint) +) { + override fun execute(context: BytecodeContext) { + + PlayerTypeFingerprint.result?.let { + it.mutableMethod.apply { + addInstruction( + 0, + "invoke-static {p1}, $INTEGRATIONS_CLASS_DESCRIPTOR->setPlayerType(Ljava/lang/Enum;)V" + ) + } + } ?: throw PlayerTypeFingerprint.exception + + } + + companion object { + private const val INTEGRATIONS_CLASS_DESCRIPTOR = + "$MUSIC_UTILS_PATH/PlayerTypeHookPatch;" + } +}