Skip to content

Instantly share code, notes, and snippets.

@Sinyuk7
Forked from rharter/SharedPreferenceLiveData.kt
Created December 28, 2017 06:26
Show Gist options
  • Save Sinyuk7/162fa5591387ed9e171fdb2f7659acf5 to your computer and use it in GitHub Desktop.
Save Sinyuk7/162fa5591387ed9e171fdb2f7659acf5 to your computer and use it in GitHub Desktop.

Revisions

  1. @rharter rharter revised this gist Aug 15, 2017. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions example.kt
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,8 @@

    // 1. Get a reference to SharedPreferences however you normally would.
    val prefs: SharedPreferences

    // 2. Use the extension functions to create a LiveData object of whatever type you need and observe the result.
    prefs.booleanLiveData("analytics_enabled", false).observe(this, { enabled ->
    if (enabled != null && enabled) {
    sendAnalytics()
  2. @rharter rharter revised this gist Aug 15, 2017. No changes.
  3. @rharter rharter revised this gist Aug 15, 2017. 1 changed file with 8 additions and 0 deletions.
    8 changes: 8 additions & 0 deletions example.kt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,8 @@

    val prefs: SharedPreferences

    prefs.booleanLiveData("analytics_enabled", false).observe(this, { enabled ->
    if (enabled != null && enabled) {
    sendAnalytics()
    }
    })
  4. @rharter rharter created this gist Aug 15, 2017.
    75 changes: 75 additions & 0 deletions SharedPreferenceLiveData.kt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,75 @@
    import android.arch.lifecycle.LiveData
    import android.content.SharedPreferences

    abstract class SharedPreferenceLiveData<T>(val sharedPrefs: SharedPreferences,
    val key: String,
    val defValue: T) : LiveData<T>() {

    private val preferenceChangeListener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->
    if (key == this.key) {
    value = getValueFromPreferences(key, defValue)
    }
    }

    abstract fun getValueFromPreferences(key: String, defValue: T): T

    override fun onActive() {
    super.onActive()
    value = getValueFromPreferences(key, defValue)
    sharedPrefs.registerOnSharedPreferenceChangeListener(preferenceChangeListener)
    }

    override fun onInactive() {
    sharedPrefs.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener)
    super.onInactive()
    }
    }

    class SharedPreferenceIntLiveData(sharedPrefs: SharedPreferences, key: String, defValue: Int) :
    SharedPreferenceLiveData<Int>(sharedPrefs, key, defValue) {
    override fun getValueFromPreferences(key: String, defValue: Int): Int = sharedPrefs.getInt(key, defValue)
    }

    class SharedPreferenceStringLiveData(sharedPrefs: SharedPreferences, key: String, defValue: String) :
    SharedPreferenceLiveData<String>(sharedPrefs, key, defValue) {
    override fun getValueFromPreferences(key: String, defValue: String): String = sharedPrefs.getString(key, defValue)
    }

    class SharedPreferenceBooleanLiveData(sharedPrefs: SharedPreferences, key: String, defValue: Boolean) :
    SharedPreferenceLiveData<Boolean>(sharedPrefs, key, defValue) {
    override fun getValueFromPreferences(key: String, defValue: Boolean): Boolean = sharedPrefs.getBoolean(key, defValue)
    }

    class SharedPreferenceFloatLiveData(sharedPrefs: SharedPreferences, key: String, defValue: Float) :
    SharedPreferenceLiveData<Float>(sharedPrefs, key, defValue) {
    override fun getValueFromPreferences(key: String, defValue: Float): Float = sharedPrefs.getFloat(key, defValue)
    }

    class SharedPreferenceLongLiveData(sharedPrefs: SharedPreferences, key: String, defValue: Long) :
    SharedPreferenceLiveData<Long>(sharedPrefs, key, defValue) {
    override fun getValueFromPreferences(key: String, defValue: Long): Long = sharedPrefs.getLong(key, defValue)
    }

    class SharedPreferenceStringSetLiveData(sharedPrefs: SharedPreferences, key: String, defValue: Set<String>) :
    SharedPreferenceLiveData<Set<String>>(sharedPrefs, key, defValue) {
    override fun getValueFromPreferences(key: String, defValue: Set<String>): Set<String> = sharedPrefs.getStringSet(key, defValue)
    }

    fun SharedPreferences.intLiveData(key: String, defValue: Int): SharedPreferenceLiveData<Int> {
    return SharedPreferenceIntLiveData(this, key, defValue)
    }
    fun SharedPreferences.stringLiveData(key: String, defValue: String): SharedPreferenceLiveData<String> {
    return SharedPreferenceStringLiveData(this, key, defValue)
    }
    fun SharedPreferences.booleanLiveData(key: String, defValue: Boolean): SharedPreferenceLiveData<Boolean> {
    return SharedPreferenceBooleanLiveData(this, key, defValue)
    }
    fun SharedPreferences.floatLiveData(key: String, defValue: Float): SharedPreferenceLiveData<Float> {
    return SharedPreferenceFloatLiveData(this, key, defValue)
    }
    fun SharedPreferences.longLiveData(key: String, defValue: Long): SharedPreferenceLiveData<Long> {
    return SharedPreferenceLongLiveData(this, key, defValue)
    }
    fun SharedPreferences.stringSetLiveData(key: String, defValue: Set<String>): SharedPreferenceLiveData<Set<String>> {
    return SharedPreferenceStringSetLiveData(this, key, defValue)
    }