Created
October 3, 2017 21:15
-
-
Save szymonkozak/477cf8d6603a6f8bf8bc217689ff62b1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
abstract class PrefDelegate<T>(val prefKey: String) { | |
companion object { | |
private var context: Context? = null | |
/** | |
* Initialize PrefDelegate with a Context reference | |
* This method needs to be called before any other usage of PrefDelegate | |
*/ | |
fun init(context: Context) { | |
Companion.context = context | |
} | |
} | |
protected val prefs: SharedPreferences by lazy { | |
if (context != null) { | |
PreferenceManager.getDefaultSharedPreferences(context) | |
} else { | |
throw IllegalStateException("Context was not initialized. Call PrefDelegate.init(context) before using it") | |
} | |
} | |
abstract operator fun getValue(thisRef: Any?, property: KProperty<*>): T | |
abstract operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) | |
} | |
fun stringPref(prefKey: String, defaultValue: String? = null) = StringPrefDelegate(prefKey, defaultValue) | |
class StringPrefDelegate(prefKey: String, private val defaultValue: String?) : PrefDelegate<String?>(prefKey) { | |
override fun getValue(thisRef: Any?, property: KProperty<*>): String? = prefs.getString(prefKey, defaultValue) | |
override fun setValue(thisRef: Any?, property: KProperty<*>, value: String?) = prefs.edit().putString(prefKey, value).apply() | |
} | |
fun intPref(prefKey: String, defaultValue: Int = 0) = IntPrefDelegate(prefKey, defaultValue) | |
class IntPrefDelegate(prefKey: String, private val defaultValue: Int) : PrefDelegate<Int>(prefKey) { | |
override fun getValue(thisRef: Any?, property: KProperty<*>) = prefs.getInt(prefKey, defaultValue) | |
override fun setValue(thisRef: Any?, property: KProperty<*>, value: Int) = prefs.edit().putInt(prefKey, value).apply() | |
} | |
fun floatPref(prefKey: String, defaultValue: Float = 0f) = FloatPrefDelegate(prefKey, defaultValue) | |
class FloatPrefDelegate(prefKey: String, private val defaultValue: Float) : PrefDelegate<Float>(prefKey) { | |
override fun getValue(thisRef: Any?, property: KProperty<*>) = prefs.getFloat(prefKey, defaultValue) | |
override fun setValue(thisRef: Any?, property: KProperty<*>, value: Float) = prefs.edit().putFloat(prefKey, value).apply() | |
} | |
fun booleanPref(prefKey: String, defaultValue: Boolean = false) = BooleanPrefDelegate(prefKey, defaultValue) | |
class BooleanPrefDelegate(prefKey: String, private val defaultValue: Boolean) : PrefDelegate<Boolean>(prefKey) { | |
override fun getValue(thisRef: Any?, property: KProperty<*>) = prefs.getBoolean(prefKey, defaultValue) | |
override fun setValue(thisRef: Any?, property: KProperty<*>, value: Boolean) = prefs.edit().putBoolean(prefKey, value).apply() | |
} | |
fun longPref(prefKey: String, defaultValue: Long = 0L) = LongPrefDelegate(prefKey, defaultValue) | |
class LongPrefDelegate(prefKey: String, private val defaultValue: Long) : PrefDelegate<Long>(prefKey) { | |
override fun getValue(thisRef: Any?, property: KProperty<*>) = prefs.getLong(prefKey, defaultValue) | |
override fun setValue(thisRef: Any?, property: KProperty<*>, value: Long) = prefs.edit().putLong(prefKey, value).apply() | |
} | |
fun stringSetPref(prefKey: String, defaultValue: Set<String> = HashSet<String>()) = StringSetPrefDelegate(prefKey, defaultValue) | |
class StringSetPrefDelegate(prefKey: String, private val defaultValue: Set<String>) : PrefDelegate<Set<String>>(prefKey) { | |
override fun getValue(thisRef: Any?, property: KProperty<*>) = prefs.getStringSet(prefKey, defaultValue) | |
override fun setValue(thisRef: Any?, property: KProperty<*>, value: Set<String>) = prefs.edit().putStringSet(prefKey, value).apply() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment