Skip to content

Instantly share code, notes, and snippets.

@RoyGoode
Created April 17, 2024 10:35
Show Gist options
  • Save RoyGoode/13fbee123ea1cbae7f43c35c8a107855 to your computer and use it in GitHub Desktop.
Save RoyGoode/13fbee123ea1cbae7f43c35c8a107855 to your computer and use it in GitHub Desktop.
Get simple Android Resource XML as a string
private fun getPowerProfileXml(): String {
val resources = Resources.getSystem()
val resId = resources.getIdentifier("power_profile", "xml", "android")
return getResourceXmlString(resources, resId)
}
private fun getResourceXmlString(resources: Resources, resId: Int): String {
val xml = resources.getXml(resId)
val xmlText = StringBuilder()
val indent = " "
var lastDepth: Int = 0
var event: Int = xml.eventType
var lastEvent: Int = -1
while (event != XmlPullParser.END_DOCUMENT) {
when (event) {
XmlPullParser.START_TAG -> {
if (xml.depth != lastDepth || lastEvent == XmlPullParser.END_TAG) {
xmlText.append("\n")
}
xmlText.append(indent.repeat(xml.depth))
xmlText.append("<${xml.name}")
for (i in 0 until xml.attributeCount) {
xmlText.append(" ${xml.getAttributeName(i)}=\"${xml.getAttributeValue(i)}\"")
}
xmlText.append(">")
lastDepth = xml.depth
}
XmlPullParser.TEXT -> {
xmlText.append(xml.text)
}
XmlPullParser.END_TAG -> {
if (lastEvent != XmlPullParser.TEXT) {
xmlText.append("\n")
xmlText.append(indent.repeat(xml.depth))
}
xmlText.append("</${xml.name}>")
}
}
lastEvent = event
event = xml.next()
}
return xmlText.toString()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment