mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-05-01 07:04:30 +02:00
refactor: Improve XML performance (#139)
This commit is contained in:
parent
fae60e63df
commit
325b43e394
@ -112,10 +112,11 @@ val darkThemePatch = resourcePatch(
|
|||||||
.valueOrThrow()
|
.valueOrThrow()
|
||||||
|
|
||||||
document("res/values/colors.xml").use { document ->
|
document("res/values/colors.xml").use { document ->
|
||||||
val resourcesNode = document.getElementsByTagName("resources").item(0) as Element
|
val resourcesNode = document.documentElement
|
||||||
|
val childNodes = resourcesNode.childNodes
|
||||||
|
|
||||||
for (i in 0 until resourcesNode.childNodes.length) {
|
for (i in 0 until childNodes.length) {
|
||||||
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
|
val node = childNodes.item(i) as? Element ?: continue
|
||||||
val colorName = node.getAttribute("name")
|
val colorName = node.getAttribute("name")
|
||||||
|
|
||||||
if (DARK_COLOR.contains(colorName)) {
|
if (DARK_COLOR.contains(colorName)) {
|
||||||
|
@ -37,8 +37,9 @@ private fun ResourcePatchContext.patchXmlFile(
|
|||||||
val parentList = document.getElementsByTagName(parentNode).item(0) as Element
|
val parentList = document.getElementsByTagName(parentNode).item(0) as Element
|
||||||
|
|
||||||
if (targetNode != null) {
|
if (targetNode != null) {
|
||||||
for (i in 0 until parentList.childNodes.length) {
|
val childNodes = parentList.childNodes
|
||||||
val node = parentList.childNodes.item(i) as? Element ?: continue
|
for (i in 0 until childNodes.length) {
|
||||||
|
val node = childNodes.item(i) as? Element ?: continue
|
||||||
|
|
||||||
if (node.nodeName == targetNode && node.hasAttribute(attribute)) {
|
if (node.nodeName == targetNode && node.hasAttribute(attribute)) {
|
||||||
node.getAttributeNode(attribute).textContent = newValue
|
node.getAttributeNode(attribute).textContent = newValue
|
||||||
|
@ -123,21 +123,22 @@ fun ResourcePatchContext.baseTranslationsPatch(
|
|||||||
}.toHashSet().toTypedArray()
|
}.toHashSet().toTypedArray()
|
||||||
|
|
||||||
// Remove unselected app languages from RVX Settings
|
// Remove unselected app languages from RVX Settings
|
||||||
setOf(
|
document("res/values/arrays.xml").use { document ->
|
||||||
|
val targetAttributeNames = setOf(
|
||||||
"revanced_language_entries",
|
"revanced_language_entries",
|
||||||
"revanced_language_entry_values",
|
"revanced_language_entry_values",
|
||||||
).forEach { attributeName ->
|
)
|
||||||
document("res/values/arrays.xml").use { document ->
|
|
||||||
with(document) {
|
|
||||||
val nodesToRemove = mutableListOf<Node>()
|
val nodesToRemove = mutableListOf<Node>()
|
||||||
|
|
||||||
val resourcesNode = getElementsByTagName("resources").item(0) as Element
|
val resourcesNode = document.documentElement
|
||||||
for (i in 0 until resourcesNode.childNodes.length) {
|
val childNodes = resourcesNode.childNodes
|
||||||
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
|
for (i in 0 until childNodes.length) {
|
||||||
|
val node = childNodes.item(i) as? Element ?: continue
|
||||||
|
|
||||||
if (node.getAttribute("name") == attributeName) {
|
if (node.getAttribute("name") in targetAttributeNames) {
|
||||||
for (j in 0 until node.childNodes.length) {
|
val itemNodes = node.childNodes
|
||||||
val item = node.childNodes.item(j) as? Element ?: continue
|
for (j in 0 until itemNodes.length) {
|
||||||
|
val item = itemNodes.item(j) as? Element ?: continue
|
||||||
val text = item.textContent
|
val text = item.textContent
|
||||||
val length = text.length
|
val length = text.length
|
||||||
if (!text.endsWith("DEFAULT") && text.subSequence(length - 2, length) !in filteredAppLanguages) {
|
if (!text.endsWith("DEFAULT") && text.subSequence(length - 2, length) !in filteredAppLanguages) {
|
||||||
@ -153,8 +154,6 @@ fun ResourcePatchContext.baseTranslationsPatch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extension function to ResourceContext to copy XML translation files.
|
* Extension function to ResourceContext to copy XML translation files.
|
||||||
|
@ -348,14 +348,16 @@ val snackBarComponentsPatch = resourcePatch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
document("res/values/dimens.xml").use { document ->
|
document("res/values/dimens.xml").use { document ->
|
||||||
val resourcesNode = document.getElementsByTagName("resources").item(0) as Element
|
val resourcesNode = document.documentElement
|
||||||
|
val childNodes = resourcesNode.childNodes
|
||||||
|
|
||||||
for (i in 0 until resourcesNode.childNodes.length) {
|
for (i in 0 until childNodes.length) {
|
||||||
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
|
val node = childNodes.item(i) as? Element ?: continue
|
||||||
val dimenName = node.getAttribute("name")
|
val dimenName = node.getAttribute("name")
|
||||||
|
|
||||||
if (dimenName.equals("snackbar_corner_radius")) {
|
if (dimenName.equals("snackbar_corner_radius")) {
|
||||||
node.textContent = cornerRadius
|
node.textContent = cornerRadius
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,10 +77,11 @@ val themePatch = resourcePatch(
|
|||||||
|
|
||||||
arrayOf("values", "values-v31").forEach { path ->
|
arrayOf("values", "values-v31").forEach { path ->
|
||||||
document("res/$path/colors.xml").use { document ->
|
document("res/$path/colors.xml").use { document ->
|
||||||
val resourcesNode = document.getElementsByTagName("resources").item(0) as Element
|
val resourcesNode = document.documentElement
|
||||||
|
val childNodes = resourcesNode.childNodes
|
||||||
|
|
||||||
for (i in 0 until resourcesNode.childNodes.length) {
|
for (i in 0 until childNodes.length) {
|
||||||
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
|
val node = childNodes.item(i) as? Element ?: continue
|
||||||
|
|
||||||
node.textContent = when (node.getAttribute("name")) {
|
node.textContent = when (node.getAttribute("name")) {
|
||||||
"yt_black0", "yt_black1", "yt_black1_opacity95", "yt_black1_opacity98", "yt_black2", "yt_black3",
|
"yt_black0", "yt_black1", "yt_black1_opacity95", "yt_black1_opacity98", "yt_black2", "yt_black3",
|
||||||
|
@ -223,22 +223,21 @@ val settingsPatch = resourcePatch(
|
|||||||
/**
|
/**
|
||||||
* remove ReVanced Extended Settings divider
|
* remove ReVanced Extended Settings divider
|
||||||
*/
|
*/
|
||||||
arrayOf("Theme.YouTube.Settings", "Theme.YouTube.Settings.Dark").forEach { themeName ->
|
|
||||||
document("res/values/styles.xml").use { document ->
|
document("res/values/styles.xml").use { document ->
|
||||||
|
val themeNames = arrayOf("Theme.YouTube.Settings", "Theme.YouTube.Settings.Dark")
|
||||||
with(document) {
|
with(document) {
|
||||||
val resourcesNode = getElementsByTagName("resources").item(0) as Element
|
val resourcesNode = documentElement
|
||||||
|
val childNodes = resourcesNode.childNodes
|
||||||
|
|
||||||
val newElement: Element = createElement("item")
|
for (i in 0 until childNodes.length) {
|
||||||
newElement.setAttribute("name", "android:listDivider")
|
val node = childNodes.item(i) as? Element ?: continue
|
||||||
|
|
||||||
for (i in 0 until resourcesNode.childNodes.length) {
|
if (node.getAttribute("name") in themeNames) {
|
||||||
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
|
val newElement = createElement("item").apply {
|
||||||
|
setAttribute("name", "android:listDivider")
|
||||||
if (node.getAttribute("name") == themeName) {
|
appendChild(createTextNode("@null"))
|
||||||
newElement.appendChild(createTextNode("@null"))
|
|
||||||
|
|
||||||
node.appendChild(newElement)
|
|
||||||
}
|
}
|
||||||
|
node.appendChild(newElement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,8 @@ fun Node.cloneNodes(parent: Node) {
|
|||||||
*/
|
*/
|
||||||
fun Node.doRecursively(action: (Node) -> Unit) {
|
fun Node.doRecursively(action: (Node) -> Unit) {
|
||||||
action(this)
|
action(this)
|
||||||
for (i in 0 until this.childNodes.length) this.childNodes.item(i).doRecursively(action)
|
val childNodes = this.childNodes
|
||||||
|
for (i in 0 until childNodes.length) childNodes.item(i).doRecursively(action)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun List<String>.getResourceGroup(fileNames: Array<String>) = map { directory ->
|
fun List<String>.getResourceGroup(fileNames: Array<String>) = map { directory ->
|
||||||
@ -164,10 +165,11 @@ fun ResourcePatchContext.addEntryValues(
|
|||||||
) {
|
) {
|
||||||
document(path).use { document ->
|
document(path).use { document ->
|
||||||
with(document) {
|
with(document) {
|
||||||
val resourcesNode = getElementsByTagName("resources").item(0) as Element
|
val resourcesNode = documentElement
|
||||||
|
val childNodes = resourcesNode.childNodes
|
||||||
val newElement: Element = createElement("item")
|
val newElement: Element = createElement("item")
|
||||||
for (i in 0 until resourcesNode.childNodes.length) {
|
for (i in 0 until childNodes.length) {
|
||||||
val node = resourcesNode.childNodes.item(i) as? Element ?: continue
|
val node = childNodes.item(i) as? Element ?: continue
|
||||||
|
|
||||||
if (node.getAttribute("name") == attributeName) {
|
if (node.getAttribute("name") == attributeName) {
|
||||||
newElement.appendChild(createTextNode(attributeValue))
|
newElement.appendChild(createTextNode(attributeValue))
|
||||||
@ -177,6 +179,7 @@ fun ResourcePatchContext.addEntryValues(
|
|||||||
} else {
|
} else {
|
||||||
node.insertBefore(newElement, node.firstChild)
|
node.insertBefore(newElement, node.firstChild)
|
||||||
}
|
}
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user