diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt index 9a1d8d21cb..a0de47604e 100644 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/ads/general/AdsPatch.kt @@ -2,7 +2,6 @@ package app.revanced.patches.music.ads.general 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.patches.music.ads.general.MusicAdsPatch.hookLithoFullscreenAds import app.revanced.patches.music.ads.general.MusicAdsPatch.hookNonLithoFullscreenAds @@ -10,8 +9,6 @@ import app.revanced.patches.music.ads.general.fingerprints.AccountMenuFooterFing import app.revanced.patches.music.ads.general.fingerprints.FloatingLayoutFingerprint import app.revanced.patches.music.ads.general.fingerprints.GetPremiumTextViewFingerprint import app.revanced.patches.music.ads.general.fingerprints.InterstitialsContainerFingerprint -import app.revanced.patches.music.ads.general.fingerprints.MembershipSettingsFingerprint -import app.revanced.patches.music.ads.general.fingerprints.MembershipSettingsParentFingerprint import app.revanced.patches.music.ads.general.fingerprints.NotifierShelfFingerprint import app.revanced.patches.music.ads.general.fingerprints.ShowDialogCommandFingerprint import app.revanced.patches.music.navigation.components.NavigationBarComponentsPatch @@ -55,7 +52,6 @@ object AdsPatch : BaseBytecodePatch( FloatingLayoutFingerprint, GetPremiumTextViewFingerprint, InterstitialsContainerFingerprint, - MembershipSettingsParentFingerprint, NotifierShelfFingerprint, ShowDialogCommandFingerprint ) @@ -163,20 +159,6 @@ object AdsPatch : BaseBytecodePatch( } } - // premium membership menu in settings - MembershipSettingsFingerprint.resolve( - context, - MembershipSettingsParentFingerprint.resultOrThrow().classDef - ) - MembershipSettingsFingerprint.resultOrThrow().mutableMethod.addInstructions( - 0, """ - const/4 v0, 0x0 - return-object v0 - """ - ) - - // endregion - LithoFilterPatch.addFilter(ADS_FILTER_CLASS_DESCRIPTOR) SettingsPatch.addSwitchPreference( diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsFingerprint.kt deleted file mode 100644 index af3434c7ff..0000000000 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsFingerprint.kt +++ /dev/null @@ -1,11 +0,0 @@ -package app.revanced.patches.music.ads.general.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.MethodFingerprint -import com.android.tools.smali.dexlib2.AccessFlags - -internal object MembershipSettingsFingerprint : MethodFingerprint( - returnType = "Ljava/lang/CharSequence;", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = emptyList() -) diff --git a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsParentFingerprint.kt deleted file mode 100644 index 54f428559c..0000000000 --- a/src/main/kotlin/app/revanced/patches/music/ads/general/fingerprints/MembershipSettingsParentFingerprint.kt +++ /dev/null @@ -1,12 +0,0 @@ -package app.revanced.patches.music.ads.general.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.MethodFingerprint -import com.android.tools.smali.dexlib2.AccessFlags - -internal object MembershipSettingsParentFingerprint : MethodFingerprint( - returnType = "L", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = emptyList(), - strings = listOf("SPmanage_red") -) diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt index 6a9b3724ce..ff23d1798c 100644 --- a/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/general/components/LayoutComponentsPatch.kt @@ -15,7 +15,9 @@ import app.revanced.patches.music.general.components.fingerprints.FloatingButton import app.revanced.patches.music.general.components.fingerprints.HistoryMenuItemFingerprint import app.revanced.patches.music.general.components.fingerprints.HistoryMenuItemOfflineTabFingerprint import app.revanced.patches.music.general.components.fingerprints.MediaRouteButtonFingerprint +import app.revanced.patches.music.general.components.fingerprints.ParentToolMenuFingerprint import app.revanced.patches.music.general.components.fingerprints.PlayerOverlayChipFingerprint +import app.revanced.patches.music.general.components.fingerprints.PreferenceScreenFingerprint import app.revanced.patches.music.general.components.fingerprints.SearchBarFingerprint import app.revanced.patches.music.general.components.fingerprints.SearchBarParentFingerprint import app.revanced.patches.music.general.components.fingerprints.SoundSearchFingerprint @@ -26,6 +28,7 @@ import app.revanced.patches.music.general.components.fingerprints.TopBarMenuItem import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.music.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.music.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR +import app.revanced.patches.music.utils.integrations.Constants.GENERAL_PATH import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MusicTasteBuilderShelf import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.PlayerOverlayChip @@ -62,7 +65,9 @@ object LayoutComponentsPatch : BaseBytecodePatch( HistoryMenuItemFingerprint, HistoryMenuItemOfflineTabFingerprint, MediaRouteButtonFingerprint, + ParentToolMenuFingerprint, PlayerOverlayChipFingerprint, + PreferenceScreenFingerprint, SearchBarParentFingerprint, SoundSearchFingerprint, TasteBuilderConstructorFingerprint, @@ -70,9 +75,10 @@ object LayoutComponentsPatch : BaseBytecodePatch( TopBarMenuItemImageViewFingerprint ) ) { + private const val INTEGRATIONS_SETTINGS_MENU_DESCRIPTOR = + "$GENERAL_PATH/SettingsMenuPatch;" private const val CUSTOM_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/CustomFilter;" - private const val LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/LayoutComponentsFilter;" @@ -194,6 +200,35 @@ object LayoutComponentsPatch : BaseBytecodePatch( // endregion + // region patch for hide setting menus + + PreferenceScreenFingerprint.resultOrThrow().mutableMethod.apply { + addInstructions( + implementation!!.instructions.lastIndex, """ + invoke-virtual/range {p0 .. p0}, Lcom/google/android/apps/youtube/music/settings/fragment/SettingsHeadersFragment;->getPreferenceScreen()Landroidx/preference/PreferenceScreen; + move-result-object v0 + invoke-static {v0}, $INTEGRATIONS_SETTINGS_MENU_DESCRIPTOR->hideSettingsMenu(Landroidx/preference/PreferenceScreen;)V + """ + ) + } + + // The lowest version supported by the patch does not have parent tool settings + ParentToolMenuFingerprint.result?.let { + it.mutableMethod.apply { + val index = it.scanResult.patternScanResult!!.startIndex + 1 + val register = getInstruction(index).registerD + + addInstructions( + index, """ + invoke-static {v$register}, $INTEGRATIONS_SETTINGS_MENU_DESCRIPTOR->hideParentToolsMenu(Z)Z + move-result v$register + """ + ) + } + } + + // endregion + // region patch for hide sound search button SoundSearchFingerprint.result?.let { @@ -299,16 +334,6 @@ object LayoutComponentsPatch : BaseBytecodePatch( "revanced_custom_filter_strings", "revanced_custom_filter" ) - SettingsPatch.addSwitchPreference( - CategoryType.GENERAL, - "revanced_hide_settings_menu", - "false" - ) - SettingsPatch.addPreferenceWithIntent( - CategoryType.GENERAL, - "revanced_hide_settings_menu_filter_strings", - "revanced_hide_settings_menu" - ) SettingsPatch.addSwitchPreference( CategoryType.GENERAL, "revanced_hide_button_shelf", @@ -373,5 +398,66 @@ object LayoutComponentsPatch : BaseBytecodePatch( "revanced_hide_voice_search_button", "false" ) + + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_parent_tools", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_general", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_playback", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_data_saving", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_downloads_and_storage", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_notification", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_privacy_and_location", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_recommendations", + "false", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_paid_memberships", + "true", + false + ) + SettingsPatch.addSwitchPreference( + CategoryType.SETTINGS, + "revanced_hide_settings_menu_about", + "false", + false + ) } } diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ParentToolMenuFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ParentToolMenuFingerprint.kt new file mode 100644 index 0000000000..39e03d6e77 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/ParentToolMenuFingerprint.kt @@ -0,0 +1,20 @@ +package app.revanced.patches.music.general.components.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 + +internal object ParentToolMenuFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + opcodes = listOf( + Opcode.CONST_4, + Opcode.INVOKE_VIRTUAL, + Opcode.IGET, + ), + strings = listOf("pref_key_parent_tools"), + customFingerprint = { methodDef, _ -> + methodDef.name == "onSettingsLoaded" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PreferenceScreenFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PreferenceScreenFingerprint.kt new file mode 100644 index 0000000000..53e1e95de0 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/general/components/fingerprints/PreferenceScreenFingerprint.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.music.general.components.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +internal object PreferenceScreenFingerprint : MethodFingerprint( + returnType = "V", + customFingerprint = { methodDef, _ -> + methodDef.definingClass == "Lcom/google/android/apps/youtube/music/settings/fragment/SettingsHeadersFragment;" && + methodDef.name == "onCreatePreferences" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/layout/visual/VisualPreferencesIconsPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/visual/VisualPreferencesIconsPatch.kt index 019c90a9b6..c7969c38a5 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/visual/VisualPreferencesIconsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/visual/VisualPreferencesIconsPatch.kt @@ -136,6 +136,7 @@ object VisualPreferencesIconsPatch : BaseResourcePatch( "revanced_preference_screen_general", "revanced_preference_screen_navigation", "revanced_preference_screen_player", + "revanced_preference_screen_settings", "revanced_preference_screen_video", "revanced_preference_screen_ryd", "revanced_preference_screen_sb", diff --git a/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt b/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt index 963afa60b8..4219f5ba33 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/settings/CategoryType.kt @@ -8,6 +8,7 @@ enum class CategoryType(val value: String, var added: Boolean) { GENERAL("general", false), NAVIGATION("navigation", false), PLAYER("player", false), + SETTINGS("settings", false), VIDEO("video", false), RETURN_YOUTUBE_DISLIKE("ryd", false), SPONSOR_BLOCK("sb", false), diff --git a/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt b/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt index d6a487dfb5..a95ce1f632 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settingmenu/SettingsMenuPatch.kt @@ -1,42 +1,43 @@ package app.revanced.patches.shared.settingmenu import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.shared.integrations.Constants.PATCHES_PATH -import app.revanced.patches.shared.settingmenu.fingerprints.SettingsMenuFingerprint -import app.revanced.patches.shared.viewgroup.ViewGroupMarginLayoutParamsHookPatch -import app.revanced.util.getReference -import app.revanced.util.indexOfFirstInstructionOrThrow -import app.revanced.util.resultOrThrow -import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction -import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import app.revanced.patches.shared.settingmenu.fingerprints.FindPreferenceFingerprint +import app.revanced.patches.shared.settingmenu.fingerprints.RemovePreferenceFingerprint +import app.revanced.util.findMethodOrThrow +import app.revanced.util.getMethodCall @Patch( description = "Hide the settings menu for YouTube or YouTube Music.", - dependencies = [ViewGroupMarginLayoutParamsHookPatch::class] ) object SettingsMenuPatch : BytecodePatch( - setOf(SettingsMenuFingerprint) + setOf( + FindPreferenceFingerprint, + RemovePreferenceFingerprint + ) ) { private const val INTEGRATIONS_CLASS_DESCRIPTOR = - "$PATCHES_PATH/SettingsMenuPatch;" + "$PATCHES_PATH/BaseSettingsMenuPatch;" override fun execute(context: BytecodeContext) { - SettingsMenuFingerprint.resultOrThrow().mutableMethod.apply { - val insertIndex = indexOfFirstInstructionOrThrow { - getReference()?.type == "Landroid/support/v7/widget/RecyclerView;" - } - val insertRegister = getInstruction(insertIndex).registerA + val findPreferenceMethodCall = FindPreferenceFingerprint.getMethodCall() + val removePreferenceMethodCall = RemovePreferenceFingerprint.getMethodCall() - addInstruction( - insertIndex, - "invoke-static {v$insertRegister}, " + - "$INTEGRATIONS_CLASS_DESCRIPTOR->hideSettingsMenu(Landroid/support/v7/widget/RecyclerView;)V" - ) - } + context.findMethodOrThrow(INTEGRATIONS_CLASS_DESCRIPTOR) { + name == "removePreference" + }.addInstructionsWithLabels( + 0, """ + invoke-virtual {p0, p1}, $findPreferenceMethodCall + move-result-object v0 + if-eqz v0, :ignore + invoke-virtual {p0, v0}, $removePreferenceMethodCall + :ignore + return-void + """ + ) } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/FindPreferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/FindPreferenceFingerprint.kt new file mode 100644 index 0000000000..fe8eb7556d --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/FindPreferenceFingerprint.kt @@ -0,0 +1,15 @@ +package app.revanced.patches.shared.settingmenu.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object FindPreferenceFingerprint : MethodFingerprint( + returnType = "Landroidx/preference/Preference;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Ljava/lang/CharSequence;"), + strings = listOf("Key cannot be null"), + customFingerprint = { methodDef, _ -> + methodDef.definingClass == "Landroidx/preference/PreferenceGroup;" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/RemovePreferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/RemovePreferenceFingerprint.kt new file mode 100644 index 0000000000..bd158b6440 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/RemovePreferenceFingerprint.kt @@ -0,0 +1,19 @@ +package app.revanced.patches.shared.settingmenu.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 + +internal object RemovePreferenceFingerprint : MethodFingerprint( + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Landroidx/preference/Preference;"), + opcodes = listOf(Opcode.INVOKE_VIRTUAL), + customFingerprint = custom@{ methodDef, _ -> + if (methodDef.definingClass != "Landroidx/preference/PreferenceGroup;") { + return@custom false + } + val instructions = methodDef.implementation?.instructions ?: return@custom false + instructions.elementAt(0).opcode == Opcode.INVOKE_DIRECT + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt deleted file mode 100644 index a9c4293c88..0000000000 --- a/src/main/kotlin/app/revanced/patches/shared/settingmenu/fingerprints/SettingsMenuFingerprint.kt +++ /dev/null @@ -1,8 +0,0 @@ -package app.revanced.patches.shared.settingmenu.fingerprints - -import app.revanced.util.fingerprint.LiteralValueFingerprint - -internal object SettingsMenuFingerprint : LiteralValueFingerprint( - returnType = "Landroid/view/View;", - literalSupplier = { 16908351 }, -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt index dded8f6318..579d3a6c64 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt @@ -5,6 +5,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction import app.revanced.patcher.patch.PatchException import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.litho.LithoFilterPatch @@ -19,11 +20,13 @@ import app.revanced.patches.youtube.general.components.fingerprints.AppBlockingC import app.revanced.patches.youtube.general.components.fingerprints.BottomUiContainerFingerprint import app.revanced.patches.youtube.general.components.fingerprints.FloatingMicrophoneFingerprint import app.revanced.patches.youtube.general.components.fingerprints.PiPNotificationFingerprint +import app.revanced.patches.youtube.general.components.fingerprints.PreferenceScreenFingerprint import app.revanced.patches.youtube.general.components.fingerprints.TooltipContentFullscreenFingerprint import app.revanced.patches.youtube.general.components.fingerprints.TooltipContentViewFingerprint import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR +import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_PATH import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.AccountSwitcherAccessibility import app.revanced.patches.youtube.utils.settings.SettingsPatch @@ -60,10 +63,13 @@ object LayoutComponentsPatch : BaseBytecodePatch( BottomUiContainerFingerprint, FloatingMicrophoneFingerprint, PiPNotificationFingerprint, + PreferenceScreenFingerprint, TooltipContentFullscreenFingerprint, TooltipContentViewFingerprint ) ) { + private const val INTEGRATIONS_SETTINGS_MENU_DESCRIPTOR = + "$GENERAL_PATH/SettingsMenuPatch;" private const val CUSTOM_FILTER_CLASS_DESCRIPTOR = "$COMPONENTS_PATH/CustomFilter;" private const val LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR = @@ -193,6 +199,29 @@ object LayoutComponentsPatch : BaseBytecodePatch( // endregion + // region patch for hide setting menus + + PreferenceScreenFingerprint.resultOrThrow().mutableMethod.apply { + val targetIndex = + PreferenceScreenFingerprint.indexOfPreferenceScreenInstruction(this) + val targetRegister = getInstruction(targetIndex).registerC + val targetReference = getInstruction(targetIndex).reference + + val insertIndex = implementation!!.instructions.lastIndex + + addInstructions( + insertIndex + 1, """ + invoke-virtual {v$targetRegister}, $targetReference + move-result-object v$targetRegister + invoke-static {v$targetRegister}, $INTEGRATIONS_SETTINGS_MENU_DESCRIPTOR->hideSettingsMenu(Landroidx/preference/PreferenceScreen;)V + return-void + """ + ) + removeInstruction(insertIndex) + } + + // endregion + // region patch for hide snack bar BottomUiContainerFingerprint.resultOrThrow().let { diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PreferenceScreenFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PreferenceScreenFingerprint.kt new file mode 100644 index 0000000000..db92fe9105 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/components/fingerprints/PreferenceScreenFingerprint.kt @@ -0,0 +1,30 @@ +package app.revanced.patches.youtube.general.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.patches.youtube.general.components.fingerprints.PreferenceScreenFingerprint.indexOfPreferenceScreenInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionReversed +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +internal object PreferenceScreenFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = emptyList(), + strings = listOf(":android:show_fragment_args"), + customFingerprint = { methodDef, classDef -> + AccessFlags.SYNTHETIC.isSet(classDef.accessFlags) && + indexOfPreferenceScreenInstruction(methodDef) >= 0 + } +) { + fun indexOfPreferenceScreenInstruction(methodDef: Method) = + methodDef.indexOfFirstInstructionReversed { + val reference = getReference() + opcode == Opcode.INVOKE_VIRTUAL && + reference?.returnType == "Landroidx/preference/PreferenceScreen;" && + reference.parameterTypes.size == 0 + } +} \ No newline at end of file diff --git a/src/main/resources/music/settings/host/values/strings.xml b/src/main/resources/music/settings/host/values/strings.xml index 38a74ab17e..fb78c5501b 100644 --- a/src/main/resources/music/settings/host/values/strings.xml +++ b/src/main/resources/music/settings/host/values/strings.xml @@ -128,7 +128,6 @@ Info: Keeps the Report menu in the comments section intact. - General @@ -151,11 +150,6 @@ Info: List of component path builder strings to filter, separated by new lines. Invalid custom filter: %s. - Hide settings menu - "Hide elements of the settings menu. -This hides not only the YT Music settings menu, but also the ReVanced Extended settings menu." - Settings menu filter - List of settings menu names to filter, separated by new lines. Hide button shelf Hides the button shelf in the feed. Hide carousel shelf @@ -263,6 +257,22 @@ This does not bypass the age restriction. It just accepts it automatically.""Returns the player layout to the old style. Some features may not work properly in the old player layout." + + + Settings menu + + Hide Family Center menu + Hide General menu + Hide Playback menu + Hide Data saving menu + Hide Downloads & storage menu + Hide Notifications menu + Hide Privacy & data menu + Hide Recommendations menu + Hide Get Music premium menu + Hide About menu + + Video @@ -283,6 +293,7 @@ Some features may not work properly in the old player layout." Failed to set quality. Changing default Wi-Fi quality to %s. + Return YouTube Dislike diff --git a/src/main/resources/music/visual/shared/drawable/revanced_preference_screen_settings_icon.xml b/src/main/resources/music/visual/shared/drawable/revanced_preference_screen_settings_icon.xml new file mode 100644 index 0000000000..984b1fc6df --- /dev/null +++ b/src/main/resources/music/visual/shared/drawable/revanced_preference_screen_settings_icon.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index 1e4ed95cf2..6aa2997543 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -526,13 +526,66 @@ If this setting do not take effect, try switching to Incognito mode." Settings menu Hide elements of the YouTube settings menu. - Hide YouTube settings menu - Hide elements of the YouTube settings menu. - YouTube settings menu filter - List of YouTube settings menu names to filter, separated by new lines. - "Account -Data saving -Captions" + Hide Family Center menu + Family Center menu is hidden. + Family Center menu is shown. + Hide General menu + General menu is hidden. + General menu is shown. + Hide Account menu + Account menu is hidden. + Account menu is shown. + Hide Data saving menu + Data saving menu is hidden. + Data saving menu is shown. + Hide Autoplay menu + Autoplay menu is hidden. + Autoplay menu is shown. + Hide Video quality preferences menu + Video quality preferences menu is hidden. + Video quality preferences menu is shown. + Hide Background menu + Background menu is hidden. + Background menu is shown. + Hide Watch on TV menu + Watch on TV menu is hidden. + Watch on TV menu is shown. + Hide Manage all history menu + Manage all history menu is hidden. + Manage all history menu is shown. + Hide Your data in YouTube menu + Your data in YouTube menu is hidden. + Your data in YouTube menu is shown. + Hide Privacy menu + Privacy menu is hidden. + Privacy menu is shown. + Hide Try experimental new features menu + Try experimental new features menu is hidden. + Try experimental new features menu is shown. + Hide Purchases and memberships menu + Purchases and memberships menu is hidden. + Purchases and memberships menu is shown. + Hide Billing and payments menu + Billing and payments menu is hidden. + Billing and payments menu is shown. + Hide Notifications menu + Notifications menu is hidden. + Notifications menu is shown. + Hide Connected apps menu + Connected apps menu is hidden. + Connected apps menu is shown. + Hide Live chat menu + Live chat menu is hidden. + Live chat menu is shown. + Hide Captions menu + Captions menu is hidden. + Captions menu is shown. + Hide Accessibility menu + Accessibility menu is hidden. + Accessibility menu is shown. + Hide About menu + About menu is hidden. + About menu is shown. Toolbar diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 832a693c97..de1ad6cf65 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -198,8 +198,26 @@