diff --git a/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt new file mode 100644 index 000000000..818606d9a --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt @@ -0,0 +1,20 @@ +package app.revanced.patches.music.interaction.permanentshuffle.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.AccessFlags +import org.jf.dexlib2.Opcode + +object DisableShuffleFingerprint : MethodFingerprint( + "V", + AccessFlags.PUBLIC or AccessFlags.FINAL, + listOf(), + listOf( + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.SGET_OBJECT, + Opcode.IPUT_OBJECT, + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL + ) +) diff --git a/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/patch/PermanentShufflePatch.kt b/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/patch/PermanentShufflePatch.kt new file mode 100644 index 000000000..c95d26b58 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/patch/PermanentShufflePatch.kt @@ -0,0 +1,29 @@ +package app.revanced.patches.music.interaction.permanentshuffle.patch + +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.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.music.annotations.MusicCompatibility +import app.revanced.patches.music.interaction.permanentshuffle.fingerprints.DisableShuffleFingerprint + +@Patch(false) +@Name("Permanent shuffle") +@Description("Permanently remember your shuffle preference " + + "even if the playlist ends or another track is played.") +@MusicCompatibility +class PermanentShuffleTogglePatch : BytecodePatch( + listOf(DisableShuffleFingerprint) +) { + override fun execute(context: BytecodeContext): PatchResult { + DisableShuffleFingerprint.result?.mutableMethod?.addInstruction(0, "return-void") + ?: return DisableShuffleFingerprint.toErrorResult() + + return PatchResultSuccess() + } +}