mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-05-11 12:04:39 +02:00
refactor: better method is used for settings-framework
This commit is contained in:
parent
b3cd3d4fb8
commit
723fa2b97c
@ -32,6 +32,8 @@ class MusicVideoAdsPatch : BytecodePatch() {
|
||||
|
||||
GeneralVideoAdsPatch.injectMainstreamAds(INTEGRATIONS_CLASS_DESCRIPTOR)
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("ads", "revanced_hide_music_ads", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
private companion object {
|
||||
|
@ -63,6 +63,8 @@ class CodecsUnlockPatch : BytecodePatch(
|
||||
}
|
||||
} ?: return CodecsLockFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("listening", "revanced_enable_opus_codec", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
||||
|
@ -59,6 +59,8 @@ class BlackNavbarPatch : BytecodePatch(
|
||||
}
|
||||
} ?: return TabLayoutFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("design", "revanced_enable_black_navbar", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
||||
|
@ -40,6 +40,8 @@ class HideCastButtonPatch : BytecodePatch(
|
||||
) ?: return HideCastButtonFingerprint.toErrorResult()
|
||||
} ?: return HideCastButtonParentFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("navigation", "revanced_hide_cast_button", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
||||
|
@ -64,6 +64,8 @@ class CompactHeaderPatch : BytecodePatch() {
|
||||
"invoke-static { v$register }, $MUSIC_SETTINGS_PATH->hideCompactHeader(Landroid/view/View;)V"
|
||||
)
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("navigation", "revanced_hide_compact_header", "true")
|
||||
|
||||
patchSuccessArray[0] = true;
|
||||
}
|
||||
}
|
||||
|
@ -48,6 +48,8 @@ class MinimizedPlayerPatch : BytecodePatch(
|
||||
}
|
||||
} ?: return MinimizedPlayerFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("listening", "revanced_enable_force_minimized_player", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
@ -92,6 +92,8 @@ class MiniplayerColorPatch : BytecodePatch(
|
||||
} ?: return MiniplayerColorFingerprint.toErrorResult()
|
||||
} ?: return MiniplayerColorParentFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("design", "revanced_enable_color_match_player", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
private companion object {
|
||||
|
@ -158,6 +158,8 @@ class EnforceShufflePatch : BytecodePatch(
|
||||
)
|
||||
} ?: return MusicPlaybackControlsFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("listening", "revanced_enable_force_shuffle", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
|
||||
|
@ -43,6 +43,8 @@ class TabletModePatch : BytecodePatch(
|
||||
)
|
||||
} ?: return TabletLayoutFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("navigation", "revanced_enable_tablet_mode", "true")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
||||
|
@ -67,6 +67,8 @@ class ZenModePatch : BytecodePatch(
|
||||
} ?: return ZenModeFingerprint.toErrorResult()
|
||||
} ?: return MiniplayerColorParentFingerprint.toErrorResult()
|
||||
|
||||
MusicSettingsPatch.addMusicPreference("design", "revanced_enable_zen_mode", "false")
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
}
|
@ -6,12 +6,15 @@ import app.revanced.patcher.annotation.Version
|
||||
import app.revanced.patcher.data.ResourceContext
|
||||
import app.revanced.patcher.patch.PatchResult
|
||||
import app.revanced.patcher.patch.PatchResultSuccess
|
||||
import app.revanced.patcher.patch.ResourcePatch
|
||||
import app.revanced.patcher.patch.annotations.DependsOn
|
||||
import app.revanced.patcher.patch.annotations.Patch
|
||||
import app.revanced.patches.music.misc.integrations.patch.MusicIntegrationsPatch
|
||||
import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility
|
||||
import app.revanced.util.resources.ResourceUtils.copyXmlNode
|
||||
import app.revanced.patches.shared.patch.settings.AbstractSettingsResourcePatch
|
||||
import app.revanced.util.resources.MusicResourceHelper.addMusicPreference
|
||||
import app.revanced.util.resources.MusicResourceHelper.addMusicPreferenceCategory
|
||||
import app.revanced.util.resources.MusicResourceHelper.addReVancedMusicPreference
|
||||
import app.revanced.util.resources.MusicResourceHelper.sortMusicPreferenceCategory
|
||||
import org.w3c.dom.Element
|
||||
|
||||
@Patch
|
||||
@ -20,14 +23,14 @@ import org.w3c.dom.Element
|
||||
@DependsOn([MusicIntegrationsPatch::class])
|
||||
@YouTubeMusicCompatibility
|
||||
@Version("0.0.1")
|
||||
class MusicSettingsPatch : ResourcePatch {
|
||||
class MusicSettingsPatch : AbstractSettingsResourcePatch(
|
||||
"music/settings",
|
||||
"music/settings/host",
|
||||
false
|
||||
) {
|
||||
override fun execute(context: ResourceContext): PatchResult {
|
||||
|
||||
/*
|
||||
* Copy strings
|
||||
*/
|
||||
|
||||
context.copyXmlNode("music/settings/host", "values/strings.xml", "resources")
|
||||
super.execute(context)
|
||||
contexts = context
|
||||
|
||||
/*
|
||||
* Copy colors
|
||||
@ -47,19 +50,21 @@ class MusicSettingsPatch : ResourcePatch {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy preference fragments
|
||||
*/
|
||||
|
||||
context.copyXmlNode("music/settings/host", "xml/settings_headers.xml", "PreferenceScreen")
|
||||
|
||||
// Removed since YouTube Music v5.38.xx
|
||||
|
||||
try {
|
||||
context.copyXmlNode("music/settings/host", "xml/settings_prefs_compat.xml", "com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat")
|
||||
} catch (_: Exception) {}
|
||||
context.addReVancedMusicPreference()
|
||||
|
||||
return PatchResultSuccess()
|
||||
}
|
||||
companion object {
|
||||
private lateinit var contexts: ResourceContext
|
||||
|
||||
internal fun addMusicPreference(
|
||||
category: String,
|
||||
key: String,
|
||||
defaultValue: String
|
||||
) {
|
||||
contexts.addMusicPreferenceCategory(category)
|
||||
contexts.sortMusicPreferenceCategory()
|
||||
contexts.addMusicPreference(category, key, defaultValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,129 @@
|
||||
package app.revanced.util.resources
|
||||
|
||||
import app.revanced.extensions.doRecursively
|
||||
import app.revanced.patcher.data.ResourceContext
|
||||
import org.w3c.dom.Element
|
||||
import org.w3c.dom.Node
|
||||
|
||||
private fun Node.adoptChild(tagName: String, block: Element.() -> Unit) {
|
||||
val child = ownerDocument.createElement(tagName)
|
||||
child.block()
|
||||
appendChild(child)
|
||||
}
|
||||
|
||||
private fun Node.cloneNodes(parent: Node) {
|
||||
val node = cloneNode(true)
|
||||
parent.appendChild(node)
|
||||
parent.removeChild(this)
|
||||
}
|
||||
|
||||
private fun Node.insertNode(tagName: String, targetNode: Node, block: Element.() -> Unit) {
|
||||
val child = ownerDocument.createElement(tagName)
|
||||
child.block()
|
||||
parentNode.insertBefore(child, targetNode)
|
||||
}
|
||||
|
||||
|
||||
internal object MusicResourceHelper {
|
||||
|
||||
private const val YOUTUBE_MUSIC_SETTINGS_PATH = "res/xml/settings_headers.xml"
|
||||
|
||||
private const val YOUTUBE_MUSIC_SETTINGS_KEY = "revanced_extended_settings"
|
||||
|
||||
private const val YOUTUBE_MUSIC_CATEGORY_TAG_NAME = "com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat"
|
||||
|
||||
private const val YOUTUBE_MUSIC_PREFERENCE_TAG_NAME = "com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference"
|
||||
|
||||
private var currentMusicPreferenceCategory = emptyArray<String>()
|
||||
|
||||
private fun setMusicPreferenceCategory (newCategory: String) {
|
||||
currentMusicPreferenceCategory += listOf(newCategory)
|
||||
}
|
||||
|
||||
internal fun ResourceContext.addMusicPreferenceCategory(
|
||||
category: String
|
||||
) {
|
||||
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor ->
|
||||
val tags = editor.file.getElementsByTagName("PreferenceScreen")
|
||||
List(tags.length) { tags.item(it) as Element }
|
||||
.filter { it.getAttribute("android:key").contains(YOUTUBE_MUSIC_SETTINGS_KEY) }
|
||||
.forEach {
|
||||
if (!currentMusicPreferenceCategory.contains(category)) {
|
||||
it.adoptChild(YOUTUBE_MUSIC_CATEGORY_TAG_NAME) {
|
||||
setAttribute("android:title", "@string/revanced_category_$category")
|
||||
setAttribute("android:key", "revanced_settings_$category")
|
||||
}
|
||||
setMusicPreferenceCategory(category)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ResourceContext.sortMusicPreferenceCategory() {
|
||||
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor ->
|
||||
editor.file.doRecursively loop@{
|
||||
if (it !is Element) return@loop
|
||||
|
||||
currentMusicPreferenceCategory.forEach { category ->
|
||||
it.getAttributeNode("android:key")?.let { attribute ->
|
||||
if (attribute.textContent == "revanced_settings_$category") {
|
||||
it.cloneNodes(it.parentNode)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ResourceContext.addMusicPreference(
|
||||
category: String,
|
||||
key: String,
|
||||
defaultValue: String
|
||||
) {
|
||||
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor ->
|
||||
val tags = editor.file.getElementsByTagName(YOUTUBE_MUSIC_CATEGORY_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:summary", "@string/$key" + "_summary")
|
||||
setAttribute("android:key", key)
|
||||
setAttribute("android:defaultValue", defaultValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun ResourceContext.addReVancedMusicPreference() {
|
||||
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("PreferenceScreen", it) {
|
||||
setAttribute("android:title", "@string/" + YOUTUBE_MUSIC_SETTINGS_KEY + "_title")
|
||||
setAttribute("android:summary", "@string/" + YOUTUBE_MUSIC_SETTINGS_KEY + "_summary")
|
||||
setAttribute("android:key", YOUTUBE_MUSIC_SETTINGS_KEY)
|
||||
}
|
||||
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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -21,6 +21,8 @@
|
||||
<string name="revanced_enable_tablet_mode_title">Enable tablet mode</string>
|
||||
<string name="revanced_enable_zen_mode_summary">Adds a grey tint to the video player to reduce eye strain.</string>
|
||||
<string name="revanced_enable_zen_mode_title">Enable zen mode</string>
|
||||
<string name="revanced_extended_settings_summary">ReVanced Extended specific settings</string>
|
||||
<string name="revanced_extended_settings_title">ReVanced Extended settings</string>
|
||||
<string name="revanced_hide_cast_button_summary">Hides the cast button at the top of the homepage and at the top of the player.</string>
|
||||
<string name="revanced_hide_cast_button_title">Hide cast button</string>
|
||||
<string name="revanced_hide_compact_header_summary">"Hides the music category bar at the top of the homepage.
|
||||
@ -29,5 +31,4 @@
|
||||
<string name="revanced_hide_music_ads_summary">"Hide ads before playing a track.
|
||||
(requires an app restart)"</string>
|
||||
<string name="revanced_hide_music_ads_title">Hide music ads</string>
|
||||
<string name="revanced_revanced_settings_title">ReVanced settings</string>
|
||||
</resources>
|
||||
|
@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<PreferenceScreen android:title="@string/revanced_revanced_settings_title" android:key="revanced_extended_settings" android:summary="ReVanced Music Extended">
|
||||
<com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat android:title="@string/revanced_category_ads" android:key="revanced_settings_ads">
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_hide_music_ads_title" android:key="revanced_hide_music_ads" android:summary="@string/revanced_hide_music_ads_summary" android:defaultValue="true" />
|
||||
</com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
|
||||
<com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat android:title="@string/revanced_category_design" android:key="revanced_settings_design">
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_black_navbar_title" android:key="revanced_enable_black_navbar" android:summary="@string/revanced_enable_black_navbar_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_color_match_player_title" android:key="revanced_enable_color_match_player" android:summary="@string/revanced_enable_color_match_player_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_zen_mode_title" android:key="revanced_enable_zen_mode" android:summary="@string/revanced_enable_zen_mode_summary" android:defaultValue="false" />
|
||||
</com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
|
||||
<com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat android:title="@string/revanced_category_listening" android:key="revanced_settings_listening">
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_opus_codec_title" android:key="revanced_enable_opus_codec" android:summary="@string/revanced_enable_opus_codec_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_force_minimized_player_title" android:key="revanced_enable_force_minimized_player" android:summary="@string/revanced_enable_force_minimized_player_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_force_shuffle_title" android:key="revanced_enable_force_shuffle" android:summary="@string/revanced_enable_force_shuffle_summary" android:defaultValue="true" />
|
||||
</com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
|
||||
<com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat android:title="@string/revanced_category_navigation" android:key="revanced_settings_navigation">
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_hide_cast_button_title" android:key="revanced_hide_cast_button" android:summary="@string/revanced_hide_cast_button_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_hide_compact_header_title" android:key="revanced_hide_compact_header" android:summary="@string/revanced_hide_compact_header_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_tablet_mode_title" android:key="revanced_enable_tablet_mode" android:summary="@string/revanced_enable_tablet_mode_summary" android:defaultValue="true" />
|
||||
</com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
|
||||
</PreferenceScreen>
|
||||
</PreferenceScreen>
|
@ -1,23 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
|
||||
<PreferenceScreen android:title="@string/revanced_revanced_settings_title" android:key="revanced_extended_settings" android:summary="ReVanced Music Extended">
|
||||
<com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat android:title="@string/revanced_category_ads" android:key="revanced_settings_ads">
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_hide_music_ads_title" android:key="revanced_hide_music_ads" android:summary="@string/revanced_hide_music_ads_summary" android:defaultValue="true" />
|
||||
</com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
|
||||
<com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat android:title="@string/revanced_category_design" android:key="revanced_settings_design">
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_black_navbar_title" android:key="revanced_enable_black_navbar" android:summary="@string/revanced_enable_black_navbar_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_color_match_player_title" android:key="revanced_enable_color_match_player" android:summary="@string/revanced_enable_color_match_player_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_zen_mode_title" android:key="revanced_enable_zen_mode" android:summary="@string/revanced_enable_zen_mode_summary" android:defaultValue="false" />
|
||||
</com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
|
||||
<com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat android:title="@string/revanced_category_listening" android:key="revanced_settings_listening">
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_opus_codec_title" android:key="revanced_enable_opus_codec" android:summary="@string/revanced_enable_opus_codec_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_force_minimized_player_title" android:key="revanced_enable_force_minimized_player" android:summary="@string/revanced_enable_force_minimized_player_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_force_shuffle_title" android:key="revanced_enable_force_shuffle" android:summary="@string/revanced_enable_force_shuffle_summary" android:defaultValue="true" />
|
||||
</com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
|
||||
<com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat android:title="@string/revanced_category_navigation" android:key="revanced_settings_navigation">
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_hide_cast_button_title" android:key="revanced_hide_cast_button" android:summary="@string/revanced_hide_cast_button_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_hide_compact_header_title" android:key="revanced_hide_compact_header" android:summary="@string/revanced_hide_compact_header_summary" android:defaultValue="true" />
|
||||
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_enable_tablet_mode_title" android:key="revanced_enable_tablet_mode" android:summary="@string/revanced_enable_tablet_mode_summary" android:defaultValue="true" />
|
||||
</com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
|
||||
</PreferenceScreen>
|
||||
</com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
|
Loading…
x
Reference in New Issue
Block a user