Skip to content

Instantly share code, notes, and snippets.

@ericksli
Last active September 3, 2018 14:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ericksli/d410092fc7a33a8a384b0a8db7ad62f5 to your computer and use it in GitHub Desktop.
Save ericksli/d410092fc7a33a8a384b0a8db7ad62f5 to your computer and use it in GitHub Desktop.
Kotlin delegates for Android shared preferences #android #kotlin
import android.annotation.SuppressLint
import android.content.SharedPreferences
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty
class BooleanSharedPreferencesDelegate(val preferences: SharedPreferences, val key: String, val defValue: Boolean, val writeSynchronously: Boolean = false) : ReadWriteProperty<Any, Boolean> {
override fun getValue(thisRef: Any, property: KProperty<*>): Boolean = preferences.getBoolean(key, defValue)
@SuppressLint("CommitPrefEdits")
override fun setValue(thisRef: Any, property: KProperty<*>, value: Boolean) {
val editor = preferences.edit().putBoolean(key, value)
if (writeSynchronously) {
editor.commit()
} else {
editor.apply()
}
}
}
class FloatSharedPreferencesDelegate(val preferences: SharedPreferences, val key: String, val defValue: Float, val writeSynchronously: Boolean = false) : ReadWriteProperty<Any, Float> {
override fun getValue(thisRef: Any, property: KProperty<*>): Float = preferences.getFloat(key, defValue)
@SuppressLint("CommitPrefEdits")
override fun setValue(thisRef: Any, property: KProperty<*>, value: Float) {
val editor = preferences.edit().putFloat(key, value)
if (writeSynchronously) {
editor.commit()
} else {
editor.apply()
}
}
}
class IntSharedPreferencesDelegate(val preferences: SharedPreferences, val key: String, val defValue: Int, val writeSynchronously: Boolean = false) : ReadWriteProperty<Any, Int> {
override fun getValue(thisRef: Any, property: KProperty<*>): Int = preferences.getInt(key, defValue)
@SuppressLint("CommitPrefEdits")
override fun setValue(thisRef: Any, property: KProperty<*>, value: Int) {
val editor = preferences.edit().putInt(key, value)
if (writeSynchronously) {
editor.commit()
} else {
editor.apply()
}
}
}
class LongSharedPreferencesDelegate(val preferences: SharedPreferences, val key: String, val defValue: Long, val writeSynchronously: Boolean = false) : ReadWriteProperty<Any, Long> {
override fun getValue(thisRef: Any, property: KProperty<*>): Long = preferences.getLong(key, defValue)
@SuppressLint("CommitPrefEdits")
override fun setValue(thisRef: Any, property: KProperty<*>, value: Long) {
val editor = preferences.edit().putLong(key, value)
if (writeSynchronously) {
editor.commit()
} else {
editor.apply()
}
}
}
class StringSharedPreferencesDelegate(val preferences: SharedPreferences, val key: String, val defValue: String, val writeSynchronously: Boolean = false) : ReadWriteProperty<Any, String> {
override fun getValue(thisRef: Any, property: KProperty<*>): String = preferences.getString(key, defValue)
@SuppressLint("CommitPrefEdits")
override fun setValue(thisRef: Any, property: KProperty<*>, value: String) {
val editor = preferences.edit().putString(key, value)
if (writeSynchronously) {
editor.commit()
} else {
editor.apply()
}
}
}
class StringSetSharedPreferencesDelegate(val preferences: SharedPreferences, val key: String, val defValue: Set<String>, val writeSynchronously: Boolean = false) : ReadWriteProperty<Any, Set<String>> {
override fun getValue(thisRef: Any, property: KProperty<*>): Set<String> = preferences.getStringSet(key, defValue)
@SuppressLint("CommitPrefEdits")
override fun setValue(thisRef: Any, property: KProperty<*>, value: Set<String>) {
val editor = preferences.edit().putStringSet(key, value)
if (writeSynchronously) {
editor.commit()
} else {
editor.apply()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment