refactor(music/settings): integrate the preferences of the return-youtube-dislike setting into the existing settings

This commit is contained in:
inotia00 2023-09-13 12:50:31 +09:00
parent d2cf10b01d
commit 31df1c67a6
3 changed files with 94 additions and 45 deletions

View File

@ -9,9 +9,10 @@ import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.music.utils.annotations.MusicCompatibility
import app.revanced.patches.music.utils.returnyoutubedislike.bytecode.patch.ReturnYouTubeDislikeBytecodePatch
import app.revanced.patches.music.utils.settings.resource.patch.SettingsPatch
import app.revanced.util.resources.MusicResourceHelper.hookPreference
import app.revanced.util.resources.ResourceUtils
import app.revanced.util.resources.ResourceUtils.copyResources
import app.revanced.util.resources.MusicResourceHelper.RETURN_YOUTUBE_DISLIKE_SETTINGS_KEY
import app.revanced.util.resources.MusicResourceHelper.addReVancedMusicPreference
import org.w3c.dom.Element
import org.w3c.dom.Node
@Patch
@Name("Return YouTube Dislike")
@ -26,35 +27,93 @@ import app.revanced.util.resources.ResourceUtils.copyResources
class ReturnYouTubeDislikePatch : ResourcePatch {
override fun execute(context: ResourceContext) {
/**
* Copy preference
*/
arrayOf(
ResourceUtils.ResourceGroup(
"xml",
"returnyoutubedislike_prefs.xml"
)
).forEach { resourceGroup ->
context.copyResources("music/returnyoutubedislike", resourceGroup)
}
/**
* Hook RYD preference
*/
context.hookPreference(
"revanced_ryd_settings",
"com.google.android.apps.youtube.music.settings.fragment.AdvancedPrefsFragmentCompat"
)
val publicFile = context["res/values/public.xml"]
publicFile.writeText(
publicFile.readText()
.replace(
"\"advanced_prefs_compat\"",
"\"returnyoutubedislike_prefs\""
)
)
context.addReVancedMusicPreference(RETURN_YOUTUBE_DISLIKE_SETTINGS_KEY)
context.addSwitchPreference("revanced_ryd_enabled", "true")
context.addSwitchPreference("revanced_ryd_dislike_percentage", "false", "revanced_ryd_enabled")
context.addSwitchPreference("revanced_ryd_compact_layout", "false", "revanced_ryd_enabled")
context.addPreferenceCategory("revanced_ryd_about")
context.addAboutPreference("revanced_ryd_attribution")
}
private companion object {
const val YOUTUBE_MUSIC_SETTINGS_PATH = "res/xml/settings_headers.xml"
const val SWITCH_PREFERENCE_TAG_NAME =
"com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference"
const val PREFERENCE_CATEGORY_TAG_NAME =
"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)
}
fun ResourceContext.addAboutPreference(
key: String
) {
this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_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("revanced_ryd_about") }
.forEach {
it.adoptChild("Preference") {
setAttribute("android:title", "@string/$key" + "_title")
setAttribute("android:summary", "@string/$key" + "_summary")
setAttribute("android:key", key)
this.adoptChild("intent") {
setAttribute("android:action", "android.intent.action.VIEW")
setAttribute("android:data", "https://returnyoutubedislike.com")
}
}
}
}
}
fun ResourceContext.addPreferenceCategory(
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(RETURN_YOUTUBE_DISLIKE_SETTINGS_KEY) }
.forEach {
it.adoptChild(PREFERENCE_CATEGORY_TAG_NAME) {
setAttribute("android:title", "@string/$category")
setAttribute("android:key", category)
}
}
}
}
fun ResourceContext.addSwitchPreference(
key: String,
defaultValue: String
) {
addSwitchPreference(key, defaultValue, "")
}
fun ResourceContext.addSwitchPreference(
key: String,
defaultValue: String,
dependencyKey: 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(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

@ -31,6 +31,8 @@ internal object MusicResourceHelper {
internal const val YOUTUBE_MUSIC_SETTINGS_KEY = "revanced_extended_settings"
internal const val RETURN_YOUTUBE_DISLIKE_SETTINGS_KEY = "revanced_ryd_settings"
private const val YOUTUBE_MUSIC_PREFERENCE_SCREEN_TAG_NAME =
"PreferenceScreen"
@ -40,7 +42,7 @@ internal object MusicResourceHelper {
private const val YOUTUBE_MUSIC_PREFERENCE_TARGET_CLASS =
"com.google.android.libraries.strictmode.penalties.notification.FullStackTraceActivity"
private var targetPackage = "com.google.android.apps.youtube.music"
internal var targetPackage = "com.google.android.apps.youtube.music"
internal fun ResourceContext.setMicroG(newPackage: String) {
targetPackage = newPackage

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yt="http://schemas.android.com/apk/res-auto">
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_ryd_enabled_title" android:key="revanced_ryd_enabled" android:summary="@string/revanced_ryd_enabled_summary" android:defaultValue="true" />
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_ryd_dislike_percentage_title" android:key="revanced_ryd_dislike_percentage" android:summary="@string/revanced_ryd_dislike_percentage_summary" android:dependency="revanced_ryd_enabled" android:defaultValue="false" />
<com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference android:title="@string/revanced_ryd_compact_layout_title" android:key="revanced_ryd_compact_layout" android:summary="@string/revanced_ryd_compact_layout_summary" android:dependency="revanced_ryd_enabled" android:defaultValue="false" />
<com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat android:title="@string/revanced_ryd_about" android:key="about">
<Preference android:title="@string/revanced_ryd_attribution_title" android:key="revanced_ryd_attribution" android:summary="@string/revanced_ryd_attribution_summary">
<intent android:action="android.intent.action.VIEW" android:data="https://returnyoutubedislike.com" />
</Preference>
</com.google.android.apps.youtube.music.ui.preference.PreferenceCategoryCompat>
</PreferenceScreen>