DataStoreUtil.kt 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package io.legato.kazusa.utils
  2. import android.content.Context
  3. import androidx.datastore.preferences.core.booleanPreferencesKey
  4. import androidx.datastore.preferences.core.edit
  5. import androidx.datastore.preferences.core.floatPreferencesKey
  6. import androidx.datastore.preferences.core.intPreferencesKey
  7. import androidx.datastore.preferences.core.longPreferencesKey
  8. import androidx.datastore.preferences.core.stringPreferencesKey
  9. import kotlinx.coroutines.flow.first
  10. import kotlinx.coroutines.flow.map
  11. object DataStoreUtil {
  12. suspend fun <T> save(context: Context, key: String, value: T) {
  13. context.dataStore.edit { preferences ->
  14. when (value) {
  15. is String -> preferences[stringPreferencesKey(key)] = value
  16. is Int -> preferences[intPreferencesKey(key)] = value
  17. is Boolean -> preferences[booleanPreferencesKey(key)] = value
  18. is Float -> preferences[floatPreferencesKey(key)] = value
  19. is Long -> preferences[longPreferencesKey(key)] = value
  20. }
  21. }
  22. }
  23. @Suppress("UNCHECKED_CAST")
  24. suspend fun <T> read(context: Context, key: String, defaultValue: T): T {
  25. return context.dataStore.data.map { preferences ->
  26. when (defaultValue) {
  27. is String -> preferences[stringPreferencesKey(key)] ?: defaultValue
  28. is Int -> preferences[intPreferencesKey(key)] ?: defaultValue
  29. is Boolean -> preferences[booleanPreferencesKey(key)] ?: defaultValue
  30. is Float -> preferences[floatPreferencesKey(key)] ?: defaultValue
  31. is Long -> preferences[longPreferencesKey(key)] ?: defaultValue
  32. else -> defaultValue
  33. } as T
  34. }.first()
  35. }
  36. }