mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-05-03 16:14:28 +02:00
refactor(music/settings): integrate the preferences of the return-youtube-dislike
setting into the existing settings
This commit is contained in:
parent
d2cf10b01d
commit
31df1c67a6
@ -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)
|
||||
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")
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook RYD preference
|
||||
*/
|
||||
context.hookPreference(
|
||||
"revanced_ryd_settings",
|
||||
"com.google.android.apps.youtube.music.settings.fragment.AdvancedPrefsFragmentCompat"
|
||||
)
|
||||
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"
|
||||
|
||||
val publicFile = context["res/values/public.xml"]
|
||||
private fun Node.adoptChild(tagName: String, block: Element.() -> Unit) {
|
||||
val child = ownerDocument.createElement(tagName)
|
||||
child.block()
|
||||
appendChild(child)
|
||||
}
|
||||
|
||||
publicFile.writeText(
|
||||
publicFile.readText()
|
||||
.replace(
|
||||
"\"advanced_prefs_compat\"",
|
||||
"\"returnyoutubedislike_prefs\""
|
||||
)
|
||||
)
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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>
|
Loading…
x
Reference in New Issue
Block a user