aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin/ca/allanwang/kau/kpref/KPrefDelegate.kt
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/kotlin/ca/allanwang/kau/kpref/KPrefDelegate.kt')
-rw-r--r--core/src/main/kotlin/ca/allanwang/kau/kpref/KPrefDelegate.kt21
1 files changed, 10 insertions, 11 deletions
diff --git a/core/src/main/kotlin/ca/allanwang/kau/kpref/KPrefDelegate.kt b/core/src/main/kotlin/ca/allanwang/kau/kpref/KPrefDelegate.kt
index d54c54d..c17d3df 100644
--- a/core/src/main/kotlin/ca/allanwang/kau/kpref/KPrefDelegate.kt
+++ b/core/src/main/kotlin/ca/allanwang/kau/kpref/KPrefDelegate.kt
@@ -27,13 +27,14 @@ import ca.allanwang.kau.kotlin.ILazyResettable
*/
interface KPrefDelegate<T> : ILazyResettable<T> {
+ val key: String
operator fun setValue(any: Any, property: kotlin.reflect.KProperty<*>, t: T)
}
class KPrefException(message: String) : IllegalAccessException(message)
class KPrefDelegateAndroid<T> internal constructor(
- private val key: String,
+ override val key: String,
private val fallback: T,
private val pref: KPref,
private val prefBuilder: KPrefBuilderAndroid,
@@ -50,9 +51,7 @@ class KPrefDelegateAndroid<T> internal constructor(
private val lock = this
init {
- if (pref.prefMap.containsKey(key))
- throw KPrefException("$key is already used elsewhere in preference ${pref.preferenceName}")
- pref.prefMap[key] = this@KPrefDelegateAndroid
+ pref.add(this)
}
override fun invalidate() {
@@ -79,7 +78,8 @@ class KPrefDelegateAndroid<T> internal constructor(
override fun isInitialized(): Boolean = _value !== UNINITIALIZED
- override fun toString(): String = if (isInitialized()) value.toString() else "Lazy kPref $key not initialized yet."
+ override fun toString(): String =
+ if (isInitialized()) value.toString() else "Lazy kPref $key not initialized yet."
override operator fun setValue(any: Any, property: kotlin.reflect.KProperty<*>, t: T) {
_value = t
@@ -91,7 +91,7 @@ class KPrefDelegateAndroid<T> internal constructor(
}
class KPrefDelegateInMemory<T> internal constructor(
- private val key: String,
+ override val key: String,
private val fallback: T,
private val pref: KPref,
private var postSetter: (value: T) -> Unit = {}
@@ -104,13 +104,11 @@ class KPrefDelegateInMemory<T> internal constructor(
private val lock = this
init {
- if (pref.prefMap.containsKey(key))
- throw KPrefException("$key is already used elsewhere in preference ${pref.preferenceName}")
- pref.prefMap[key] = this
+ pref.add(this)
}
override fun invalidate() {
- // No op
+ _value = UNINITIALIZED
}
@Suppress("UNCHECKED_CAST")
@@ -133,7 +131,8 @@ class KPrefDelegateInMemory<T> internal constructor(
override fun isInitialized(): Boolean = _value !== UNINITIALIZED
- override fun toString(): String = if (isInitialized()) value.toString() else "Lazy kPref $key not initialized yet."
+ override fun toString(): String =
+ if (isInitialized()) value.toString() else "Lazy kPref $key not initialized yet."
override operator fun setValue(any: Any, property: kotlin.reflect.KProperty<*>, t: T) {
_value = t