From 478af6ad54ffdf6f99abab35a84a4f50b59d28c8 Mon Sep 17 00:00:00 2001 From: OxrxL <108184954+OxrxL@users.noreply.github.com> Date: Thu, 20 Oct 2022 22:05:34 +0200 Subject: [PATCH] feat(youtube): `hide-captions-button` patch (#770) Co-authored-by: oSumAtrIX --- .../annotations/AutoCaptionsCompatibility.kt | 2 +- .../patch/HideCaptionsButtonPatch.kt | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/hidecaptionsbutton/patch/HideCaptionsButtonPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/annotations/AutoCaptionsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/annotations/AutoCaptionsCompatibility.kt index bc331d5a3..459dc4266 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/annotations/AutoCaptionsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/annotations/AutoCaptionsCompatibility.kt @@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package @Compatibility( [Package( - "com.google.android.youtube", arrayOf("17.25.34", "17.26.35", "17.27.39", "17.28.34", "17.29.34", "17.32.35", "17.33.42", "17.34.35", "17.34.36", "17.36.37") + "com.google.android.youtube", arrayOf("17.33.42", "17.34.35", "17.34.36", "17.36.37") )] ) @Target(AnnotationTarget.CLASS) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hidecaptionsbutton/patch/HideCaptionsButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hidecaptionsbutton/patch/HideCaptionsButtonPatch.kt new file mode 100644 index 000000000..3e7d10542 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hidecaptionsbutton/patch/HideCaptionsButtonPatch.kt @@ -0,0 +1,56 @@ +package app.revanced.patches.youtube.layout.hidecaptionsbutton.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.addInstructions +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.autocaptions.annotations.AutoCaptionsCompatibility +import app.revanced.patches.youtube.layout.autocaptions.fingerprints.SubtitleButtonControllerFingerprint +import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch +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.Opcode + +@Patch +@DependsOn([IntegrationsPatch::class, SettingsPatch::class]) +@Name("hide-captions-button") +@Description("Hides the captions button on video player.") +@AutoCaptionsCompatibility +@Version("0.0.1") +class HideCaptionsButtonPatch : BytecodePatch(listOf( + SubtitleButtonControllerFingerprint, +)) { + override fun execute(context: BytecodeContext): PatchResult { + SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + SwitchPreference( + "revanced_hide_captions_button", + StringResource("revanced_hide_captions_button_title", "Hide captions button"), + false, + StringResource("revanced_hide_captions_button_summary_on", "Captions button is hidden"), + StringResource("revanced_hide_captions_button_summary_off", "Captions button is shown") + ) + ) + + val subtitleButtonControllerMethod = SubtitleButtonControllerFingerprint.result!!.mutableMethod + + // Due to previously applied patches, scanResult index cannot be used in this context + val igetBooleanIndex = subtitleButtonControllerMethod.implementation!!.instructions.indexOfFirst { + it.opcode == Opcode.IGET_BOOLEAN + } + + subtitleButtonControllerMethod.addInstructions( + igetBooleanIndex + 1, """ + invoke-static {v0}, Lapp/revanced/integrations/patches/HideCaptionsButtonPatch;->hideCaptionsButton(Landroid/widget/ImageView;)V + """ + ) + + return PatchResultSuccess() + } +}