feat(YouTube - Settings): Add icons to the ReVanced settings (#4496)
This commit is contained in:
@ -7,6 +7,8 @@ import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.BasePreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.IntentPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory
|
||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
|
||||
import app.revanced.util.ResourceGroup
|
||||
import app.revanced.util.copyResources
|
||||
import app.revanced.util.getNode
|
||||
@ -36,14 +38,14 @@ fun settingsPatch (
|
||||
execute {
|
||||
copyResources(
|
||||
"settings",
|
||||
ResourceGroup("xml", "revanced_prefs.xml"),
|
||||
ResourceGroup("xml", "revanced_prefs.xml", "revanced_prefs_icons.xml"),
|
||||
)
|
||||
|
||||
addResources("shared", "misc.settings.settingsResourcePatch")
|
||||
}
|
||||
|
||||
finalize {
|
||||
fun Node.addPreference(preference: BasePreference, prepend: Boolean = false) {
|
||||
fun Node.addPreference(preference: BasePreference) {
|
||||
preference.serialize(ownerDocument) { resource ->
|
||||
// TODO: Currently, resources can only be added to "values", which may not be the correct place.
|
||||
// It may be necessary to ask for the desired resourceValue in the future.
|
||||
@ -61,7 +63,7 @@ fun settingsPatch (
|
||||
val preferenceFileName = "res/xml/$fileName.xml"
|
||||
if (get(preferenceFileName).exists()) {
|
||||
document(preferenceFileName).use { document ->
|
||||
document.getNode("PreferenceScreen").addPreference(intent, true)
|
||||
document.getNode("PreferenceScreen").addPreference(intent)
|
||||
}
|
||||
modified = true
|
||||
}
|
||||
@ -71,6 +73,30 @@ fun settingsPatch (
|
||||
}
|
||||
|
||||
// Add all preferences to the ReVanced fragment.
|
||||
document("res/xml/revanced_prefs_icons.xml").use { document ->
|
||||
val revancedPreferenceScreenNode = document.getNode("PreferenceScreen")
|
||||
preferences.forEach { revancedPreferenceScreenNode.addPreference(it) }
|
||||
}
|
||||
|
||||
// Because the icon preferences require declaring a layout resource,
|
||||
// there is no easy way to change to the Android default preference layout
|
||||
// after the preference is inflated.
|
||||
// Using two different preference files is the simplest and most robust solution.
|
||||
fun removeIconsAndLayout(preferences: Collection<BasePreference>) {
|
||||
preferences.forEach { preference ->
|
||||
preference.icon = null
|
||||
preference.layout = null
|
||||
|
||||
if (preference is PreferenceCategory) {
|
||||
removeIconsAndLayout(preference.preferences)
|
||||
}
|
||||
if (preference is PreferenceScreenPreference) {
|
||||
removeIconsAndLayout(preference.preferences)
|
||||
}
|
||||
}
|
||||
}
|
||||
removeIconsAndLayout(preferences)
|
||||
|
||||
document("res/xml/revanced_prefs.xml").use { document ->
|
||||
val revancedPreferenceScreenNode = document.getNode("PreferenceScreen")
|
||||
preferences.forEach { revancedPreferenceScreenNode.addPreference(it) }
|
||||
|
@ -19,10 +19,17 @@ abstract class BasePreference(
|
||||
val key: String? = null,
|
||||
val titleKey: String? = "${key}_title",
|
||||
val summaryKey: String? = "${key}_summary",
|
||||
val icon: String? = null,
|
||||
val layout: String? = null,
|
||||
icon: String? = null,
|
||||
layout: String? = null,
|
||||
val tag: String
|
||||
) {
|
||||
|
||||
var icon: String? = icon
|
||||
internal set
|
||||
|
||||
var layout: String? = layout
|
||||
internal set
|
||||
|
||||
/**
|
||||
* Serialize preference element to XML.
|
||||
* Overriding methods should invoke super and operate on its return value.
|
||||
|
@ -70,6 +70,8 @@ val returnYouTubeDislikePatch = bytecodePatch(
|
||||
key = "revanced_settings_screen_09",
|
||||
titleKey = "revanced_ryd_settings_title",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_09_ryd",
|
||||
layout = "@layout/preference_with_icon",
|
||||
intent = newIntent("revanced_ryd_settings_intent"),
|
||||
),
|
||||
)
|
||||
|
@ -48,6 +48,8 @@ private val sponsorBlockResourcePatch = resourcePatch {
|
||||
key = "revanced_settings_screen_10",
|
||||
titleKey = "revanced_sb_settings_title",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_10_sb",
|
||||
layout = "@layout/preference_with_icon",
|
||||
intent = newIntent("revanced_sb_settings_intent"),
|
||||
),
|
||||
)
|
||||
|
@ -73,7 +73,22 @@ private val settingsResourcePatch = resourcePatch {
|
||||
appearanceStringId = resourceMappings["string", "app_theme_appearance_dark"]
|
||||
|
||||
arrayOf(
|
||||
ResourceGroup("drawable", "revanced_settings_icon.xml"),
|
||||
ResourceGroup("drawable",
|
||||
"revanced_settings_icon.xml",
|
||||
"revanced_settings_screen_00_about.xml",
|
||||
"revanced_settings_screen_01_ads.xml",
|
||||
"revanced_settings_screen_02_alt_thumbnails.xml",
|
||||
"revanced_settings_screen_03_feed.xml",
|
||||
"revanced_settings_screen_04_general.xml",
|
||||
"revanced_settings_screen_05_player.xml",
|
||||
"revanced_settings_screen_06_shorts.xml",
|
||||
"revanced_settings_screen_07_seekbar.xml",
|
||||
"revanced_settings_screen_08_swipe_controls.xml",
|
||||
"revanced_settings_screen_09_ryd.xml",
|
||||
"revanced_settings_screen_10_sb.xml",
|
||||
"revanced_settings_screen_11_misc.xml",
|
||||
"revanced_settings_screen_12_video.xml",
|
||||
),
|
||||
ResourceGroup("layout", "revanced_settings_with_toolbar.xml"),
|
||||
).forEach { resourceGroup ->
|
||||
copyResources("settings", resourceGroup)
|
||||
@ -159,6 +174,8 @@ val settingsPatch = bytecodePatch(
|
||||
// Add an "about" preference to the top.
|
||||
preferences += NonInteractivePreference(
|
||||
key = "revanced_settings_screen_00_about",
|
||||
icon = "@drawable/revanced_settings_screen_00_about",
|
||||
layout = "@layout/preference_with_icon",
|
||||
summaryKey = null,
|
||||
tag = "app.revanced.extension.youtube.settings.preference.ReVancedYouTubeAboutPreference",
|
||||
selectable = true,
|
||||
@ -170,6 +187,10 @@ val settingsPatch = bytecodePatch(
|
||||
)
|
||||
}
|
||||
|
||||
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
|
||||
SwitchPreference("revanced_show_menu_icons")
|
||||
)
|
||||
|
||||
PreferenceScreen.MISC.addPreferences(
|
||||
TextPreference(
|
||||
key = null,
|
||||
@ -277,37 +298,53 @@ object PreferenceScreen : BasePreferenceScreen() {
|
||||
val ADS = Screen(
|
||||
key = "revanced_settings_screen_01_ads",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_01_ads",
|
||||
layout = "@layout/preference_with_icon",
|
||||
)
|
||||
val ALTERNATIVE_THUMBNAILS = Screen(
|
||||
key = "revanced_settings_screen_02_alt_thumbnails",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_02_alt_thumbnails",
|
||||
layout = "@layout/preference_with_icon",
|
||||
sorting = Sorting.UNSORTED,
|
||||
)
|
||||
val FEED = Screen(
|
||||
key = "revanced_settings_screen_03_feed",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_03_feed",
|
||||
layout = "@layout/preference_with_icon",
|
||||
)
|
||||
val GENERAL_LAYOUT = Screen(
|
||||
key = "revanced_settings_screen_04_general",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_04_general",
|
||||
layout = "@layout/preference_with_icon",
|
||||
)
|
||||
val PLAYER = Screen(
|
||||
key = "revanced_settings_screen_05_player",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_05_player",
|
||||
layout = "@layout/preference_with_icon",
|
||||
)
|
||||
|
||||
val SHORTS = Screen(
|
||||
key = "revanced_settings_screen_06_shorts",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_06_shorts",
|
||||
layout = "@layout/preference_with_icon",
|
||||
)
|
||||
|
||||
val SEEKBAR = Screen(
|
||||
key = "revanced_settings_screen_07_seekbar",
|
||||
summaryKey = null,
|
||||
)
|
||||
icon = "@drawable/revanced_settings_screen_07_seekbar",
|
||||
layout = "@layout/preference_with_icon",
|
||||
)
|
||||
val SWIPE_CONTROLS = Screen(
|
||||
key = "revanced_settings_screen_08_swipe_controls",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_08_swipe_controls",
|
||||
layout = "@layout/preference_with_icon",
|
||||
sorting = Sorting.UNSORTED,
|
||||
)
|
||||
|
||||
@ -317,10 +354,14 @@ object PreferenceScreen : BasePreferenceScreen() {
|
||||
val MISC = Screen(
|
||||
key = "revanced_settings_screen_11_misc",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_11_misc",
|
||||
layout = "@layout/preference_with_icon",
|
||||
)
|
||||
val VIDEO = Screen(
|
||||
key = "revanced_settings_screen_12_video",
|
||||
summaryKey = null,
|
||||
icon = "@drawable/revanced_settings_screen_12_video",
|
||||
layout = "@layout/preference_with_icon",
|
||||
sorting = Sorting.BY_KEY,
|
||||
)
|
||||
|
||||
|
Reference in New Issue
Block a user