Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d2ae18c authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
Browse files

Merge "Merge "Introduce versions to XML for bubbles persistence" into rvc-dev...

Merge "Merge "Introduce versions to XML for bubbles persistence" into rvc-dev am: 7cc17503 am: 7986672c" into rvc-d1-dev-plus-aosp
parents 0e8b14e6 857ef08a
Loading
Loading
Loading
Loading
+11 −3
Original line number Original line Diff line number Diff line
@@ -25,7 +25,11 @@ import java.io.InputStream
import java.io.OutputStream
import java.io.OutputStream
import java.nio.charset.StandardCharsets
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 TAG_BUBBLES = "bs"
private const val ATTR_VERSION = "v"
private const val TAG_BUBBLE = "bb"
private const val TAG_BUBBLE = "bb"
private const val ATTR_USER_ID = "uid"
private const val ATTR_USER_ID = "uid"
private const val ATTR_PACKAGE = "pkg"
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.setOutput(stream, StandardCharsets.UTF_8.name())
    serializer.startDocument(null, true)
    serializer.startDocument(null, true)
    serializer.startTag(null, TAG_BUBBLES)
    serializer.startTag(null, TAG_BUBBLES)
    serializer.attribute(null, ATTR_VERSION, CURRENT_VERSION.toString())
    bubbles.forEach { b -> writeXmlEntry(serializer, b) }
    bubbles.forEach { b -> writeXmlEntry(serializer, b) }
    serializer.endTag(null, TAG_BUBBLES)
    serializer.endTag(null, TAG_BUBBLES)
    serializer.endDocument()
    serializer.endDocument()
@@ -79,10 +84,13 @@ fun readXml(stream: InputStream): List<BubbleEntity> {
    val parser: XmlPullParser = Xml.newPullParser()
    val parser: XmlPullParser = Xml.newPullParser()
    parser.setInput(stream, StandardCharsets.UTF_8.name())
    parser.setInput(stream, StandardCharsets.UTF_8.name())
    XmlUtils.beginDocument(parser, TAG_BUBBLES)
    XmlUtils.beginDocument(parser, TAG_BUBBLES)
    val version = parser.getAttributeWithName(ATTR_VERSION)?.toInt()
    if (version != null && version == CURRENT_VERSION) {
        val outerDepth = parser.depth
        val outerDepth = parser.depth
        while (XmlUtils.nextElementWithin(parser, outerDepth)) {
        while (XmlUtils.nextElementWithin(parser, outerDepth)) {
            bubbles.add(readXmlEntry(parser) ?: continue)
            bubbles.add(readXmlEntry(parser) ?: continue)
        }
        }
    }
    return bubbles
    return bubbles
}
}


+16 −1
Original line number Original line Diff line number Diff line
@@ -55,7 +55,7 @@ class BubbleXmlHelperTest : SysuiTestCase() {
    fun testReadXml() {
    fun testReadXml() {
        val src = """
        val src = """
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<?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="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="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" />
<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)))
        val actual = readXml(ByteArrayInputStream(src.toByteArray(Charsets.UTF_8)))
        assertEquals("failed parsing bubbles from xml\n$src", bubbles, actual)
        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)
    }
}
}
 No newline at end of file