diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/config/DelegateConfig.kt b/app/src/main/java/pl/szczodrzynski/edziennik/config/DelegateConfig.kt index 00ede071..91dac668 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/config/DelegateConfig.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/config/DelegateConfig.kt @@ -115,9 +115,9 @@ class ConfigDelegate( is Boolean -> value // enums, maps & collections is Enum<*> -> value.toInt() - is Collection<*> -> JsonArray(value.map { + is Collection<*> -> value.map { if (it is Number || it is Boolean) it else serialize(it, serializeObjects = false) - }) + }.toJsonElement() is Map<*, *> -> gson.toJson(value.mapValues { (_, it) -> if (it is Number || it is Boolean) it else serialize(it, serializeObjects = false) }) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ext/JsonExtensions.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ext/JsonExtensions.kt index 5342b330..b91399a6 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ext/JsonExtensions.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ext/JsonExtensions.kt @@ -5,6 +5,7 @@ package pl.szczodrzynski.edziennik.ext import android.os.Bundle +import com.google.gson.Gson import com.google.gson.JsonArray import com.google.gson.JsonElement import com.google.gson.JsonObject @@ -48,6 +49,11 @@ fun JsonObject.putEnum(key: String, value: Enum<*>) = addProperty(key, value.toI fun String.toJsonObject(): JsonObject? = try { JsonParser.parseString(this).asJsonObject } catch (ignore: Exception) { null } fun String.toJsonArray(): JsonArray? = try { JsonParser.parseString(this).asJsonArray } catch (ignore: Exception) { null } +fun Any?.toJsonElement(): JsonElement = when (this) { + is Collection<*> -> JsonArray(this) + else -> Gson().toJsonTree(this) +} + operator fun JsonObject.set(key: String, value: JsonElement) = this.add(key, value) operator fun JsonObject.set(key: String, value: Boolean) = this.addProperty(key, value) operator fun JsonObject.set(key: String, value: String?) = this.addProperty(key, value) @@ -67,6 +73,7 @@ fun JsonObject(vararg properties: Pair): JsonObject { is Number -> addProperty(key, value) is Boolean -> addProperty(key, value) is Enum<*> -> addProperty(key, value.toInt()) + else -> add(key, property.toJsonElement()) } } } @@ -98,6 +105,8 @@ fun JsonArray(properties: Collection): JsonArray { is Char -> add(property as Char?) is Number -> add(property as Number?) is Boolean -> add(property as Boolean?) + is Enum<*> -> add(property.toInt()) + else -> add(property.toJsonElement()) } } }