Merge "Introduce versions to XML for bubbles persistence" into rvc-dev am: 7cc1750375 am: 7986672c6f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11914600

Change-Id: Ibe0b984d8230d2ad8460335888bc75b9aa01a382
This commit is contained in:
TreeHugger Robot
2020-06-18 20:13:37 +00:00
committed by Automerger Merge Worker
2 changed files with 27 additions and 4 deletions

View File

@@ -25,7 +25,11 @@ import java.io.InputStream
import java.io.OutputStream
import java.nio.charset.StandardCharsets
// TODO: handle version changes gracefully
private const val CURRENT_VERSION = 1
private const val TAG_BUBBLES = "bs"
private const val ATTR_VERSION = "v"
private const val TAG_BUBBLE = "bb"
private const val ATTR_USER_ID = "uid"
private const val ATTR_PACKAGE = "pkg"
@@ -44,6 +48,7 @@ fun writeXml(stream: OutputStream, bubbles: List<BubbleEntity>) {
serializer.setOutput(stream, StandardCharsets.UTF_8.name())
serializer.startDocument(null, true)
serializer.startTag(null, TAG_BUBBLES)
serializer.attribute(null, ATTR_VERSION, CURRENT_VERSION.toString())
bubbles.forEach { b -> writeXmlEntry(serializer, b) }
serializer.endTag(null, TAG_BUBBLES)
serializer.endDocument()
@@ -79,9 +84,12 @@ fun readXml(stream: InputStream): List<BubbleEntity> {
val parser: XmlPullParser = Xml.newPullParser()
parser.setInput(stream, StandardCharsets.UTF_8.name())
XmlUtils.beginDocument(parser, TAG_BUBBLES)
val outerDepth = parser.depth
while (XmlUtils.nextElementWithin(parser, outerDepth)) {
bubbles.add(readXmlEntry(parser) ?: continue)
val version = parser.getAttributeWithName(ATTR_VERSION)?.toInt()
if (version != null && version == CURRENT_VERSION) {
val outerDepth = parser.depth
while (XmlUtils.nextElementWithin(parser, outerDepth)) {
bubbles.add(readXmlEntry(parser) ?: continue)
}
}
return bubbles
}

View File

@@ -55,7 +55,7 @@ class BubbleXmlHelperTest : SysuiTestCase() {
fun testReadXml() {
val src = """
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<bs>
<bs v="1">
<bb uid="0" pkg="com.example.messenger" sid="shortcut-1" key="k1" h="120" hid="0" />
<bb uid="10" pkg="com.example.chat" sid="alice and bob" key="k2" h="0" hid="16537428" t="title" />
<bb uid="0" pkg="com.example.messenger" sid="shortcut-2" key="k3" h="120" hid="0" />
@@ -64,4 +64,19 @@ class BubbleXmlHelperTest : SysuiTestCase() {
val actual = readXml(ByteArrayInputStream(src.toByteArray(Charsets.UTF_8)))
assertEquals("failed parsing bubbles from xml\n$src", bubbles, actual)
}
// TODO: We should handle upgrades gracefully but this is v1
@Test
fun testUpgradeDropsPreviousData() {
val src = """
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<bs>
<bb uid="0" pkg="com.example.messenger" sid="shortcut-1" key="k1" h="120" hid="0" />
<bb uid="10" pkg="com.example.chat" sid="alice and bob" key="k2" h="0" hid="16537428" t="title" />
<bb uid="0" pkg="com.example.messenger" sid="shortcut-2" key="k3" h="120" hid="0" />
</bs>
""".trimIndent()
val actual = readXml(ByteArrayInputStream(src.toByteArray(Charsets.UTF_8)))
assertEquals("failed parsing bubbles from xml\n$src", emptyList<BubbleEntity>(), actual)
}
}