From 73c8ad6ea4fd31be39635a0ddc0029e6f5bbba62 Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Fri, 27 Oct 2023 12:56:16 +0900 Subject: [PATCH] feat(YouTube/Hide account menu): `Hide account menu` now also hides elements in the `You` tab --- .../general/accountmenu/AccountMenuPatch.kt | 53 ++++++++++++++++++- .../fingerprints/AccountListFingerprint.kt | 18 +++++++ .../AccountListParentFingerprint.kt | 9 ++++ .../AccountMenuPatchFingerprint.kt | 14 +++++ .../SetViewGroupMarginFingerprint.kt | 18 +++++++ .../utils/resourceid/SharedResourceIdPatch.kt | 2 + .../youtube/settings/host/values/strings.xml | 3 +- .../youtube/settings/xml/revanced_prefs.xml | 2 +- 8 files changed, 115 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountListFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountListParentFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountMenuPatchFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/SetViewGroupMarginFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/AccountMenuPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/AccountMenuPatch.kt index 3b6b9f3a6..90ec4319b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/AccountMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/AccountMenuPatch.kt @@ -3,20 +3,26 @@ package app.revanced.patches.youtube.general.accountmenu import app.revanced.extensions.exception import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +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.youtube.general.accountmenu.fingerprints.AccountListFingerprint +import app.revanced.patches.youtube.general.accountmenu.fingerprints.AccountListParentFingerprint import app.revanced.patches.youtube.general.accountmenu.fingerprints.AccountMenuFingerprint import app.revanced.patches.youtube.general.accountmenu.fingerprints.AccountMenuParentFingerprint +import app.revanced.patches.youtube.general.accountmenu.fingerprints.AccountMenuPatchFingerprint +import app.revanced.patches.youtube.general.accountmenu.fingerprints.SetViewGroupMarginFingerprint import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.integrations.Constants.GENERAL import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @Patch( name = "Hide account menu", - description = "Hide account menu elements.", + description = "Hide elements of the account menu and You tab.", dependencies = [ SettingsPatch::class, SharedResourceIdPatch::class @@ -46,10 +52,34 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction ) @Suppress("unused") object AccountMenuPatch : BytecodePatch( - setOf(AccountMenuParentFingerprint) + setOf( + AccountListParentFingerprint, + AccountMenuParentFingerprint, + AccountMenuPatchFingerprint + ) ) { override fun execute(context: BytecodeContext) { + AccountListParentFingerprint.result?.let { parentResult -> + AccountListFingerprint.also { + it.resolve( + context, + parentResult.classDef + ) + }.result?.let { + it.mutableMethod.apply { + val targetIndex = it.scanResult.patternScanResult!!.startIndex + 3 + val targetInstruction = getInstruction(targetIndex) + + addInstruction( + targetIndex, + "invoke-static {v${targetInstruction.registerC}, v${targetInstruction.registerD}}, " + + "$GENERAL->hideAccountList(Landroid/view/View;Ljava/lang/CharSequence;)V" + ) + } + } ?: throw AccountListFingerprint.exception + } ?: throw AccountListParentFingerprint.exception + AccountMenuParentFingerprint.result?.let { parentResult -> AccountMenuFingerprint.also { it.resolve( @@ -68,6 +98,25 @@ object AccountMenuPatch : BytecodePatch( ) } } ?: throw AccountMenuFingerprint.exception + + SetViewGroupMarginFingerprint.also { + it.resolve( + context, + parentResult.classDef + ) + }.result?.let { + it.mutableMethod.apply { + val setViewGroupMarginIndex = it.scanResult.patternScanResult!!.startIndex + val setViewGroupMarginReference = getInstruction(setViewGroupMarginIndex).reference + + AccountMenuPatchFingerprint.result?.mutableMethod?.addInstructions( + 0, """ + const/4 v0, 0x0 + invoke-static {p0, v0, v0}, $setViewGroupMarginReference + """ + ) ?: throw AccountMenuPatchFingerprint.exception + } + } ?: throw SetViewGroupMarginFingerprint.exception } ?: throw AccountMenuParentFingerprint.exception /** diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountListFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountListFingerprint.kt new file mode 100644 index 000000000..1f5cfffac --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountListFingerprint.kt @@ -0,0 +1,18 @@ +package app.revanced.patches.youtube.general.accountmenu.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +object AccountListFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL or AccessFlags.SYNTHETIC, + opcodes = listOf( + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.IGET + ) +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountListParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountListParentFingerprint.kt new file mode 100644 index 000000000..ffb01707d --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountListParentFingerprint.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.youtube.general.accountmenu.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.CompactListItem +import app.revanced.util.bytecode.isWideLiteralExists + +object AccountListParentFingerprint : MethodFingerprint( + customFingerprint = { methodDef, _ -> methodDef.isWideLiteralExists(CompactListItem) } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountMenuPatchFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountMenuPatchFingerprint.kt new file mode 100644 index 000000000..da44f68df --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/AccountMenuPatchFingerprint.kt @@ -0,0 +1,14 @@ +package app.revanced.patches.youtube.general.accountmenu.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +object AccountMenuPatchFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PRIVATE or AccessFlags.STATIC, + customFingerprint = { methodDef, _ -> + methodDef.definingClass == "Lapp/revanced/integrations/patches/layout/GeneralPatch;" + && methodDef.name == "hideAccountMenu" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/SetViewGroupMarginFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/SetViewGroupMarginFingerprint.kt new file mode 100644 index 000000000..df953eb0e --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/accountmenu/fingerprints/SetViewGroupMarginFingerprint.kt @@ -0,0 +1,18 @@ +package app.revanced.patches.youtube.general.accountmenu.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +object SetViewGroupMarginFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, + parameters = listOf("Z"), + opcodes = listOf( + Opcode.INVOKE_STATIC, + Opcode.IGET_OBJECT, + Opcode.CONST_16, + Opcode.INVOKE_VIRTUAL + ) +) \ 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 7614f2179..9c8a0c71a 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 BottomUiContainerStub: Long = -1 var ChannelListSubMenu: Long = -1 var CompactLink: Long = -1 + var CompactListItem: Long = -1 var ControlsLayoutStub: Long = -1 var CoreContainer: Long = -1 var DarkSplashAnimation: Long = -1 @@ -113,6 +114,7 @@ object SharedResourceIdPatch : ResourcePatch() { BottomUiContainerStub = find(ID, "bottom_ui_container_stub") ChannelListSubMenu = find(LAYOUT, "channel_list_sub_menu") CompactLink = find(LAYOUT, "compact_link") + CompactListItem = find(LAYOUT, "compact_list_item") ControlsLayoutStub = find(ID, "controls_layout_stub") CoreContainer = find(ID, "core_container") DarkSplashAnimation = find(ID, "dark_splash_animation") diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index 223e6825d..eb8738e91 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -186,7 +186,8 @@ You tab > View channel > Menu > Settings" General Haptic feedback Edit account menu filter - Known issue: May not work in landscape mode or on high dpi devices + "Hide elements of the account menu and You tab +Some components may not be hidden" Hide account menu Album cards are shown Album cards are hidden diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 5e64b0158..f51abfa09 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -170,7 +170,7 @@ + SETTINGS: HIDE_ACCOUNT_MENU -->