From bc48e3c447d0c56718784afd6ed089c984d4212d Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:51:31 +0900 Subject: [PATCH] feat(YouTube Music): add `Hide fullscreen share button` patch --- .../music/player/share/ShareButtonPatch.kt | 51 +++++++++++++++++++ .../RemixGenericButtonFingerprint.kt | 19 +++++++ .../utils/resourceid/SharedResourceIdPatch.kt | 2 + .../music/settings/host/values/strings.xml | 4 +- 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/app/revanced/patches/music/player/share/ShareButtonPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/player/share/fingerprints/RemixGenericButtonFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/player/share/ShareButtonPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/share/ShareButtonPatch.kt new file mode 100644 index 000000000..d6de8737c --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/player/share/ShareButtonPatch.kt @@ -0,0 +1,51 @@ +package app.revanced.patches.music.player.share + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotation.CompatiblePackage +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patches.music.player.share.fingerprints.RemixGenericButtonFingerprint +import app.revanced.patches.music.utils.integrations.Constants.PLAYER +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch +import app.revanced.patches.music.utils.settings.CategoryType +import app.revanced.patches.music.utils.settings.SettingsPatch +import app.revanced.util.exception +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction + +@Patch( + name = "Hide fullscreen share button", + description = "Adds an option to hide the share button in the fullscreen player.", + dependencies = [ + SettingsPatch::class, + SharedResourceIdPatch::class + ], + compatiblePackages = [CompatiblePackage("com.google.android.apps.youtube.music")] +) +@Suppress("unused") +object ShareButtonPatch : BytecodePatch( + setOf(RemixGenericButtonFingerprint) +) { + override fun execute(context: BytecodeContext) { + RemixGenericButtonFingerprint.result?.let { + it.mutableMethod.apply { + val targetIndex = it.scanResult.patternScanResult!!.endIndex + val targetRegister = getInstruction(targetIndex).registerA + + addInstructions( + targetIndex + 1, """ + invoke-static {v$targetRegister}, $PLAYER->hideFullscreenShareButton(I)I + move-result v$targetRegister + """ + ) + } + } ?: throw RemixGenericButtonFingerprint.exception + + SettingsPatch.addMusicPreference( + CategoryType.PLAYER, + "revanced_hide_fullscreen_share_button", + "false" + ) + } +} diff --git a/src/main/kotlin/app/revanced/patches/music/player/share/fingerprints/RemixGenericButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/share/fingerprints/RemixGenericButtonFingerprint.kt new file mode 100644 index 000000000..6d8db73d8 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/player/share/fingerprints/RemixGenericButtonFingerprint.kt @@ -0,0 +1,19 @@ +package app.revanced.patches.music.player.share.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.RemixGenericButtonSize +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +object RemixGenericButtonFingerprint : LiteralValueFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, + opcodes = listOf( + Opcode.CONST, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT, + Opcode.FLOAT_TO_INT + ), + literalSupplier = { RemixGenericButtonSize } +) 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 a436f29b6..7071d9009 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 @@ -36,6 +36,7 @@ object SharedResourceIdPatch : ResourcePatch() { var PlayerOverlayChip: Long = -1 var PrivacyTosFooter: Long = -1 var QualityAuto: Long = -1 + var RemixGenericButtonSize: Long = -1 var Text1: Long = -1 var ToolTipContentView: Long = -1 var TosFooter: Long = -1 @@ -68,6 +69,7 @@ object SharedResourceIdPatch : ResourcePatch() { PlayerOverlayChip = find(ID, "player_overlay_chip") PrivacyTosFooter = find(ID, "privacy_tos_footer") QualityAuto = find(STRING, "quality_auto") + RemixGenericButtonSize = find(DIMEN, "remix_generic_button_size") Text1 = find(ID, "text1") ToolTipContentView = find(LAYOUT, "tooltip_content_view") TosFooter = find(ID, "tos_footer") diff --git a/src/main/resources/music/settings/host/values/strings.xml b/src/main/resources/music/settings/host/values/strings.xml index b627186e2..71f5310cb 100644 --- a/src/main/resources/music/settings/host/values/strings.xml +++ b/src/main/resources/music/settings/host/values/strings.xml @@ -174,7 +174,9 @@ WARNING: Do not enable "New player background" while this is enabled." Hide premium renewal banner Hides the samples button. Hide samples button - Hides the terms of service container. + Hides the share button in the fullscreen player. + Hide fullscreen share button + Hides terms of service container. Hide terms container Hides the upgrade button. Hide upgrade button