From 5208e508172aebc6f6f6c2ec4afcff401794523e Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Tue, 11 Jun 2024 01:46:55 +0900 Subject: [PATCH] feat(YouTube/Hide player flyout menu) add `Hide quality menu header` https://github.com/inotia00/ReVanced_Extended/issues/2126 --- .../flyoutmenu/hide/PlayerFlyoutMenuPatch.kt | 37 ++++++++++++++++--- .../youtube/settings/host/values/strings.xml | 3 ++ .../youtube/settings/xml/revanced_prefs.xml | 1 + 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt index 5ef41956e..a8f55bebe 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt @@ -1,6 +1,8 @@ package app.revanced.patches.youtube.player.flyoutmenu.hide import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patches.shared.litho.LithoFilterPatch import app.revanced.patches.youtube.player.flyoutmenu.hide.fingerprints.AdvancedQualityBottomSheetFingerprint import app.revanced.patches.youtube.player.flyoutmenu.hide.fingerprints.CaptionsBottomSheetFingerprint @@ -14,9 +16,12 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.BottomSheetFooterText import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT +import app.revanced.util.getTargetIndexWithMethodReferenceName import app.revanced.util.literalInstructionBooleanHook import app.revanced.util.literalInstructionViewHook import app.revanced.util.patch.BaseBytecodePatch +import app.revanced.util.resultOrThrow +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction @Suppress("unused") object PlayerFlyoutMenuPatch : BaseBytecodePatch( @@ -41,17 +46,39 @@ object PlayerFlyoutMenuPatch : BaseBytecodePatch( override fun execute(context: BytecodeContext) { - arrayOf( - AdvancedQualityBottomSheetFingerprint to "hideFooterQuality", - CaptionsBottomSheetFingerprint to "hideFooterCaptions", - QualityMenuViewInflateFingerprint to "hideFooterQuality" - ).map { (fingerprint, name) -> + // region hide player flyout menu header, footer (non-litho) + + mapOf( + AdvancedQualityBottomSheetFingerprint to "hidePlayerFlyoutMenuQualityFooter", + CaptionsBottomSheetFingerprint to "hidePlayerFlyoutMenuCaptionsFooter", + QualityMenuViewInflateFingerprint to "hidePlayerFlyoutMenuQualityFooter" + ).forEach { (fingerprint, name) -> val smaliInstruction = """ invoke-static {v$REGISTER_TEMPLATE_REPLACEMENT}, $PLAYER_CLASS_DESCRIPTOR->$name(Landroid/view/View;)V """ fingerprint.literalInstructionViewHook(BottomSheetFooterText, smaliInstruction) } + arrayOf( + AdvancedQualityBottomSheetFingerprint, + QualityMenuViewInflateFingerprint + ).forEach { fingerprint -> + fingerprint.resultOrThrow().mutableMethod.apply { + val insertIndex = getTargetIndexWithMethodReferenceName("addHeaderView") + val insertRegister = getInstruction(insertIndex).registerD + + addInstructions( + insertIndex, + """ + invoke-static {v$insertRegister}, $PLAYER_CLASS_DESCRIPTOR->hidePlayerFlyoutMenuQualityHeader(Landroid/view/View;)Landroid/view/View; + move-result-object v$insertRegister + """ + ) + } + } + + // endregion + LithoFilterPatch.addFilter(PANELS_FILTER_CLASS_DESCRIPTOR) /** diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index 5652763f2..733124489 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -637,6 +637,9 @@ Autoplay can be changed in YouTube settings: Hide Playback speed menu Playback speed menu is hidden. Playback speed menu is shown. + Hide quality menu header + Quality menu header is hidden. + Quality menu header is shown. Hide quality menu footer Quality menu footer is hidden. Quality menu footer 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 91911d134..bcc0bc59b 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -264,6 +264,7 @@ + SETTINGS: HIDE_PLAYER_FLYOUT_MENU -->