From 618de17a40d2349ca3197097799f78ee7287d976 Mon Sep 17 00:00:00 2001 From: OxrxL <108184954+OxrxL@users.noreply.github.com> Date: Tue, 25 Oct 2022 20:44:34 +0200 Subject: [PATCH] feat: `hide-album-cards` patch (#857) --- .../annotations/AlbumCardsCompatibility.kt | 13 ++++ .../fingerprints/AlbumCardsFingerprint.kt | 29 +++++++++ .../hidealbumcards/patch/AlbumCardsPatch.kt | 59 +++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/annotations/AlbumCardsCompatibility.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/fingerprints/AlbumCardsFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/patch/AlbumCardsPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/annotations/AlbumCardsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/annotations/AlbumCardsCompatibility.kt new file mode 100644 index 00000000..f01de34a --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/annotations/AlbumCardsCompatibility.kt @@ -0,0 +1,13 @@ +package app.revanced.patches.youtube.layout.hidealbumcards.annotations + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package + +@Compatibility( + [Package( + "com.google.android.youtube", arrayOf("17.33.42", "17.34.35", "17.34.36", "17.36.37") + )] +) +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.RUNTIME) +internal annotation class AlbumCardsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/fingerprints/AlbumCardsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/fingerprints/AlbumCardsFingerprint.kt new file mode 100644 index 00000000..077404dd --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/fingerprints/AlbumCardsFingerprint.kt @@ -0,0 +1,29 @@ +package app.revanced.patches.youtube.layout.hidealbumcards.fingerprints + +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.patches.youtube.layout.hidealbumcards.annotations.AlbumCardsCompatibility +import org.jf.dexlib2.AccessFlags +import org.jf.dexlib2.Opcode + +@Name("album-cards-view-fingerprint") +@AlbumCardsCompatibility +@Version("0.0.1") +object AlbumCardsFingerprint : MethodFingerprint( + "V", + AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, + listOf("L", "L", "L", "L", "L", "L", "[B"), + listOf( + Opcode.INVOKE_DIRECT, + Opcode.IPUT_OBJECT, + Opcode.INVOKE_STATIC, + Opcode.MOVE_RESULT_OBJECT, + Opcode.CONST, + Opcode.CONST_4, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT_OBJECT, + Opcode.CHECK_CAST, + ) +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/patch/AlbumCardsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/patch/AlbumCardsPatch.kt new file mode 100644 index 00000000..cd01e9f1 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hidealbumcards/patch/AlbumCardsPatch.kt @@ -0,0 +1,59 @@ +package app.revanced.patches.youtube.layout.hidealbumcards.patch + +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.addInstruction +import app.revanced.patcher.extensions.instruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.youtube.layout.hidealbumcards.annotations.AlbumCardsCompatibility +import app.revanced.patches.youtube.layout.hidealbumcards.fingerprints.AlbumCardsFingerprint +import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch +import app.revanced.patches.youtube.misc.mapping.patch.ResourceMappingResourcePatch +import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch +import app.revanced.patches.youtube.misc.settings.framework.components.impl.StringResource +import app.revanced.patches.youtube.misc.settings.framework.components.impl.SwitchPreference +import org.jf.dexlib2.iface.instruction.OneRegisterInstruction + +@Patch +@DependsOn([IntegrationsPatch::class, SettingsPatch::class, ResourceMappingResourcePatch::class]) +@Name("hide-album-cards") +@Description("Hides the album cards below the artist description.") +@AlbumCardsCompatibility +@Version("0.0.1") +class AlbumCardsPatch : BytecodePatch( + listOf( + AlbumCardsFingerprint + ) +) { + override fun execute(context: BytecodeContext): PatchResult { + SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SwitchPreference( + "revanced_hide_album_cards", + StringResource("revanced_hide_album_cards_title", "Hide the album cards"), + false, + StringResource("revanced_hide_album_cards_summary_on", "Album cards is hidden"), + StringResource("revanced_hide_album_cards_summary_off", "Album cards is visible") + ) + ) + + val albumCardsResult = AlbumCardsFingerprint.result!! + val albumCardsMethod = albumCardsResult.mutableMethod + + val checkCastIndex = albumCardsResult.scanResult.patternScanResult!!.endIndex + val patchIndex = checkCastIndex + 1 + + albumCardsMethod.addInstruction( + patchIndex, """ + invoke-static {v${(albumCardsMethod.instruction(checkCastIndex) as OneRegisterInstruction).registerA}}, Lapp/revanced/integrations/patches/HideAlbumCardsPatch;->hideAlbumCards(Landroid/view/View;)V + """ + ) + + return PatchResultSuccess() + } +}