Improve settings interface, move iOS project

This commit is contained in:
2025-12-21 13:47:17 +03:00
Unverified
parent b18af36b3e
commit 0c7697aef8
23 changed files with 95 additions and 215 deletions
@@ -1,7 +1,5 @@
package com.pr0gramm3r101.utils.settings
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.floatPreferencesKey
@@ -11,96 +9,81 @@ import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.core.stringSetPreferencesKey
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.runBlocking
class AndroidSettings(): Settings {
private val dataStore: DataStore<Preferences>
get() = DataStoreSingleton.dataStore
private val dataStore get() = DataStoreSingleton.dataStore
override fun putString(key: String, value: String) {
runBlocking {
dataStore.edit { preferences ->
preferences[stringPreferencesKey(key)] = value
}
override suspend fun putString(key: String, value: String) {
dataStore.edit { preferences ->
preferences[stringPreferencesKey(key)] = value
}
}
override fun getString(key: String, default: String) = runBlocking {
override suspend fun getString(key: String, default: String) =
dataStore.data.map { preferences ->
preferences[stringPreferencesKey(key)] ?: default
}.first()
}
override fun putInt(key: String, value: Int) = runBlocking {
override suspend fun putInt(key: String, value: Int) {
dataStore.edit { preferences ->
preferences[intPreferencesKey(key)] = value
}
Unit
}
override fun getInt(key: String, default: Int) = runBlocking {
override suspend fun getInt(key: String, default: Int) =
dataStore.data.map { preferences ->
preferences[intPreferencesKey(key)] ?: default
}.first()
}
override fun putLong(key: String, value: Long) = runBlocking {
override suspend fun putLong(key: String, value: Long) {
dataStore.edit { preferences ->
preferences[longPreferencesKey(key)] = value
}
Unit
}
override fun getLong(key: String, default: Long) = runBlocking {
override suspend fun getLong(key: String, default: Long) =
dataStore.data.map { preferences ->
preferences[longPreferencesKey(key)] ?: default
}.first()
}
override fun putFloat(key: String, value: Float) = runBlocking {
override suspend fun putFloat(key: String, value: Float) {
dataStore.edit { preferences ->
preferences[floatPreferencesKey(key)] = value
}
Unit
}
override fun getFloat(key: String, default: Float) = runBlocking {
override suspend fun getFloat(key: String, default: Float) =
dataStore.data.map { preferences ->
preferences[floatPreferencesKey(key)] ?: default
}.first()
}
override fun putBoolean(key: String, value: Boolean) = runBlocking {
override suspend fun putBoolean(key: String, value: Boolean) {
dataStore.edit { preferences ->
preferences[booleanPreferencesKey(key)] = value
}
Unit
}
override fun getBoolean(key: String, default: Boolean) = runBlocking {
override suspend fun getBoolean(key: String, default: Boolean) =
dataStore.data.map { preferences ->
preferences[booleanPreferencesKey(key)] ?: default
}.first()
}
override fun putStringSet(key: String, value: Set<String>) = runBlocking {
override suspend fun putStringSet(key: String, value: Set<String>) {
dataStore.edit { preferences ->
preferences[stringSetPreferencesKey(key)] = value
}
Unit
}
override fun getStringSet(key: String, default: Set<String>) = runBlocking {
override suspend fun getStringSet(key: String, default: Set<String>) =
dataStore.data.map { preferences ->
preferences[stringSetPreferencesKey(key)] ?: default
}.first()
}
override fun putStringList(key: String, value: List<String>) = putStringSet(key, value.toSet())
override suspend fun putStringList(key: String, value: List<String>) = putStringSet(key, value.toSet())
override fun getStringList(key: String, default: List<String>) = getStringSet(key, default.toSet()).toList()
override suspend fun getStringList(key: String, default: List<String>) = getStringSet(key, default.toSet()).toList()
override fun remove(key: String) = runBlocking {
override suspend fun remove(key: String) {
dataStore.edit { preferences ->
preferences.remove(stringPreferencesKey(key))
preferences.remove(intPreferencesKey(key))
@@ -109,6 +92,5 @@ class AndroidSettings(): Settings {
preferences.remove(booleanPreferencesKey(key))
preferences.remove(stringSetPreferencesKey(key))
}
Unit
}
}
@@ -8,26 +8,26 @@ interface Settings {
inline operator fun invoke() = settings
}
fun putString(key: String, value: String)
fun getString(key: String, default: String = ""): String
suspend fun putString(key: String, value: String)
suspend fun getString(key: String, default: String = ""): String
fun putInt(key: String, value: Int)
fun getInt(key: String, default: Int = 0): Int
suspend fun putInt(key: String, value: Int)
suspend fun getInt(key: String, default: Int = 0): Int
fun putLong(key: String, value: Long)
fun getLong(key: String, default: Long = 0L): Long
suspend fun putLong(key: String, value: Long)
suspend fun getLong(key: String, default: Long = 0L): Long
fun putFloat(key: String, value: Float)
fun getFloat(key: String, default: Float = 0f): Float
suspend fun putFloat(key: String, value: Float)
suspend fun getFloat(key: String, default: Float = 0f): Float
fun putBoolean(key: String, value: Boolean)
fun getBoolean(key: String, default: Boolean = false): Boolean
suspend fun putBoolean(key: String, value: Boolean)
suspend fun getBoolean(key: String, default: Boolean = false): Boolean
fun putStringSet(key: String, value: Set<String>)
fun getStringSet(key: String, default: Set<String> = emptySet()): Set<String>
suspend fun putStringSet(key: String, value: Set<String>)
suspend fun getStringSet(key: String, default: Set<String> = emptySet()): Set<String>
fun putStringList(key: String, value: List<String>)
fun getStringList(key: String, default: List<String> = emptyList()): List<String>
suspend fun putStringList(key: String, value: List<String>)
suspend fun getStringList(key: String, default: List<String> = emptyList()): List<String>
fun remove(key: String)
suspend fun remove(key: String)
}
@@ -6,65 +6,40 @@ import platform.Foundation.NSUserDefaults
class IosSettings : Settings {
private val defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults
override fun putString(key: String, value: String) {
defaults.setObject(value, key)
override suspend fun putString(key: String, value: String) = defaults.setObject(value, key)
override suspend fun getString(key: String, default: String) = defaults.stringForKey(key) ?: default
override suspend fun putInt(key: String, value: Int) = defaults.setInteger(value.toLong(), key)
override suspend fun getInt(key: String, default: Int) = defaults.integerForKey(key).toInt()
override suspend fun putLong(key: String, value: Long) = defaults.setObject(value, key)
override suspend fun getLong(key: String, default: Long) = defaults.objectForKey(key) as? Long ?: default
override suspend fun putFloat(key: String, value: Float) = defaults.setFloat(value, key)
override suspend fun getFloat(key: String, default: Float) = defaults.floatForKey(key)
override suspend fun putBoolean(key: String, value: Boolean) = defaults.setBool(value, key)
override suspend fun getBoolean(key: String, default: Boolean) = defaults.boolForKey(key)
override suspend fun putStringSet(key: String, value: Set<String>) = defaults.setObject(value.toList(), key)
override suspend fun getStringSet(key: String, default: Set<String>): Set<String> {
return (defaults.objectForKey(key) as? List<*> ?: return default)
.filterIsInstance<String>()
.toSet()
}
override fun getString(key: String, default: String): String {
return defaults.stringForKey(key) ?: default
override suspend fun putStringList(key: String, value: List<String>) = defaults.setObject(value, key)
override suspend fun getStringList(key: String, default: List<String>): List<String> {
return (defaults.objectForKey(key) as? List<*> ?: return default)
.filterIsInstance<String>()
}
override fun putInt(key: String, value: Int) {
defaults.setInteger(value.toLong(), key)
}
override fun getInt(key: String, default: Int): Int {
return defaults.integerForKey(key).toInt()
}
override fun putLong(key: String, value: Long) {
defaults.setObject(value, key)
}
override fun getLong(key: String, default: Long): Long {
return defaults.objectForKey(key) as? Long ?: default
}
override fun putFloat(key: String, value: Float) {
defaults.setFloat(value, key)
}
override fun getFloat(key: String, default: Float): Float {
return defaults.floatForKey(key)
}
override fun putBoolean(key: String, value: Boolean) {
defaults.setBool(value, key)
}
override fun getBoolean(key: String, default: Boolean): Boolean {
return defaults.boolForKey(key)
}
override fun putStringSet(key: String, value: Set<String>) {
defaults.setObject(value.toList(), key)
}
override fun getStringSet(key: String, default: Set<String>): Set<String> {
val list = defaults.objectForKey(key) as? List<*> ?: return default
return list.filterIsInstance<String>().toSet()
}
override fun putStringList(key: String, value: List<String>) {
defaults.setObject(value, key)
}
override fun getStringList(key: String, default: List<String>): List<String> {
val list = defaults.objectForKey(key) as? List<*> ?: return default
return list.filterIsInstance<String>()
}
override fun remove(key: String) {
defaults.removeObjectForKey(key)
}
override suspend fun remove(key: String) = defaults.removeObjectForKey(key)
}