Skip to content

Commit

Permalink
Add flag for catching set
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcinMoskala committed Jan 18, 2018
1 parent 118ec4a commit f7a39e7
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 14 deletions.
Expand Up @@ -16,17 +16,17 @@ import kotlin.reflect.jvm.isAccessible

abstract class PreferenceHolder {

protected inline fun <reified T : Any> bindToPreferenceField(default: T, key: String? = null): ReadWriteProperty<PreferenceHolder, T>
protected inline fun <reified T : Any> bindToPreferenceField(default: T, key: String? = null, catching: Boolean = true): ReadWriteProperty<PreferenceHolder, T>
= bindToPreferenceField(T::class, object : TypeToken<T>() {}.type, default, key)

protected inline fun <reified T : Any> bindToPreferenceFieldNullable(key: String? = null): ReadWriteProperty<PreferenceHolder, T?>
protected inline fun <reified T : Any> bindToPreferenceFieldNullable(key: String? = null, catching: Boolean = true): ReadWriteProperty<PreferenceHolder, T?>
= bindToPreferenceFieldNullable(T::class, object : TypeToken<T>() {}.type, key)

protected fun <T : Any> bindToPreferenceField(clazz: KClass<T>, type: Type, default: T, key: String?): ReadWriteProperty<PreferenceHolder, T>
= PreferenceFieldBinder(clazz, type, default, key)
protected fun <T : Any> bindToPreferenceField(clazz: KClass<T>, type: Type, default: T, key: String?, catching: Boolean = true): ReadWriteProperty<PreferenceHolder, T>
= PreferenceFieldBinder(clazz, type, default, key, catching)

protected fun <T : Any> bindToPreferenceFieldNullable(clazz: KClass<T>, type: Type, key: String?): ReadWriteProperty<PreferenceHolder, T?>
= PreferenceFieldBinderNullable(clazz, type, key)
protected fun <T : Any> bindToPreferenceFieldNullable(clazz: KClass<T>, type: Type, key: String?, catching: Boolean = true): ReadWriteProperty<PreferenceHolder, T?>
= PreferenceFieldBinderNullable(clazz, type, key, catching)

/**
* Function used to clear all SharedPreference and PreferenceHolder data. Useful especially
Expand Down
Expand Up @@ -14,7 +14,8 @@ internal class PreferenceFieldBinder<T : Any>(
private val clazz: KClass<T>,
private val type: Type,
private val default: T,
private val key: String?
private val key: String?,
private val catching: Boolean
) : ReadWriteProperty<PreferenceHolder, T>, Clearable {

override fun clear(thisRef: PreferenceHolder, property: KProperty<*>) {
Expand All @@ -29,12 +30,15 @@ internal class PreferenceFieldBinder<T : Any>(

override operator fun getValue(thisRef: PreferenceHolder, property: KProperty<*>): T = when {
testingMode -> field ?: default
else -> field ?: readValue(property).apply { field = this }
catching -> field ?: readValue(property).apply { field = this }
else -> readValue(property)
}

override fun setValue(thisRef: PreferenceHolder, property: KProperty<*>, value: T) {
if (value == field) return
field = value
if (catching) {
if (value == field) return
field = value
}
if (!testingMode) saveNewValue(property, value)
}

Expand Down
Expand Up @@ -12,7 +12,8 @@ import kotlin.reflect.KProperty
internal class PreferenceFieldBinderNullable<T : Any>(
private val clazz: KClass<T>,
private val type: Type,
private val key: String?
private val key: String?,
private val catching: Boolean
) : ReadWriteProperty<PreferenceHolder, T?>, Clearable {

override fun clear(thisRef: PreferenceHolder, property: KProperty<*>) {
Expand All @@ -29,6 +30,7 @@ internal class PreferenceFieldBinderNullable<T : Any>(

override operator fun getValue(thisRef: PreferenceHolder, property: KProperty<*>): T? = when {
testingMode || propertySet -> field
!catching -> readValue(property)
else -> readAndSetValue(property)
}

Expand All @@ -40,9 +42,11 @@ internal class PreferenceFieldBinderNullable<T : Any>(
}

override fun setValue(thisRef: PreferenceHolder, property: KProperty<*>, value: T?) {
propertySet = true
if (value == field) return
field = value
if(catching) {
propertySet = true
if (value == field) return
field = value
}

if (!testingMode)
saveNewValue(property, value)
Expand Down

0 comments on commit f7a39e7

Please sign in to comment.