diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt index ab36d5899739c..00c0a0b3e7b3f 100644 --- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt +++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/ClockRegistry.kt @@ -38,6 +38,7 @@ import kotlinx.coroutines.launch private val TAG = ClockRegistry::class.simpleName!! private const val DEBUG = true +private val KEY_TIMESTAMP = "appliedTimestamp" /** ClockRegistry aggregates providers and plugins */ open class ClockRegistry( @@ -134,9 +135,9 @@ open class ClockRegistry( assertNotMainThread() try { - value?._applied_timestamp = System.currentTimeMillis() - val json = ClockSettings.serialize(value) + value?.metadata?.put(KEY_TIMESTAMP, System.currentTimeMillis()) + val json = ClockSettings.serialize(value) if (handleAllUsers) { Settings.Secure.putStringForUser( context.contentResolver, @@ -172,7 +173,7 @@ open class ClockRegistry( clockChangeListeners.forEach(func) } - private fun mutateSetting(mutator: (ClockSettings) -> ClockSettings) { + public fun mutateSetting(mutator: (ClockSettings) -> ClockSettings) { scope.launch(bgDispatcher) { applySettings(mutator(settings ?: ClockSettings())) } } diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt index ab4aca569bd4a..46bae8c5c5f10 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt @@ -189,12 +189,13 @@ data class ClockSettings( val clockId: ClockId? = null, val seedColor: Int? = null, ) { - var _applied_timestamp: Long? = null + // Exclude metadata from equality checks + var metadata: JSONObject = JSONObject() companion object { private val KEY_CLOCK_ID = "clockId" private val KEY_SEED_COLOR = "seedColor" - private val KEY_TIMESTAMP = "_applied_timestamp" + private val KEY_METADATA = "metadata" fun serialize(setting: ClockSettings?): String { if (setting == null) { @@ -204,7 +205,7 @@ data class ClockSettings( return JSONObject() .put(KEY_CLOCK_ID, setting.clockId) .put(KEY_SEED_COLOR, setting.seedColor) - .put(KEY_TIMESTAMP, setting._applied_timestamp) + .put(KEY_METADATA, setting.metadata) .toString() } @@ -216,11 +217,11 @@ data class ClockSettings( val json = JSONObject(jsonStr) val result = ClockSettings( - json.getString(KEY_CLOCK_ID), + if (!json.isNull(KEY_CLOCK_ID)) json.getString(KEY_CLOCK_ID) else null, if (!json.isNull(KEY_SEED_COLOR)) json.getInt(KEY_SEED_COLOR) else null ) - if (!json.isNull(KEY_TIMESTAMP)) { - result._applied_timestamp = json.getLong(KEY_TIMESTAMP) + if (!json.isNull(KEY_METADATA)) { + result.metadata = json.getJSONObject(KEY_METADATA) } return result } diff --git a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt index 26eff61066eec..1fdb3647fcb21 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/shared/clocks/ClockRegistryTest.kt @@ -35,7 +35,6 @@ import junit.framework.Assert.fail import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope -import org.json.JSONException import org.junit.Before import org.junit.Rule import org.junit.Test @@ -271,10 +270,14 @@ class ClockRegistryTest : SysuiTestCase() { @Test fun jsonDeserialization_gotExpectedObject() { - val expected = ClockSettings("ID", null).apply { _applied_timestamp = 500 } + val expected = ClockSettings("ID", null).apply { + metadata.put("appliedTimestamp", 500) + } val actual = ClockSettings.deserialize("""{ "clockId":"ID", - "_applied_timestamp":500 + "metadata": { + "appliedTimestamp":500 + } }""") assertEquals(expected, actual) } @@ -291,29 +294,32 @@ class ClockRegistryTest : SysuiTestCase() { val expected = ClockSettings("ID", null) val actual = ClockSettings.deserialize("""{ "clockId":"ID", - "_applied_timestamp":null + "metadata":null }""") assertEquals(expected, actual) } - @Test(expected = JSONException::class) - fun jsonDeserialization_noId_threwException() { - val expected = ClockSettings(null, null).apply { _applied_timestamp = 500 } - val actual = ClockSettings.deserialize("{\"_applied_timestamp\":500}") + @Test + fun jsonDeserialization_noId_deserializedEmpty() { + val expected = ClockSettings(null, null).apply { + metadata.put("appliedTimestamp", 500) + } + val actual = ClockSettings.deserialize("{\"metadata\":{\"appliedTimestamp\":500}}") assertEquals(expected, actual) } @Test fun jsonSerialization_gotExpectedString() { - val expected = "{\"clockId\":\"ID\",\"_applied_timestamp\":500}" - val actual = ClockSettings.serialize(ClockSettings("ID", null) - .apply { _applied_timestamp = 500 }) + val expected = "{\"clockId\":\"ID\",\"metadata\":{\"appliedTimestamp\":500}}" + val actual = ClockSettings.serialize(ClockSettings("ID", null).apply { + metadata.put("appliedTimestamp", 500) + }) assertEquals(expected, actual) } @Test fun jsonSerialization_noTimestamp_gotExpectedString() { - val expected = "{\"clockId\":\"ID\"}" + val expected = "{\"clockId\":\"ID\",\"metadata\":{}}" val actual = ClockSettings.serialize(ClockSettings("ID", null)) assertEquals(expected, actual) }