diff --git a/FloconAndroid/datastores-no-op/src/main/kotlin/io/github/openflocon/flocon/preferences/datastores/model/FloconDatastorePreference.kt b/FloconAndroid/datastores-no-op/src/main/kotlin/io/github/openflocon/flocon/preferences/datastores/model/FloconDatastorePreference.kt index 855d25c2..885a2fdf 100644 --- a/FloconAndroid/datastores-no-op/src/main/kotlin/io/github/openflocon/flocon/preferences/datastores/model/FloconDatastorePreference.kt +++ b/FloconAndroid/datastores-no-op/src/main/kotlin/io/github/openflocon/flocon/preferences/datastores/model/FloconDatastorePreference.kt @@ -14,6 +14,11 @@ import io.github.openflocon.flocon.plugins.sharedprefs.model.FloconPreference import io.github.openflocon.flocon.plugins.sharedprefs.model.FloconPreferenceValue import kotlinx.coroutines.flow.first +interface FloconDatastoreMapper { + fun fromDatastore(datastoreValue: String) : String + fun toDatastore(valueForDatastore: String) : String +} + class FloconDatastorePreference( override val name: String, val dataStore: DataStore, diff --git a/FloconAndroid/datastores/src/main/kotlin/io/github/openflocon/flocon/preferences/datastores/model/FloconDatastorePreference.kt b/FloconAndroid/datastores/src/main/kotlin/io/github/openflocon/flocon/preferences/datastores/model/FloconDatastorePreference.kt index 3332e668..a6b77fa6 100644 --- a/FloconAndroid/datastores/src/main/kotlin/io/github/openflocon/flocon/preferences/datastores/model/FloconDatastorePreference.kt +++ b/FloconAndroid/datastores/src/main/kotlin/io/github/openflocon/flocon/preferences/datastores/model/FloconDatastorePreference.kt @@ -14,9 +14,15 @@ import io.github.openflocon.flocon.plugins.sharedprefs.model.FloconPreference import io.github.openflocon.flocon.plugins.sharedprefs.model.FloconPreferenceValue import kotlinx.coroutines.flow.first +interface FloconDatastoreMapper { + fun fromDatastore(datastoreValue: String) : String + fun toDatastore(valueForDatastore: String) : String +} + class FloconDatastorePreference( override val name: String, private val dataStore: DataStore, + private val mapper: FloconDatastoreMapper? = null // if we encrypted the datastore ) : FloconPreference { override suspend fun set( @@ -30,7 +36,9 @@ class FloconDatastorePreference( dataStore.edit { try { when (it[key]) { - is String -> it[stringPreferencesKey(columnName)] = value.stringValue!! + is String -> it[stringPreferencesKey(columnName)] = mapper?.let { + it.toDatastore(value.stringValue!!) + } ?: value.stringValue!! is Int -> it[intPreferencesKey(columnName)] = value.intValue!! is Boolean -> it[booleanPreferencesKey(columnName)] = value.booleanValue!! is Float -> it[floatPreferencesKey(columnName)] = value.floatValue!! @@ -63,7 +71,7 @@ class FloconDatastorePreference( val value = data[key] ?: return null return when (value) { - is String -> FloconPreferenceValue(stringValue = value) + is String -> FloconPreferenceValue(stringValue = mapper?.fromDatastore(value) ?: value) is Int -> FloconPreferenceValue(intValue = value) is Float -> FloconPreferenceValue(floatValue = value) is Double -> FloconPreferenceValue(floatValue = value.toFloat())