From 55811b48aaad653bbb5c20fcb752332301db3c52 Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Wed, 15 May 2024 22:06:59 +0900 Subject: [PATCH] feat(YouTube Music/Player components): add `Hide audio video switch toggle` setting --- .../components/PlayerComponentsPatch.kt | 24 +++++++++++++++++++ .../AudioVideoSwitchToggleFingerprint.kt | 12 ++++++++++ .../utils/resourceid/SharedResourceIdPatch.kt | 2 ++ .../music/settings/host/values/strings.xml | 2 ++ 4 files changed, 40 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt index 9abe6d980..ae003f73e 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/components/PlayerComponentsPatch.kt @@ -12,6 +12,7 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMut import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.patches.music.player.components.fingerprints.AudioVideoSwitchToggleFingerprint import app.revanced.patches.music.player.components.fingerprints.HandleSearchRenderedFingerprint import app.revanced.patches.music.player.components.fingerprints.HandleSignInEventFingerprint import app.revanced.patches.music.player.components.fingerprints.InteractionLoggingEnumFingerprint @@ -39,6 +40,7 @@ import app.revanced.patches.music.utils.fingerprints.PendingIntentReceiverFinger import app.revanced.patches.music.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.music.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.AudioVideoSwitchToggle import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.ColorGrey import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerPlayPauseReplayButton import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.TopEnd @@ -88,6 +90,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( ), compatiblePackages = COMPATIBLE_PACKAGE, fingerprints = setOf( + AudioVideoSwitchToggleFingerprint, HandleSearchRenderedFingerprint, InteractionLoggingEnumFingerprint, MinimizedPlayerFingerprint, @@ -492,6 +495,27 @@ object PlayerComponentsPatch : BaseBytecodePatch( // endregion + // region patch for hide audio video switch toggle + + AudioVideoSwitchToggleFingerprint.resultOrThrow().mutableMethod.apply { + val constIndex = getWideLiteralInstructionIndex(AudioVideoSwitchToggle) + val viewIndex = getTargetIndex(constIndex, Opcode.MOVE_RESULT_OBJECT) + val viewRegister = getInstruction(viewIndex).registerA + + addInstruction( + viewIndex + 1, + "invoke-static {v$viewRegister}, $PLAYER_CLASS_DESCRIPTOR->hideAudioVideoSwitchToggle(Landroid/view/View;)V" + ) + } + + SettingsPatch.addSwitchPreference( + CategoryType.PLAYER, + "revanced_hide_audio_video_switch_toggle", + "false" + ) + + // endregion + // region patch for hide channel guideline, timestamps & emoji picker buttons LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) diff --git a/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt new file mode 100644 index 000000000..2386ccab8 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/player/components/fingerprints/AudioVideoSwitchToggleFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.music.player.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.AudioVideoSwitchToggle +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object AudioVideoSwitchToggleFingerprint : LiteralValueFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, + literalSupplier = { AudioVideoSwitchToggle } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt index a192d32c8..149bc0d49 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/resourceid/SharedResourceIdPatch.kt @@ -16,6 +16,7 @@ import app.revanced.patches.shared.mapping.ResourceType.STYLE @Patch(dependencies = [ResourceMappingPatch::class]) object SharedResourceIdPatch : ResourcePatch() { var AccountSwitcherAccessibility = -1L + var AudioVideoSwitchToggle = -1L var ButtonContainer = -1L var ButtonIconPaddingMedium = -1L var ChipCloud = -1L @@ -56,6 +57,7 @@ object SharedResourceIdPatch : ResourcePatch() { override fun execute(context: ResourceContext) { AccountSwitcherAccessibility = getId(STRING, "account_switcher_accessibility_label") + AudioVideoSwitchToggle = getId(ID, "audio_video_switch_toggle") ButtonContainer = getId(ID, "button_container") ButtonIconPaddingMedium = getId(DIMEN, "button_icon_padding_medium") ChipCloud = getId(LAYOUT, "chip_cloud") diff --git a/src/main/resources/music/settings/host/values/strings.xml b/src/main/resources/music/settings/host/values/strings.xml index bf011480d..d77f0a73c 100644 --- a/src/main/resources/music/settings/host/values/strings.xml +++ b/src/main/resources/music/settings/host/values/strings.xml @@ -225,6 +225,8 @@ This does not bypass the age restriction. It just accepts it automatically."Changes the player background to light grey to reduce eye strain. Enable zen mode in podcasts Zen mode is also applied to podcasts. + Hide audio video switch toggle + Hides the audio video switch toggle in player. Hide channel guidelines Hides channel guidelines at the top of the comments section. Hide timestamp and emoji buttons