|
import android.content.SharedPreferences |
|
import androidx.lifecycle.LiveData |
|
|
|
class SharedPreferenceLiveData<T>( |
|
private val sharedPrefs: SharedPreferences, |
|
val key: String, |
|
val defaultValue: T, |
|
private val valueExtractor: (sharedPrefs: SharedPreferences, prefKey: String, defValue: T) -> T |
|
) : LiveData<T>() { |
|
private val preferenceChangeListener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPrefs, key -> |
|
if (key == this.key) { |
|
postValue(valueExtractor(sharedPrefs, key, defaultValue)) |
|
} |
|
} |
|
|
|
init { |
|
postValue(valueExtractor(sharedPrefs, key, defaultValue)) |
|
} |
|
|
|
override fun onActive() { |
|
super.onActive() |
|
sharedPrefs.registerOnSharedPreferenceChangeListener(preferenceChangeListener) |
|
} |
|
|
|
override fun onInactive() { |
|
sharedPrefs.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener) |
|
super.onInactive() |
|
} |
|
} |
|
|
|
fun SharedPreferences.getIntLiveData(key: String, defaultValue: Int = 0): LiveData<Int> = |
|
SharedPreferenceLiveData(this, key, defaultValue) { sharedPrefs, prefKey, defValue -> |
|
sharedPrefs.getInt(prefKey, defValue) |
|
} |
|
|
|
fun SharedPreferences.getStringLiveData(key: String, defaultValue: String = ""): LiveData<String> = |
|
SharedPreferenceLiveData(this, key, defaultValue) { sharedPrefs, prefKey, defValue -> |
|
sharedPrefs.getString(prefKey, defValue) ?: defValue |
|
} |
|
|
|
fun SharedPreferences.getBooleanLiveData(key: String, defaultValue: Boolean = false): LiveData<Boolean> = |
|
SharedPreferenceLiveData(this, key, defaultValue) { sharedPrefs, prefKey, defValue -> |
|
sharedPrefs.getBoolean(prefKey, defValue) |
|
} |
|
|
|
fun SharedPreferences.getFloatLiveData(key: String, defaultValue: Float = 0.0F): LiveData<Float> = |
|
SharedPreferenceLiveData(this, key, defaultValue) { sharedPrefs, prefKey, defValue -> |
|
sharedPrefs.getFloat(prefKey, defValue) |
|
} |
|
|
|
fun SharedPreferences.getLongLiveData(key: String, defaultValue: Long = 0L): LiveData<Long> = |
|
SharedPreferenceLiveData(this, key, defaultValue) { sharedPrefs, prefKey, defValue -> |
|
sharedPrefs.getLong(prefKey, defValue) |
|
} |
|
|
|
fun SharedPreferences.getStringSetLiveData(key: String, defaultValue: Set<String> = emptySet()): LiveData<Set<String>> = |
|
SharedPreferenceLiveData(this, key, defaultValue) { sharedPrefs, prefKey, defValue -> |
|
sharedPrefs.getStringSet(prefKey, defValue) ?: defValue |
|
} |