From 7a60a7a7ba3802ab16a6338f9b4ffed943542ea8 Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Mon, 29 Apr 2024 19:28:00 +0900 Subject: [PATCH] feat(YouTube/Hide feed components): add `Hide feed captions button` settings --- .../feed/components/FeedComponentsPatch.kt | 34 +++++++++++++++++++ .../fingerprints/CaptionsButtonFingerprint.kt | 13 +++++++ .../CaptionsButtonSyntheticFingerprint.kt | 13 +++++++ .../utils/resourceid/SharedResourceIdPatch.kt | 2 ++ .../youtube/settings/host/values/strings.xml | 3 ++ .../youtube/settings/xml/revanced_prefs.xml | 1 + 6 files changed, 66 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonSyntheticFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt index 426f02db9..a0f7fcbdd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/FeedComponentsPatch.kt @@ -10,6 +10,8 @@ import app.revanced.patcher.patch.PatchException import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.litho.LithoFilterPatch import app.revanced.patches.youtube.feed.components.fingerprints.BreakingNewsFingerprint +import app.revanced.patches.youtube.feed.components.fingerprints.CaptionsButtonFingerprint +import app.revanced.patches.youtube.feed.components.fingerprints.CaptionsButtonSyntheticFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.ChannelListSubMenuFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.ChannelListSubMenuTabletFingerprint import app.revanced.patches.youtube.feed.components.fingerprints.ChannelListSubMenuTabletSyntheticFingerprint @@ -28,10 +30,12 @@ import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.FEED_CLASS_DESCRIPTOR import app.revanced.patches.youtube.utils.navigation.NavigationBarHookPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.CaptionToggleContainer import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.getTargetIndex import app.revanced.util.getTargetIndexReversed import app.revanced.util.getTargetIndexWithMethodReferenceName +import app.revanced.util.getWideLiteralInstructionIndex import app.revanced.util.indexOfFirstInstruction import app.revanced.util.patch.BaseBytecodePatch import app.revanced.util.resultOrThrow @@ -55,6 +59,8 @@ object FeedComponentsPatch : BaseBytecodePatch( compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( BreakingNewsFingerprint, + CaptionsButtonFingerprint, + CaptionsButtonSyntheticFingerprint, ChannelListSubMenuFingerprint, ChannelListSubMenuTabletFingerprint, ChannelListSubMenuTabletSyntheticFingerprint, @@ -101,6 +107,34 @@ object FeedComponentsPatch : BaseBytecodePatch( // endregion + // region patch for hide caption button + + CaptionsButtonFingerprint.resultOrThrow().mutableMethod.apply { + val constIndex = getWideLiteralInstructionIndex(CaptionToggleContainer) + val insertIndex = getTargetIndexReversed(constIndex, Opcode.IF_EQZ) + val insertRegister = getInstruction(insertIndex).registerA + + addInstructions( + insertIndex, """ + invoke-static {v$insertRegister}, $FEED_CLASS_DESCRIPTOR->hideCaptionsButton(Landroid/view/View;)Landroid/view/View; + move-result-object v$insertRegister + """ + ) + } + + CaptionsButtonSyntheticFingerprint.resultOrThrow().mutableMethod.apply { + val constIndex = getWideLiteralInstructionIndex(CaptionToggleContainer) + val targetIndex = getTargetIndex(constIndex, Opcode.MOVE_RESULT_OBJECT) + val targetRegister = getInstruction(targetIndex).registerA + + addInstruction( + targetIndex + 1, + "invoke-static {v$targetRegister}, $FEED_CLASS_DESCRIPTOR->hideCaptionsButtonContainer(Landroid/view/View;)V" + ) + } + + // endregion + // region patch for hide subscriptions channel section for tablet arrayOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonFingerprint.kt new file mode 100644 index 000000000..8595d78e0 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonFingerprint.kt @@ -0,0 +1,13 @@ +package app.revanced.patches.youtube.feed.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.CaptionToggleContainer +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object CaptionsButtonFingerprint : LiteralValueFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = emptyList(), + literalSupplier = { CaptionToggleContainer } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonSyntheticFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonSyntheticFingerprint.kt new file mode 100644 index 000000000..e14eaca43 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/feed/components/fingerprints/CaptionsButtonSyntheticFingerprint.kt @@ -0,0 +1,13 @@ +package app.revanced.patches.youtube.feed.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.CaptionToggleContainer +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object CaptionsButtonSyntheticFingerprint : LiteralValueFingerprint( + returnType = "Landroid/view/View;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL or AccessFlags.BRIDGE or AccessFlags.SYNTHETIC, + parameters = listOf("Landroid/content/Context;"), + literalSupplier = { CaptionToggleContainer } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt index 2787d2ee5..05d4db236 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt @@ -32,6 +32,7 @@ object SharedResourceIdPatch : ResourcePatch() { var BarContainerHeight = -1L var BottomSheetFooterText = -1L var BottomUiContainerStub = -1L + var CaptionToggleContainer = -1L var CastMediaRouteButton = -1L var ChannelListSubMenu = -1L var CompactLink = -1L @@ -111,6 +112,7 @@ object SharedResourceIdPatch : ResourcePatch() { BarContainerHeight = getId(DIMEN, "bar_container_height") BottomSheetFooterText = getId(ID, "bottom_sheet_footer_text") BottomUiContainerStub = getId(ID, "bottom_ui_container_stub") + CaptionToggleContainer = getId(ID, "caption_toggle_container") CastMediaRouteButton = getId(LAYOUT, "castmediaroutebutton") ChannelListSubMenu = getId(LAYOUT, "channel_list_sub_menu") CompactLink = getId(LAYOUT, "compact_link") diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index 4872595f7..2dd02892e 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -97,6 +97,9 @@ Tap here to learn more about DeArrow." Hide expandable chip under videos Expandable chips are hidden. Expandable chips are shown. + Hide feed captions button + Captions button is hidden. + Captions button is shown. Hide feed search bar Feed search bar is hidden. Feed search bar is shown. diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index ea3b89222..7e6030fff 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -84,6 +84,7 @@ +