feat(YouTube Music/Settings): move SponsorBlock settings and Return YouTube Dislike settings to RVX Settings

This commit is contained in:
inotia00 2024-04-07 16:08:07 +09:00
parent 0bb9e1904a
commit a03ed95af6
52 changed files with 531 additions and 391 deletions

View File

@ -42,17 +42,17 @@ object MenuComponentPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACCOUNT, CategoryType.ACCOUNT,
"revanced_hide_account_menu", "revanced_hide_account_menu",
"false" "false"
) )
SettingsPatch.addMusicPreferenceWithIntent( SettingsPatch.addPreferenceWithIntent(
CategoryType.ACCOUNT, CategoryType.ACCOUNT,
"revanced_hide_account_menu_filter_strings", "revanced_hide_account_menu_filter_strings",
"revanced_hide_account_menu" "revanced_hide_account_menu"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACCOUNT, CategoryType.ACCOUNT,
"revanced_hide_account_menu_empty_component", "revanced_hide_account_menu_empty_component",
"false", "false",

View File

@ -67,7 +67,7 @@ object HandlePatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACCOUNT, CategoryType.ACCOUNT,
"revanced_hide_handle", "revanced_hide_handle",
"true" "true"

View File

@ -47,7 +47,7 @@ object TermsContainerPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACCOUNT, CategoryType.ACCOUNT,
"revanced_hide_terms_container", "revanced_hide_terms_container",
"false" "false"

View File

@ -153,47 +153,47 @@ object ActionBarComponentPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACTION_BAR, CategoryType.ACTION_BAR,
"revanced_hide_action_button_add_to_playlist", "revanced_hide_action_button_add_to_playlist",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACTION_BAR, CategoryType.ACTION_BAR,
"revanced_hide_action_button_comment", "revanced_hide_action_button_comment",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACTION_BAR, CategoryType.ACTION_BAR,
"revanced_hide_action_button_download", "revanced_hide_action_button_download",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACTION_BAR, CategoryType.ACTION_BAR,
"revanced_hide_action_button_label", "revanced_hide_action_button_label",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACTION_BAR, CategoryType.ACTION_BAR,
"revanced_hide_action_button_like_dislike", "revanced_hide_action_button_like_dislike",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACTION_BAR, CategoryType.ACTION_BAR,
"revanced_hide_action_button_radio", "revanced_hide_action_button_radio",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACTION_BAR, CategoryType.ACTION_BAR,
"revanced_hide_action_button_share", "revanced_hide_action_button_share",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ACTION_BAR, CategoryType.ACTION_BAR,
"revanced_hook_action_button_download", "revanced_hook_action_button_download",
"false" "false"
) )
SettingsPatch.addMusicPreferenceWithIntent( SettingsPatch.addPreferenceWithIntent(
CategoryType.ACTION_BAR, CategoryType.ACTION_BAR,
"revanced_external_downloader_package_name", "revanced_external_downloader_package_name",
"revanced_hook_action_button_download" "revanced_hook_action_button_download"

View File

@ -158,32 +158,32 @@ object GeneralAdsPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ADS, CategoryType.ADS,
"revanced_hide_fullscreen_ads", "revanced_hide_fullscreen_ads",
"true" "true"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ADS, CategoryType.ADS,
"revanced_hide_general_ads", "revanced_hide_general_ads",
"true" "true"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ADS, CategoryType.ADS,
"revanced_hide_music_ads", "revanced_hide_music_ads",
"true" "true"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ADS, CategoryType.ADS,
"revanced_hide_paid_promotion", "revanced_hide_paid_promotion",
"true" "true"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ADS, CategoryType.ADS,
"revanced_hide_premium_promotion", "revanced_hide_premium_promotion",
"true" "true"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.ADS, CategoryType.ADS,
"revanced_hide_premium_renewal", "revanced_hide_premium_renewal",
"true" "true"

View File

@ -34,7 +34,7 @@ object CompactDialogPatch : BaseBytecodePatch(
) )
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_enable_compact_dialog", "revanced_enable_compact_dialog",
"true" "true"

View File

@ -75,147 +75,174 @@ object FlyoutPanelPatch : BaseBytecodePatch(
if (SettingsPatch.upward0636) { if (SettingsPatch.upward0636) {
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_3_column_component", "revanced_hide_flyout_panel_3_column_component",
"false" "false"
) )
} }
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_add_to_queue", "revanced_hide_flyout_panel_add_to_queue",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_captions", "revanced_hide_flyout_panel_captions",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_delete_playlist", "revanced_hide_flyout_panel_delete_playlist",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_dismiss_queue", "revanced_hide_flyout_panel_dismiss_queue",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_download", "revanced_hide_flyout_panel_download",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_edit_playlist", "revanced_hide_flyout_panel_edit_playlist",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_go_to_album", "revanced_hide_flyout_panel_go_to_album",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_go_to_artist", "revanced_hide_flyout_panel_go_to_artist",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_go_to_episode", "revanced_hide_flyout_panel_go_to_episode",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_go_to_podcast", "revanced_hide_flyout_panel_go_to_podcast",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_help", "revanced_hide_flyout_panel_help",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_like_dislike", "revanced_hide_flyout_panel_like_dislike",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_play_next", "revanced_hide_flyout_panel_play_next",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_quality", "revanced_hide_flyout_panel_quality",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_remove_from_library", "revanced_hide_flyout_panel_remove_from_library",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_remove_from_playlist", "revanced_hide_flyout_panel_remove_from_playlist",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_report", "revanced_hide_flyout_panel_report",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_save_episode_for_later", "revanced_hide_flyout_panel_save_episode_for_later",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_save_to_library", "revanced_hide_flyout_panel_save_to_library",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_save_to_playlist", "revanced_hide_flyout_panel_save_to_playlist",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_share", "revanced_hide_flyout_panel_share",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_shuffle_play", "revanced_hide_flyout_panel_shuffle_play",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_sleep_timer", "revanced_hide_flyout_panel_sleep_timer",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_start_radio", "revanced_hide_flyout_panel_start_radio",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_stats_for_nerds", "revanced_hide_flyout_panel_stats_for_nerds",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_subscribe", "revanced_hide_flyout_panel_subscribe",
"false" "false",
false
) )
SettingsPatch.addMusicPreferenceWithoutSummary( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_hide_flyout_panel_view_song_credit", "revanced_hide_flyout_panel_view_song_credit",
"false" "false",
false
) )
} }
} }

View File

@ -22,12 +22,12 @@ object ReplaceDismissQueuePatch : BaseBytecodePatch(
override fun execute(context: BytecodeContext) { override fun execute(context: BytecodeContext) {
FlyoutPanelMenuItemPatch.replaceComponents() FlyoutPanelMenuItemPatch.replaceComponents()
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_replace_flyout_panel_dismiss_queue", "revanced_replace_flyout_panel_dismiss_queue",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_replace_flyout_panel_dismiss_queue_continue_watch", "revanced_replace_flyout_panel_dismiss_queue_continue_watch",
"true", "true",

View File

@ -45,12 +45,12 @@ object ReplaceReportPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_replace_flyout_panel_report", "revanced_replace_flyout_panel_report",
"true" "true"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.FLYOUT, CategoryType.FLYOUT,
"revanced_replace_flyout_panel_report_only_player", "revanced_replace_flyout_panel_report_only_player",
"true", "true",

View File

@ -23,7 +23,7 @@ object AutoCaptionsPatch : BaseResourcePatch(
VideoIdPatch.hookBackgroundPlayVideoId("$GENERAL_CLASS_DESCRIPTOR->newVideoStarted(Ljava/lang/String;)V") VideoIdPatch.hookBackgroundPlayVideoId("$GENERAL_CLASS_DESCRIPTOR->newVideoStarted(Ljava/lang/String;)V")
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_disable_auto_captions", "revanced_disable_auto_captions",
"false" "false"

View File

@ -24,7 +24,7 @@ object ButtonShelfPatch : BaseResourcePatch(
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_button_shelf", "revanced_hide_button_shelf",
"false" "false"

View File

@ -24,7 +24,7 @@ object CarouselShelfPatch : BaseResourcePatch(
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_carousel_shelf", "revanced_hide_carousel_shelf",
"false" "false"

View File

@ -66,7 +66,7 @@ object CastButtonPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_cast_button", "revanced_hide_cast_button",
"true" "true"

View File

@ -37,7 +37,7 @@ object CategoryBarPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_category_bar", "revanced_hide_category_bar",
"false" "false"

View File

@ -24,7 +24,7 @@ object ChannelGuidelinesPatch : BaseResourcePatch(
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_channel_guidelines", "revanced_hide_channel_guidelines",
"true" "true"

View File

@ -24,12 +24,12 @@ object CustomFilterPatch : BaseResourcePatch(
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_custom_filter", "revanced_custom_filter",
"false" "false"
) )
SettingsPatch.addMusicPreferenceWithIntent( SettingsPatch.addPreferenceWithIntent(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_custom_filter_strings", "revanced_custom_filter_strings",
"revanced_custom_filter" "revanced_custom_filter"

View File

@ -19,7 +19,7 @@ object ViewerDiscretionDialogPatch : BaseResourcePatch(
) { ) {
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_remove_viewer_discretion_dialog", "revanced_remove_viewer_discretion_dialog",
"false" "false"

View File

@ -24,7 +24,7 @@ object EmojiPickerPatch : BaseResourcePatch(
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_emoji_picker", "revanced_hide_emoji_picker",
"false" "false"

View File

@ -47,7 +47,7 @@ object FloatingButtonPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_new_playlist_button", "revanced_hide_new_playlist_button",
"false" "false"

View File

@ -49,7 +49,7 @@ object HistoryButtonPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_history_button", "revanced_hide_history_button",
"false" "false"

View File

@ -39,7 +39,7 @@ object LandScapeModePatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_enable_landscape_mode", "revanced_enable_landscape_mode",
"true" "true"

View File

@ -40,7 +40,7 @@ object OldStyleLibraryShelfPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_enable_old_style_library_shelf", "revanced_enable_old_style_library_shelf",
"false" "false"

View File

@ -24,7 +24,7 @@ object PlaylistCardPatch : BaseResourcePatch(
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_playlist_card", "revanced_hide_playlist_card",
"false" "false"

View File

@ -72,7 +72,7 @@ object DislikeRedirectionPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_disable_dislike_redirection", "revanced_disable_dislike_redirection",
"false" "false"

View File

@ -24,7 +24,7 @@ object SampleShelfPatch : BaseResourcePatch(
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(FILTER_CLASS_DESCRIPTOR)
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_samples_shelf", "revanced_hide_samples_shelf",
"false" "false"

View File

@ -46,7 +46,7 @@ object ChangeStartPagePatch : BaseBytecodePatch(
*/ */
contexts.copyXmlNode("music/startpage/host", "values/arrays.xml", "resources") contexts.copyXmlNode("music/startpage/host", "values/arrays.xml", "resources")
SettingsPatch.addMusicPreferenceWithIntent( SettingsPatch.addPreferenceWithIntent(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_change_start_page" "revanced_change_start_page"
) )

View File

@ -36,7 +36,7 @@ object TapToUpdateButtonPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.GENERAL, CategoryType.GENERAL,
"revanced_hide_tap_to_update_button", "revanced_hide_tap_to_update_button",
"false" "false"

View File

@ -19,7 +19,7 @@ object ForceOpusCodecPatch : BaseResourcePatch(
) { ) {
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.MISC, CategoryType.MISC,
"revanced_enable_opus_codec", "revanced_enable_opus_codec",
"true" "true"

View File

@ -16,12 +16,12 @@ object DebuggingPatch : BaseResourcePatch(
) { ) {
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.MISC, CategoryType.MISC,
"revanced_enable_debug_logging", "revanced_enable_debug_logging",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.MISC, CategoryType.MISC,
"revanced_enable_debug_buffer_logging", "revanced_enable_debug_buffer_logging",
"false", "false",

View File

@ -25,12 +25,12 @@ object SpoofAppVersionPatch : BaseResourcePatch(
*/ */
context.copyXmlNode("music/spoofappversion/host", "values/arrays.xml", "resources") context.copyXmlNode("music/spoofappversion/host", "values/arrays.xml", "resources")
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.MISC, CategoryType.MISC,
"revanced_spoof_app_version", "revanced_spoof_app_version",
"false" "false"
) )
SettingsPatch.addMusicPreferenceWithIntent( SettingsPatch.addPreferenceWithIntent(
CategoryType.MISC, CategoryType.MISC,
"revanced_spoof_app_version_target", "revanced_spoof_app_version_target",
"revanced_spoof_app_version" "revanced_spoof_app_version"

View File

@ -18,7 +18,7 @@ object SanitizeUrlQueryPatch : BaseResourcePatch(
) { ) {
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.MISC, CategoryType.MISC,
"revanced_sanitize_sharing_links", "revanced_sanitize_sharing_links",
"true" "true"

View File

@ -40,7 +40,7 @@ object BlackNavigationBarPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.NAVIGATION, CategoryType.NAVIGATION,
"revanced_enable_black_navigation_bar", "revanced_enable_black_navigation_bar",
"true" "true"

View File

@ -92,37 +92,37 @@ object NavigationBarComponentPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.NAVIGATION, CategoryType.NAVIGATION,
"revanced_hide_explore_button", "revanced_hide_explore_button",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.NAVIGATION, CategoryType.NAVIGATION,
"revanced_hide_home_button", "revanced_hide_home_button",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.NAVIGATION, CategoryType.NAVIGATION,
"revanced_hide_library_button", "revanced_hide_library_button",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.NAVIGATION, CategoryType.NAVIGATION,
"revanced_hide_navigation_bar", "revanced_hide_navigation_bar",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.NAVIGATION, CategoryType.NAVIGATION,
"revanced_hide_navigation_label", "revanced_hide_navigation_label",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.NAVIGATION, CategoryType.NAVIGATION,
"revanced_hide_samples_button", "revanced_hide_samples_button",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.NAVIGATION, CategoryType.NAVIGATION,
"revanced_hide_upgrade_button", "revanced_hide_upgrade_button",
"true" "true"

View File

@ -97,7 +97,7 @@ object ColorMatchPlayerPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_enable_color_match_player", "revanced_enable_color_match_player",
"true" "true"

View File

@ -36,7 +36,7 @@ object MinimizedPlayerPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_enable_force_minimized_player", "revanced_enable_force_minimized_player",
"true" "true"

View File

@ -121,12 +121,12 @@ object MiniPlayerButtonPatch : BaseBytecodePatch(
mppWatchWhileLayoutMutableMethod.setViewArray() mppWatchWhileLayoutMutableMethod.setViewArray()
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_enable_mini_player_next_button", "revanced_enable_mini_player_next_button",
"true" "true"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_enable_mini_player_previous_button", "revanced_enable_mini_player_previous_button",
"false" "false"

View File

@ -26,7 +26,7 @@ object OldPlayerBackgroundPatch : BaseBytecodePatch(
"Please use YT Music 6.33.52 or earlier." "Please use YT Music 6.33.52 or earlier."
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_enable_old_player_background", "revanced_enable_old_player_background",
"false" "false"

View File

@ -26,7 +26,7 @@ object OldPlayerLayoutPatch : BaseBytecodePatch(
"Please use YT Music 6.29.58 or earlier." "Please use YT Music 6.29.58 or earlier."
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_enable_old_player_layout", "revanced_enable_old_player_layout",
"false" "false"

View File

@ -35,7 +35,7 @@ object RememberRepeatPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_remember_repeat_state", "revanced_remember_repeat_state",
"true" "true"

View File

@ -99,7 +99,7 @@ object ReplaceCastButtonPatch : BaseBytecodePatch(
contexts.copyResources("music/cast", resourceGroup) contexts.copyResources("music/cast", resourceGroup)
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_replace_player_cast_button", "revanced_replace_player_cast_button",
"false" "false"

View File

@ -39,7 +39,7 @@ object ShareButtonPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_hide_fullscreen_share_button", "revanced_hide_fullscreen_share_button",
"false" "false"

View File

@ -160,7 +160,7 @@ object RememberShufflePatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_remember_shuffle_state", "revanced_remember_shuffle_state",
"true" "true"

View File

@ -199,7 +199,7 @@ object SwipeToDismissMiniPlayerPatch : BaseBytecodePatch(
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_enable_swipe_to_dismiss_mini_player", "revanced_enable_swipe_to_dismiss_mini_player",
"true" "true"

View File

@ -73,12 +73,12 @@ object ZenModePatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_enable_zen_mode", "revanced_enable_zen_mode",
"false" "false"
) )
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.PLAYER, CategoryType.PLAYER,
"revanced_enable_zen_mode_podcast", "revanced_enable_zen_mode_podcast",
"false", "false",

View File

@ -2,12 +2,14 @@ package app.revanced.patches.music.utils.returnyoutubedislike
import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.data.ResourceContext
import app.revanced.patches.music.utils.integrations.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.music.utils.integrations.Constants.COMPATIBLE_PACKAGE
import app.revanced.patches.music.utils.settings.ResourceUtils.RETURN_YOUTUBE_DISLIKE_SETTINGS_KEY import app.revanced.patches.music.utils.settings.CategoryType
import app.revanced.patches.music.utils.settings.ResourceUtils.addReVancedMusicPreference import app.revanced.patches.music.utils.settings.ResourceUtils.PREFERENCE_CATEGORY_TAG_NAME
import app.revanced.patches.music.utils.settings.ResourceUtils.SETTINGS_HEADER_PATH
import app.revanced.patches.music.utils.settings.ResourceUtils.addPreferenceCategoryUnderPreferenceScreen
import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.music.utils.settings.SettingsPatch
import app.revanced.util.adoptChild
import app.revanced.util.patch.BaseResourcePatch import app.revanced.util.patch.BaseResourcePatch
import org.w3c.dom.Element import org.w3c.dom.Element
import org.w3c.dom.Node
@Suppress("DEPRECATION", "unused") @Suppress("DEPRECATION", "unused")
object ReturnYouTubeDislikePatch : BaseResourcePatch( object ReturnYouTubeDislikePatch : BaseResourcePatch(
@ -19,45 +21,56 @@ object ReturnYouTubeDislikePatch : BaseResourcePatch(
), ),
compatiblePackages = COMPATIBLE_PACKAGE compatiblePackages = COMPATIBLE_PACKAGE
) { ) {
private const val ABOUT_CATEGORY_KEY = "revanced_ryd_about"
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
context.addReVancedMusicPreference(RETURN_YOUTUBE_DISLIKE_SETTINGS_KEY) SettingsPatch.addSwitchPreference(
context.addSwitchPreference("revanced_ryd_enabled", "true") CategoryType.RETURN_YOUTUBE_DISLIKE,
context.addSwitchPreference( "revanced_ryd_enabled",
"true"
)
SettingsPatch.addSwitchPreference(
CategoryType.RETURN_YOUTUBE_DISLIKE,
"revanced_ryd_dislike_percentage", "revanced_ryd_dislike_percentage",
"false", "false",
"revanced_ryd_enabled" "revanced_ryd_enabled"
) )
context.addSwitchPreference("revanced_ryd_compact_layout", "false", "revanced_ryd_enabled") SettingsPatch.addSwitchPreference(
context.addSwitchPreference( CategoryType.RETURN_YOUTUBE_DISLIKE,
"revanced_ryd_compact_layout",
"false",
"revanced_ryd_enabled"
)
SettingsPatch.addSwitchPreference(
CategoryType.RETURN_YOUTUBE_DISLIKE,
"revanced_ryd_toast_on_connection_error", "revanced_ryd_toast_on_connection_error",
"false", "false",
"revanced_ryd_enabled" "revanced_ryd_enabled"
) )
context.addPreferenceCategory("revanced_ryd_about")
context.addAboutPreference("revanced_ryd_attribution")
} context.addPreferenceCategoryUnderPreferenceScreen(
CategoryType.RETURN_YOUTUBE_DISLIKE.value,
ABOUT_CATEGORY_KEY
)
private const val YOUTUBE_SETTINGS_PATH = "res/xml/settings_headers.xml" context.addAboutPreference(
private const val SWITCH_PREFERENCE_TAG_NAME = ABOUT_CATEGORY_KEY,
"com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference" "revanced_ryd_attribution",
private const val PREFERENCE_CATEGORY_TAG_NAME = "https://returnyoutubedislike.com"
"com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat" )
private fun Node.adoptChild(tagName: String, block: Element.() -> Unit) {
val child = ownerDocument.createElement(tagName)
child.block()
appendChild(child)
} }
private fun ResourceContext.addAboutPreference( private fun ResourceContext.addAboutPreference(
key: String preferenceCategoryKey: String,
key: String,
data: String
) { ) {
this.xmlEditor[YOUTUBE_SETTINGS_PATH].use { editor -> this.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(PREFERENCE_CATEGORY_TAG_NAME) val tags = editor.file.getElementsByTagName(PREFERENCE_CATEGORY_TAG_NAME)
List(tags.length) { tags.item(it) as Element } List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains("revanced_ryd_about") } .filter { it.getAttribute("android:key").contains(preferenceCategoryKey) }
.forEach { .forEach {
it.adoptChild("Preference") { it.adoptChild("Preference") {
setAttribute("android:title", "@string/$key" + "_title") setAttribute("android:title", "@string/$key" + "_title")
@ -65,61 +78,11 @@ object ReturnYouTubeDislikePatch : BaseResourcePatch(
setAttribute("android:key", key) setAttribute("android:key", key)
this.adoptChild("intent") { this.adoptChild("intent") {
setAttribute("android:action", "android.intent.action.VIEW") setAttribute("android:action", "android.intent.action.VIEW")
setAttribute("android:data", "https://returnyoutubedislike.com") setAttribute("android:data", data)
} }
} }
} }
} }
} }
private fun ResourceContext.addPreferenceCategory(
category: String
) {
this.xmlEditor[YOUTUBE_SETTINGS_PATH].use { editor ->
val tags = editor.file.getElementsByTagName("PreferenceScreen")
List(tags.length) { tags.item(it) as Element }
.filter {
it.getAttribute("android:key").contains(RETURN_YOUTUBE_DISLIKE_SETTINGS_KEY)
}
.forEach {
it.adoptChild(PREFERENCE_CATEGORY_TAG_NAME) {
setAttribute("android:title", "@string/$category")
setAttribute("android:key", category)
}
}
}
}
private fun ResourceContext.addSwitchPreference(
key: String,
defaultValue: String
) {
addSwitchPreference(key, defaultValue, "")
}
private fun ResourceContext.addSwitchPreference(
key: String,
defaultValue: String,
dependencyKey: String
) {
this.xmlEditor[YOUTUBE_SETTINGS_PATH].use { editor ->
val tags = editor.file.getElementsByTagName("PreferenceScreen")
List(tags.length) { tags.item(it) as Element }
.filter {
it.getAttribute("android:key").contains(RETURN_YOUTUBE_DISLIKE_SETTINGS_KEY)
}
.forEach {
it.adoptChild(SWITCH_PREFERENCE_TAG_NAME) {
setAttribute("android:title", "@string/$key" + "_title")
setAttribute("android:summary", "@string/$key" + "_summary")
setAttribute("android:key", key)
if (dependencyKey.isNotEmpty()) {
setAttribute("android:dependency", dependencyKey)
}
setAttribute("android:defaultValue", defaultValue)
}
}
}
}
} }

View File

@ -9,5 +9,7 @@ enum class CategoryType(val value: String, var added: Boolean) {
MISC("misc", false), MISC("misc", false),
NAVIGATION("navigation", false), NAVIGATION("navigation", false),
PLAYER("player", false), PLAYER("player", false),
RETURN_YOUTUBE_DISLIKE("ryd", false),
SPONSOR_BLOCK("sb", false),
VIDEO("video", false) VIDEO("video", false)
} }

View File

@ -7,39 +7,28 @@ import app.revanced.util.doRecursively
import app.revanced.util.insertNode import app.revanced.util.insertNode
import org.w3c.dom.Element import org.w3c.dom.Element
@Suppress("DEPRECATION", "MemberVisibilityCanBePrivate") @Suppress("DEPRECATION")
object ResourceUtils { object ResourceUtils {
const val YOUTUBE_MUSIC_SETTINGS_PATH = "res/xml/settings_headers.xml" private const val RVX_SETTINGS_KEY = "revanced_extended_settings"
const val YOUTUBE_MUSIC_SETTINGS_KEY = "revanced_extended_settings" const val SETTINGS_HEADER_PATH = "res/xml/settings_headers.xml"
const val RETURN_YOUTUBE_DISLIKE_SETTINGS_KEY = "revanced_ryd_settings" const val PREFERENCE_SCREEN_TAG_NAME =
const val YOUTUBE_MUSIC_PREFERENCE_SCREEN_TAG_NAME =
"PreferenceScreen" "PreferenceScreen"
const val YOUTUBE_MUSIC_PREFERENCE_TAG_NAME = const val PREFERENCE_CATEGORY_TAG_NAME =
"com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat"
const val SWITCH_PREFERENCE_TAG_NAME =
"com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference" "com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference"
const val YOUTUBE_MUSIC_PREFERENCE_TARGET_CLASS = const val ACTIVITY_HOOK_TARGET_CLASS =
"com.google.android.gms.common.api.GoogleApiActivity" "com.google.android.gms.common.api.GoogleApiActivity"
var musicPackageName = "com.google.android.apps.youtube.music" var musicPackageName = "com.google.android.apps.youtube.music"
fun ResourceContext.updatePackageName(newPackage: String) { private fun isIncludedCategory(category: String): Boolean {
musicPackageName = newPackage
replacePackageName()
}
fun setMusicPreferenceCategory(newCategory: String) {
CategoryType.entries.forEach { preference ->
if (newCategory == preference.value)
preference.added = true
}
}
fun included(category: String): Boolean {
CategoryType.entries.forEach { preference -> CategoryType.entries.forEach { preference ->
if (category == preference.value) if (category == preference.value)
return preference.added return preference.added
@ -47,29 +36,65 @@ object ResourceUtils {
return false return false
} }
fun ResourceContext.addMusicPreferenceCategory( private fun ResourceContext.replacePackageName() {
this[SETTINGS_HEADER_PATH].writeText(
this[SETTINGS_HEADER_PATH].readText()
.replace("\"com.google.android.apps.youtube.music\"", "\"" + musicPackageName + "\"")
)
}
private fun setPreferenceCategory(newCategory: String) {
CategoryType.entries.forEach { preference ->
if (newCategory == preference.value)
preference.added = true
}
}
fun ResourceContext.updatePackageName(newPackage: String) {
musicPackageName = newPackage
replacePackageName()
}
fun ResourceContext.addPreferenceCategory(
category: String category: String
) { ) {
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor -> this.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName("PreferenceScreen") val tags = editor.file.getElementsByTagName(PREFERENCE_SCREEN_TAG_NAME)
List(tags.length) { tags.item(it) as Element } List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains(YOUTUBE_MUSIC_SETTINGS_KEY) } .filter { it.getAttribute("android:key").contains(RVX_SETTINGS_KEY) }
.forEach { .forEach {
if (!included(category)) { if (!isIncludedCategory(category)) {
it.adoptChild(YOUTUBE_MUSIC_PREFERENCE_SCREEN_TAG_NAME) { it.adoptChild(PREFERENCE_SCREEN_TAG_NAME) {
setAttribute("android:title", "@string/revanced_category_$category") setAttribute("android:title", "@string/revanced_category_$category")
setAttribute("android:key", "revanced_settings_$category") setAttribute("android:key", "revanced_settings_$category")
} }
setMusicPreferenceCategory(category) setPreferenceCategory(category)
} }
} }
} }
} }
fun ResourceContext.sortMusicPreferenceCategory( fun ResourceContext.addPreferenceCategoryUnderPreferenceScreen(
preferenceScreenKey: String,
category: String category: String
) { ) {
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor -> this.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(PREFERENCE_SCREEN_TAG_NAME)
List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains(preferenceScreenKey) }
.forEach {
it.adoptChild(PREFERENCE_CATEGORY_TAG_NAME) {
setAttribute("android:title", "@string/$category")
setAttribute("android:key", category)
}
}
}
}
fun ResourceContext.sortPreferenceCategory(
category: String
) {
this.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
editor.file.doRecursively loop@{ editor.file.doRecursively loop@{
if (it !is Element) return@loop if (it !is Element) return@loop
@ -83,21 +108,14 @@ object ResourceUtils {
replacePackageName() replacePackageName()
} }
fun ResourceContext.replacePackageName() {
this[YOUTUBE_MUSIC_SETTINGS_PATH].writeText(
this[YOUTUBE_MUSIC_SETTINGS_PATH].readText()
.replace("\"com.google.android.apps.youtube.music\"", "\"" + musicPackageName + "\"")
)
}
fun ResourceContext.addMicroGPreference( fun ResourceContext.addMicroGPreference(
category: String, category: String,
key: String, key: String,
packageName: String, packageName: String,
targetClassName: String targetClassName: String
) { ) {
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor -> this.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(YOUTUBE_MUSIC_PREFERENCE_SCREEN_TAG_NAME) val tags = editor.file.getElementsByTagName(PREFERENCE_SCREEN_TAG_NAME)
List(tags.length) { tags.item(it) as Element } List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains("revanced_settings_$category") } .filter { it.getAttribute("android:key").contains("revanced_settings_$category") }
.forEach { .forEach {
@ -117,20 +135,23 @@ object ResourceUtils {
} }
} }
fun ResourceContext.addMusicPreference( fun ResourceContext.addSwitchPreference(
category: String, category: String,
key: String, key: String,
defaultValue: String, defaultValue: String,
dependencyKey: String dependencyKey: String,
setSummary: Boolean
) { ) {
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor -> this.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(YOUTUBE_MUSIC_PREFERENCE_SCREEN_TAG_NAME) val tags = editor.file.getElementsByTagName(PREFERENCE_SCREEN_TAG_NAME)
List(tags.length) { tags.item(it) as Element } List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains("revanced_settings_$category") } .filter { it.getAttribute("android:key").contains("revanced_settings_$category") }
.forEach { .forEach {
it.adoptChild(YOUTUBE_MUSIC_PREFERENCE_TAG_NAME) { it.adoptChild(SWITCH_PREFERENCE_TAG_NAME) {
setAttribute("android:title", "@string/$key" + "_title") setAttribute("android:title", "@string/$key" + "_title")
if (setSummary) {
setAttribute("android:summary", "@string/$key" + "_summary") setAttribute("android:summary", "@string/$key" + "_summary")
}
setAttribute("android:key", key) setAttribute("android:key", key)
setAttribute("android:defaultValue", defaultValue) setAttribute("android:defaultValue", defaultValue)
if (dependencyKey != "") { if (dependencyKey != "") {
@ -141,13 +162,13 @@ object ResourceUtils {
} }
} }
fun ResourceContext.addMusicPreferenceWithIntent( fun ResourceContext.addPreferenceWithIntent(
category: String, category: String,
key: String, key: String,
dependencyKey: String dependencyKey: String
) { ) {
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor -> this.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(YOUTUBE_MUSIC_PREFERENCE_SCREEN_TAG_NAME) val tags = editor.file.getElementsByTagName(PREFERENCE_SCREEN_TAG_NAME)
List(tags.length) { tags.item(it) as Element } List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains("revanced_settings_$category") } .filter { it.getAttribute("android:key").contains("revanced_settings_$category") }
.forEach { .forEach {
@ -163,7 +184,7 @@ object ResourceUtils {
setAttribute("android:data", key) setAttribute("android:data", key)
setAttribute( setAttribute(
"android:targetClass", "android:targetClass",
YOUTUBE_MUSIC_PREFERENCE_TARGET_CLASS ACTIVITY_HOOK_TARGET_CLASS
) )
} }
} }
@ -171,29 +192,8 @@ object ResourceUtils {
} }
} }
fun ResourceContext.addMusicPreferenceWithoutSummary( fun ResourceContext.addRVXSettingsPreference() {
category: String, this.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
key: String,
defaultValue: String
) {
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(YOUTUBE_MUSIC_PREFERENCE_SCREEN_TAG_NAME)
List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains("revanced_settings_$category") }
.forEach {
it.adoptChild(YOUTUBE_MUSIC_PREFERENCE_TAG_NAME) {
setAttribute("android:title", "@string/$key" + "_title")
setAttribute("android:key", key)
setAttribute("android:defaultValue", defaultValue)
}
}
}
}
fun ResourceContext.addReVancedMusicPreference(
key: String
) {
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor ->
with(editor.file) { with(editor.file) {
doRecursively loop@{ doRecursively loop@{
if (it !is Element) return@loop if (it !is Element) return@loop
@ -202,54 +202,12 @@ object ResourceUtils {
"app:allowDividerBelow" "app:allowDividerBelow"
).textContent == "false" ).textContent == "false"
) { ) {
it.insertNode("PreferenceScreen", it) { it.insertNode(PREFERENCE_SCREEN_TAG_NAME, it) {
setAttribute( setAttribute(
"android:title", "android:title",
"@string/" + key + "_title" "@string/revanced_extended_settings_title"
) )
setAttribute("android:key", key) setAttribute("android:key", "revanced_extended_settings")
setAttribute("app:allowDividerAbove", "false")
}
it.getAttributeNode("app:allowDividerBelow").textContent = "true"
return@loop
}
}
}
doRecursively loop@{
if (it !is Element) return@loop
it.getAttributeNode("app:allowDividerBelow")?.let { attribute ->
if (attribute.textContent == "true") {
attribute.textContent = "false"
}
}
}
}
}
}
fun ResourceContext.hookPreference(
key: String,
fragment: String
) {
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor ->
with(editor.file) {
doRecursively loop@{
if (it !is Element) return@loop
it.getAttributeNode("android:key")?.let { attribute ->
if (attribute.textContent == "settings_header_about_youtube_music" && it.getAttributeNode(
"app:allowDividerBelow"
).textContent == "false"
) {
it.insertNode("Preference", it) {
setAttribute("android:persistent", "false")
setAttribute(
"android:title",
"@string/" + key + "_title"
)
setAttribute("android:key", key)
setAttribute("android:fragment", fragment)
setAttribute("app:allowDividerAbove", "false") setAttribute("app:allowDividerAbove", "false")
} }
it.getAttributeNode("app:allowDividerBelow").textContent = "true" it.getAttributeNode("app:allowDividerBelow").textContent = "true"

View File

@ -3,13 +3,11 @@ package app.revanced.patches.music.utils.settings
import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.data.ResourceContext
import app.revanced.patches.music.utils.fix.accessibility.AccessibilityNodeInfoPatch import app.revanced.patches.music.utils.fix.accessibility.AccessibilityNodeInfoPatch
import app.revanced.patches.music.utils.integrations.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.music.utils.integrations.Constants.COMPATIBLE_PACKAGE
import app.revanced.patches.music.utils.settings.ResourceUtils.YOUTUBE_MUSIC_SETTINGS_KEY import app.revanced.patches.music.utils.settings.ResourceUtils.addPreferenceCategory
import app.revanced.patches.music.utils.settings.ResourceUtils.addMusicPreference import app.revanced.patches.music.utils.settings.ResourceUtils.addPreferenceWithIntent
import app.revanced.patches.music.utils.settings.ResourceUtils.addMusicPreferenceCategory import app.revanced.patches.music.utils.settings.ResourceUtils.addRVXSettingsPreference
import app.revanced.patches.music.utils.settings.ResourceUtils.addMusicPreferenceWithIntent import app.revanced.patches.music.utils.settings.ResourceUtils.addSwitchPreference
import app.revanced.patches.music.utils.settings.ResourceUtils.addMusicPreferenceWithoutSummary import app.revanced.patches.music.utils.settings.ResourceUtils.sortPreferenceCategory
import app.revanced.patches.music.utils.settings.ResourceUtils.addReVancedMusicPreference
import app.revanced.patches.music.utils.settings.ResourceUtils.sortMusicPreferenceCategory
import app.revanced.util.ResourceGroup import app.revanced.util.ResourceGroup
import app.revanced.util.copyResources import app.revanced.util.copyResources
import app.revanced.util.copyXmlNode import app.revanced.util.copyXmlNode
@ -19,7 +17,7 @@ import java.io.Closeable
import java.util.concurrent.Executors import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@Suppress("DEPRECATION", "SpellCheckingInspection", "unused") @Suppress("DEPRECATION", "unused")
object SettingsPatch : BaseResourcePatch( object SettingsPatch : BaseResourcePatch(
name = "Settings", name = "Settings",
description = "Adds ReVanced Extended settings to YouTube Music.", description = "Adds ReVanced Extended settings to YouTube Music.",
@ -129,53 +127,54 @@ object SettingsPatch : BaseResourcePatch(
} }
} }
context.addReVancedMusicPreference(YOUTUBE_MUSIC_SETTINGS_KEY) context.addRVXSettingsPreference()
} }
internal fun addMusicPreference( internal fun addSwitchPreference(
category: CategoryType, category: CategoryType,
key: String, key: String,
defaultValue: String defaultValue: String
) { ) = addSwitchPreference(category, key, defaultValue, "")
addMusicPreference(category, key, defaultValue, "")
}
internal fun addMusicPreference( internal fun addSwitchPreference(
category: CategoryType,
key: String,
defaultValue: String,
setSummary: Boolean
) = addSwitchPreference(category, key, defaultValue, "", setSummary)
internal fun addSwitchPreference(
category: CategoryType, category: CategoryType,
key: String, key: String,
defaultValue: String, defaultValue: String,
dependencyKey: String dependencyKey: String
) { ) = addSwitchPreference(category, key, defaultValue, dependencyKey, true)
val categoryValue = category.value
contexts.addMusicPreferenceCategory(categoryValue)
contexts.addMusicPreference(categoryValue, key, defaultValue, dependencyKey)
}
internal fun addMusicPreferenceWithoutSummary( internal fun addSwitchPreference(
category: CategoryType, category: CategoryType,
key: String, key: String,
defaultValue: String defaultValue: String,
dependencyKey: String,
setSummary: Boolean
) { ) {
val categoryValue = category.value val categoryValue = category.value
contexts.addMusicPreferenceCategory(categoryValue) contexts.addPreferenceCategory(categoryValue)
contexts.addMusicPreferenceWithoutSummary(categoryValue, key, defaultValue) contexts.addSwitchPreference(categoryValue, key, defaultValue, dependencyKey, setSummary)
} }
internal fun addMusicPreferenceWithIntent( internal fun addPreferenceWithIntent(
category: CategoryType, category: CategoryType,
key: String key: String
) { ) = addPreferenceWithIntent(category, key, "")
addMusicPreferenceWithIntent(category, key, "")
}
internal fun addMusicPreferenceWithIntent( internal fun addPreferenceWithIntent(
category: CategoryType, category: CategoryType,
key: String, key: String,
dependencyKey: String dependencyKey: String
) { ) {
val categoryValue = category.value val categoryValue = category.value
contexts.addMusicPreferenceCategory(categoryValue) contexts.addPreferenceCategory(categoryValue)
contexts.addMusicPreferenceWithIntent(categoryValue, key, dependencyKey) contexts.addPreferenceWithIntent(categoryValue, key, dependencyKey)
} }
override fun close() { override fun close() {
@ -184,14 +183,13 @@ object SettingsPatch : BaseResourcePatch(
*/ */
contexts.copyXmlNode("music/settings/host", "values/arrays.xml", "resources") contexts.copyXmlNode("music/settings/host", "values/arrays.xml", "resources")
addMusicPreferenceWithIntent( addPreferenceWithIntent(
CategoryType.MISC, CategoryType.MISC,
"revanced_extended_settings_import_export", "revanced_extended_settings_import_export"
""
) )
CategoryType.entries.sorted().forEach { CategoryType.entries.sorted().forEach {
contexts.sortMusicPreferenceCategory(it.value) contexts.sortPreferenceCategory(it.value)
} }
} }
} }

View File

@ -2,14 +2,20 @@ package app.revanced.patches.music.utils.sponsorblock
import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.data.ResourceContext
import app.revanced.patches.music.utils.integrations.Constants.COMPATIBLE_PACKAGE import app.revanced.patches.music.utils.integrations.Constants.COMPATIBLE_PACKAGE
import app.revanced.patches.music.utils.settings.CategoryType
import app.revanced.patches.music.utils.settings.ResourceUtils import app.revanced.patches.music.utils.settings.ResourceUtils
import app.revanced.patches.music.utils.settings.ResourceUtils.hookPreference import app.revanced.patches.music.utils.settings.ResourceUtils.ACTIVITY_HOOK_TARGET_CLASS
import app.revanced.patches.music.utils.settings.ResourceUtils.PREFERENCE_CATEGORY_TAG_NAME
import app.revanced.patches.music.utils.settings.ResourceUtils.PREFERENCE_SCREEN_TAG_NAME
import app.revanced.patches.music.utils.settings.ResourceUtils.SETTINGS_HEADER_PATH
import app.revanced.patches.music.utils.settings.ResourceUtils.SWITCH_PREFERENCE_TAG_NAME
import app.revanced.patches.music.utils.settings.ResourceUtils.addPreferenceCategory
import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.music.utils.settings.SettingsPatch
import app.revanced.util.ResourceGroup import app.revanced.util.adoptChild
import app.revanced.util.copyResources
import app.revanced.util.patch.BaseResourcePatch import app.revanced.util.patch.BaseResourcePatch
import org.w3c.dom.Element
@Suppress("DEPRECATION", "unused") @Suppress("DEPRECATION", "SameParameterValue", "unused")
object SponsorBlockPatch : BaseResourcePatch( object SponsorBlockPatch : BaseResourcePatch(
name = "SponsorBlock", name = "SponsorBlock",
description = "Adds options to enable and configure SponsorBlock, which can skip undesired video segments such as non-music sections.", description = "Adds options to enable and configure SponsorBlock, which can skip undesired video segments such as non-music sections.",
@ -19,46 +25,232 @@ object SponsorBlockPatch : BaseResourcePatch(
), ),
compatiblePackages = COMPATIBLE_PACKAGE compatiblePackages = COMPATIBLE_PACKAGE
) { ) {
private const val SEGMENTS_CATEGORY_KEY = "sb_diff_segments"
private const val ABOUT_CATEGORY_KEY = "sb_about"
private var SPONSOR_BLOCK_CATEGORY = CategoryType.SPONSOR_BLOCK.value
lateinit var context: ResourceContext
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
this.context = context
/** context.addPreferenceCategory(SPONSOR_BLOCK_CATEGORY)
* Copy preference
*/ addSwitchPreference(
arrayOf( SPONSOR_BLOCK_CATEGORY,
ResourceGroup( "sb_enabled",
"xml", "true"
"sponsorblock_prefs.xml"
) )
).forEach { resourceGroup -> addSwitchPreference(
context.copyResources("music/sponsorblock", resourceGroup) SPONSOR_BLOCK_CATEGORY,
} "sb_toast_on_skip",
"true",
/** "sb_enabled"
* Hook SponsorBlock preference )
*/ addSwitchPreference(
context.hookPreference( SPONSOR_BLOCK_CATEGORY,
"revanced_sponsorblock_settings", "sb_toast_on_connection_error",
"com.google.android.apps.youtube.music.settings.fragment.AdvancedPrefsFragmentCompat" "false",
"sb_enabled"
)
addPreferenceWithIntent(
SPONSOR_BLOCK_CATEGORY,
"sb_api_url",
"sb_enabled"
) )
val publicFile = context["res/values/public.xml"] addPreferenceCategoryUnderPreferenceScreen(
val preferenceFile = context["res/xml/sponsorblock_prefs.xml"] CategoryType.SPONSOR_BLOCK.value,
SEGMENTS_CATEGORY_KEY
)
publicFile.writeText( addSegmentsPreference(
publicFile.readText() SEGMENTS_CATEGORY_KEY,
"sb_segments_sponsor",
"sb_enabled"
)
addSegmentsPreference(
SEGMENTS_CATEGORY_KEY,
"sb_segments_selfpromo",
"sb_enabled"
)
addSegmentsPreference(
SEGMENTS_CATEGORY_KEY,
"sb_segments_interaction",
"sb_enabled"
)
addSegmentsPreference(
SEGMENTS_CATEGORY_KEY,
"sb_segments_intro",
"sb_enabled"
)
addSegmentsPreference(
SEGMENTS_CATEGORY_KEY,
"sb_segments_outro",
"sb_enabled"
)
addSegmentsPreference(
SEGMENTS_CATEGORY_KEY,
"sb_segments_preview",
"sb_enabled"
)
addSegmentsPreference(
SEGMENTS_CATEGORY_KEY,
"sb_segments_filler",
"sb_enabled"
)
addSegmentsPreference(
SEGMENTS_CATEGORY_KEY,
"sb_segments_nomusic",
"sb_enabled"
)
addPreferenceCategoryUnderPreferenceScreen(
CategoryType.SPONSOR_BLOCK.value,
ABOUT_CATEGORY_KEY
)
addAboutPreference(
ABOUT_CATEGORY_KEY,
"sb_about_api",
"https://sponsor.ajay.app"
)
context[SETTINGS_HEADER_PATH].apply {
writeText(
readText()
.replace( .replace(
"\"advanced_prefs_compat\"", "\"sb_segments_nomusic",
"\"sponsorblock_prefs\"" "\"sb_segments_music_offtopic"
)
)
preferenceFile.writeText(
preferenceFile.readText()
.replace(
"\"com.google.android.apps.youtube.music\"",
"\"" + ResourceUtils.musicPackageName + "\""
) )
) )
}
} }
private fun addSwitchPreference(
category: String,
key: String,
defaultValue: String
) = addSwitchPreference(category, key, defaultValue, "")
private fun addSwitchPreference(
category: String,
key: String,
defaultValue: String,
dependencyKey: String
) {
context.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(PREFERENCE_SCREEN_TAG_NAME)
List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains("revanced_settings_$category") }
.forEach {
it.adoptChild(SWITCH_PREFERENCE_TAG_NAME) {
setAttribute("android:title", "@string/revanced_$key")
setAttribute("android:summary", "@string/revanced_$key" + "_sum")
setAttribute("android:key", key)
setAttribute("android:defaultValue", defaultValue)
if (dependencyKey != "") {
setAttribute("android:dependency", dependencyKey)
}
}
}
}
}
private fun addPreferenceWithIntent(
category: String,
key: String,
dependencyKey: String
) {
context.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(PREFERENCE_SCREEN_TAG_NAME)
List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains("revanced_settings_$category") }
.forEach {
it.adoptChild("Preference") {
setAttribute("android:title", "@string/revanced_$key")
setAttribute("android:summary", "@string/revanced_$key" + "_sum")
setAttribute("android:key", key)
setAttribute("android:dependency", dependencyKey)
this.adoptChild("intent") {
setAttribute("android:targetPackage", ResourceUtils.musicPackageName)
setAttribute("android:data", key)
setAttribute(
"android:targetClass",
ACTIVITY_HOOK_TARGET_CLASS
)
}
}
}
}
}
private fun addPreferenceCategoryUnderPreferenceScreen(
preferenceScreenKey: String,
category: String
) {
context.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(PREFERENCE_SCREEN_TAG_NAME)
List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains(preferenceScreenKey) }
.forEach {
it.adoptChild(PREFERENCE_CATEGORY_TAG_NAME) {
setAttribute("android:title", "@string/revanced_$category")
setAttribute("android:key", category)
}
}
}
}
private fun addSegmentsPreference(
preferenceCategoryKey: String,
key: String,
dependencyKey: String
) {
context.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(PREFERENCE_CATEGORY_TAG_NAME)
List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains(preferenceCategoryKey) }
.forEach {
it.adoptChild("Preference") {
setAttribute("android:title", "@string/revanced_$key")
setAttribute("android:summary", "@string/revanced_$key" + "_sum")
setAttribute("android:key", key)
setAttribute("android:dependency", dependencyKey)
this.adoptChild("intent") {
setAttribute("android:targetPackage", ResourceUtils.musicPackageName)
setAttribute("android:data", key)
setAttribute(
"android:targetClass",
ACTIVITY_HOOK_TARGET_CLASS
)
}
}
}
}
}
private fun addAboutPreference(
preferenceCategoryKey: String,
key: String,
data: String
) {
context.xmlEditor[SETTINGS_HEADER_PATH].use { editor ->
val tags = editor.file.getElementsByTagName(PREFERENCE_CATEGORY_TAG_NAME)
List(tags.length) { tags.item(it) as Element }
.filter { it.getAttribute("android:key").contains(preferenceCategoryKey) }
.forEach {
it.adoptChild("Preference") {
setAttribute("android:title", "@string/revanced_$key")
setAttribute("android:summary", "@string/revanced_$key" + "_sum")
setAttribute("android:key", key)
this.adoptChild("intent") {
setAttribute("android:action", "android.intent.action.VIEW")
setAttribute("android:data", data)
}
}
}
}
}
} }

View File

@ -18,7 +18,7 @@ object CustomPlaybackSpeedPatch : BaseResourcePatch(
) { ) {
override fun execute(context: ResourceContext) { override fun execute(context: ResourceContext) {
SettingsPatch.addMusicPreferenceWithIntent( SettingsPatch.addPreferenceWithIntent(
CategoryType.VIDEO, CategoryType.VIDEO,
"revanced_custom_playback_speeds" "revanced_custom_playback_speeds"
) )

View File

@ -58,7 +58,7 @@ object VideoQualityPatch : BaseBytecodePatch(
VideoIdPatch.hookVideoId("$INTEGRATIONS_VIDEO_QUALITY_CLASS_DESCRIPTOR->newVideoStarted(Ljava/lang/String;)V") VideoIdPatch.hookVideoId("$INTEGRATIONS_VIDEO_QUALITY_CLASS_DESCRIPTOR->newVideoStarted(Ljava/lang/String;)V")
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.VIDEO, CategoryType.VIDEO,
"revanced_enable_save_video_quality", "revanced_enable_save_video_quality",
"true" "true"

View File

@ -50,7 +50,7 @@ object PlaybackSpeedPatch : BaseBytecodePatch(
} }
} }
SettingsPatch.addMusicPreference( SettingsPatch.addSwitchPreference(
CategoryType.VIDEO, CategoryType.VIDEO,
"revanced_enable_save_playback_speed", "revanced_enable_save_playback_speed",
"true" "true"