diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/general/accountmenu/fingerprints/AccountMenuFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/general/accountmenu/fingerprints/AccountMenuFingerprint.kt new file mode 100644 index 000000000..ff55300a5 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/general/accountmenu/fingerprints/AccountMenuFingerprint.kt @@ -0,0 +1,15 @@ +package app.revanced.patches.youtube.layout.general.accountmenu.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.Opcode + +object AccountMenuFingerprint : MethodFingerprint( + returnType = "V", + opcodes = listOf( + Opcode.INVOKE_STATIC, + Opcode.MOVE_RESULT_OBJECT, + Opcode.INVOKE_STATIC, + Opcode.IGET, + Opcode.AND_INT_LIT16 + ) +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/general/accountmenu/fingerprints/AccountMenuParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/general/accountmenu/fingerprints/AccountMenuParentFingerprint.kt new file mode 100644 index 000000000..8c88487c7 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/general/accountmenu/fingerprints/AccountMenuParentFingerprint.kt @@ -0,0 +1,21 @@ +package app.revanced.patches.youtube.layout.general.accountmenu.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.patches.youtube.misc.resourceid.patch.SharedResourceIdPatch +import org.jf.dexlib2.Opcode +import org.jf.dexlib2.iface.instruction.WideLiteralInstruction + +object AccountMenuParentFingerprint : MethodFingerprint( + opcodes = listOf( + Opcode.CONST, + Opcode.CONST_4, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT_OBJECT + ), + customFingerprint = { methodDef -> + methodDef.implementation?.instructions?.any { + it.opcode.ordinal == Opcode.CONST.ordinal && + (it as? WideLiteralInstruction)?.wideLiteral == SharedResourceIdPatch.compactLinkLabelId + } == true + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/general/accountmenu/patch/AccountMenuPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/general/accountmenu/patch/AccountMenuPatch.kt new file mode 100644 index 000000000..f1b08b3e7 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/general/accountmenu/patch/AccountMenuPatch.kt @@ -0,0 +1,80 @@ +package app.revanced.patches.youtube.layout.general.accountmenu.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.addInstruction +import app.revanced.patcher.extensions.instruction +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.shared.annotation.YouTubeCompatibility +import app.revanced.patches.youtube.layout.general.accountmenu.fingerprints.AccountMenuFingerprint +import app.revanced.patches.youtube.layout.general.accountmenu.fingerprints.AccountMenuParentFingerprint +import app.revanced.patches.youtube.misc.resourceid.patch.SharedResourceIdPatch +import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsPatch +import app.revanced.util.integrations.Constants.GENERAL_LAYOUT +import org.jf.dexlib2.iface.instruction.OneRegisterInstruction + +@Patch +@Name("hide-account-menu") +@Description("Hide account menu elements.") +@DependsOn( + [ + SettingsPatch::class, + SharedResourceIdPatch::class + ] +) +@YouTubeCompatibility +@Version("0.0.1") +class AccountMenuPatch : BytecodePatch( + listOf( + AccountMenuParentFingerprint + ) +) { + override fun execute(context: BytecodeContext): PatchResult { + + AccountMenuParentFingerprint.result?.let { parentResult -> + AccountMenuFingerprint.also { it.resolve(context, parentResult.classDef) }.result?.let { + with (it.mutableMethod) { + val targetIndex = it.scanResult.patternScanResult!!.startIndex + 1 + val register = (instruction(targetIndex) as OneRegisterInstruction).registerA + + addInstruction( + targetIndex + 1, + "invoke-static {v$register}, $GENERAL_LAYOUT->hideAccountMenu(Landroid/text/Spanned;)V" + ) + } + } ?: return AccountMenuFingerprint.toErrorResult() + + with (parentResult.mutableMethod) { + val endIndex = parentResult.scanResult.patternScanResult!!.endIndex + val register = (instruction(endIndex) as OneRegisterInstruction).registerA + + addInstruction( + endIndex + 1, + "sput-object v$register, $GENERAL_LAYOUT->compactLink:Landroid/view/View;" + ) + } + } ?: return AccountMenuParentFingerprint.toErrorResult() + + /* + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "PREFERENCE: GENERAL_LAYOUT_SETTINGS", + "SETTINGS: HIDE_ACCOUNT_MENU" + ) + ) + + SettingsPatch.updatePatchStatus("hide-account-menu") + + return PatchResultSuccess() + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/resourceid/patch/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/resourceid/patch/SharedResourceIdPatch.kt index a41020517..348abe498 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/resourceid/patch/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/resourceid/patch/SharedResourceIdPatch.kt @@ -22,6 +22,7 @@ class SharedResourceIdPatch : ResourcePatch { var backgroundCategoryLabelId: Long = -1 var bottomUiContainerResourceId: Long = -1 var chapterRepeatOnResourceId: Long = -1 + var compactLinkLabelId: Long = -1 var controlsLayoutStubResourceId: Long = -1 var donationCompanionResourceId: Long = -1 var emptyColorLabelId: Long = -1 @@ -52,6 +53,7 @@ class SharedResourceIdPatch : ResourcePatch { backgroundCategoryLabelId = findSharedResourceId("string", "pref_background_and_offline_category") bottomUiContainerResourceId = findSharedResourceId("id", "bottom_ui_container_stub") chapterRepeatOnResourceId = findSharedResourceId("string", "chapter_repeat_on") + compactLinkLabelId = findSharedResourceId("layout", "compact_link") controlsLayoutStubResourceId = findSharedResourceId("id", "controls_layout_stub") donationCompanionResourceId = findSharedResourceId("layout", "donation_companion") emptyColorLabelId = findSharedResourceId("color", "inline_time_bar_colorized_bar_empty_color_dark") diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index cb2a8f1d0..58ef3a191 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -262,6 +262,9 @@ Is it ready to submit?" Fullscreen layout General layout Haptic feedback + Account menus are shown + Account menus are hidden + Hide account menu Action buttons are shown Action buttons are hidden Hide action buttons diff --git a/src/main/resources/youtube/settings/values-v21/strings.xml b/src/main/resources/youtube/settings/values-v21/strings.xml index 076be2242..19b156266 100644 --- a/src/main/resources/youtube/settings/values-v21/strings.xml +++ b/src/main/resources/youtube/settings/values-v21/strings.xml @@ -3,6 +3,9 @@ @string/pref_about_category + @string/revanced_adremover_custom_filter_summary + @string/revanced_adremover_custom_filter_title + @string/settings_ie ReVanced Extended @string/camera_speed_button_label diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 085977aa7..3d01d8896 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -138,6 +138,10 @@ SETTINGS: HIDE_GENERAL_LAYOUT_ADS --> + + @@ -420,6 +424,7 @@ +