81 lines
3.5 KiB
Kotlin
81 lines
3.5 KiB
Kotlin
package app.revanced.patches.twitter.misc.dynamiccolor
|
|
|
|
import app.revanced.patcher.data.ResourceContext
|
|
import app.revanced.patcher.patch.PatchException
|
|
import app.revanced.patcher.patch.ResourcePatch
|
|
import app.revanced.patcher.patch.annotation.CompatiblePackage
|
|
import app.revanced.patcher.patch.annotation.Patch
|
|
import java.io.FileWriter
|
|
import java.nio.file.Files
|
|
|
|
@Patch(
|
|
name = "Dynamic color",
|
|
description = "Replaces the default X (Formerly Twitter) Blue with the user's Material You palette.",
|
|
compatiblePackages = [CompatiblePackage("com.twitter.android")],
|
|
)
|
|
@Suppress("unused")
|
|
object DynamicColorPatch : ResourcePatch() {
|
|
override fun execute(context: ResourceContext) {
|
|
val resDirectory = context.get("res")
|
|
if (!resDirectory.isDirectory) throw PatchException("The res folder can not be found.")
|
|
|
|
val valuesV31Directory = resDirectory.resolve("values-v31")
|
|
if (!valuesV31Directory.isDirectory) Files.createDirectories(valuesV31Directory.toPath())
|
|
|
|
val valuesNightV31Directory = resDirectory.resolve("values-night-v31")
|
|
if (!valuesNightV31Directory.isDirectory) Files.createDirectories(valuesNightV31Directory.toPath())
|
|
|
|
listOf(valuesV31Directory, valuesNightV31Directory).forEach { it ->
|
|
val colorsXml = it.resolve("colors.xml")
|
|
|
|
if (!colorsXml.exists()) {
|
|
FileWriter(colorsXml).use {
|
|
it.write("<?xml version=\"1.0\" encoding=\"utf-8\"?><resources></resources>")
|
|
}
|
|
}
|
|
}
|
|
|
|
context.xmlEditor["res/values-v31/colors.xml"].use { editor ->
|
|
val document = editor.file
|
|
|
|
mapOf(
|
|
"ps__twitter_blue" to "@color/twitter_blue",
|
|
"ps__twitter_blue_pressed" to "@color/twitter_blue_fill_pressed",
|
|
"twitter_blue" to "@android:color/system_accent1_400",
|
|
"twitter_blue_fill_pressed" to "@android:color/system_accent1_300",
|
|
"twitter_blue_opacity_30" to "@android:color/system_accent1_100",
|
|
"twitter_blue_opacity_50" to "@android:color/system_accent1_200",
|
|
"twitter_blue_opacity_58" to "@android:color/system_accent1_300",
|
|
"deep_transparent_twitter_blue" to "@android:color/system_accent1_200",
|
|
).forEach { (k, v) ->
|
|
val colorElement = document.createElement("color")
|
|
|
|
colorElement.setAttribute("name", k)
|
|
colorElement.textContent = v
|
|
|
|
document.getElementsByTagName("resources").item(0).appendChild(colorElement)
|
|
}
|
|
}
|
|
|
|
context.xmlEditor["res/values-night-v31/colors.xml"].use { editor ->
|
|
val document = editor.file
|
|
|
|
mapOf(
|
|
"twitter_blue" to "@android:color/system_accent1_200",
|
|
"twitter_blue_fill_pressed" to "@android:color/system_accent1_300",
|
|
"twitter_blue_opacity_30" to "@android:color/system_accent1_50",
|
|
"twitter_blue_opacity_50" to "@android:color/system_accent1_100",
|
|
"twitter_blue_opacity_58" to "@android:color/system_accent1_200",
|
|
"deep_transparent_twitter_blue" to "@android:color/system_accent1_200",
|
|
).forEach { (k, v) ->
|
|
val colorElement = document.createElement("color")
|
|
|
|
colorElement.setAttribute("name", k)
|
|
colorElement.textContent = v
|
|
|
|
document.getElementsByTagName("resources").item(0).appendChild(colorElement)
|
|
}
|
|
}
|
|
}
|
|
}
|