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("") } } } 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) } } } }