Loading packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyValueStore.kt +25 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settingslib.datastore import android.content.SharedPreferences import android.util.Log /** Interface of key-value store. */ interface KeyValueStore : KeyedObservable<String> { Loading Loading @@ -80,6 +81,27 @@ interface KeyValueStore : KeyedObservable<String> { fun setString(key: String, value: String?) = setValue(key, String::class.javaObjectType, value) } /** Delegation of [KeyValueStore]. */ interface KeyValueStoreDelegate : KeyValueStore, KeyedObservableDelegate<String> { /** [KeyValueStore] to delegate. */ val keyValueStoreDelegate: KeyValueStore override val keyedObservableDelegate get() = keyValueStoreDelegate override fun contains(key: String) = keyValueStoreDelegate.contains(key) override fun <T : Any> getDefaultValue(key: String, valueType: Class<T>) = keyValueStoreDelegate.getDefaultValue(key, valueType) override fun <T : Any> getValue(key: String, valueType: Class<T>) = keyValueStoreDelegate.getValue(key, valueType) ?: getDefaultValue(key, valueType) override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) = keyValueStoreDelegate.setValue(key, valueType, value) } /** [SharedPreferences] based [KeyValueStore]. */ interface SharedPreferencesKeyValueStore : KeyValueStore { Loading @@ -103,11 +125,11 @@ interface SharedPreferencesKeyValueStore : KeyValueStore { @Suppress("UNCHECKED_CAST") override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) { val edit = sharedPreferences.edit() if (value == null) { sharedPreferences.edit().remove(key).apply() edit.remove(key).apply() return } val edit = sharedPreferences.edit() when (valueType) { Boolean::class.javaObjectType -> edit.putBoolean(key, value as Boolean) Float::class.javaObjectType -> edit.putFloat(key, value as Float) Loading @@ -115,7 +137,7 @@ interface SharedPreferencesKeyValueStore : KeyValueStore { Long::class.javaObjectType -> edit.putLong(key, value as Long) String::class.javaObjectType -> edit.putString(key, value as String) Set::class.javaObjectType -> edit.putStringSet(key, value as Set<String>) else -> {} else -> Log.e(LOG_TAG, "Unsupported $valueType for $key: $value") } edit.apply() } Loading packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyedObserver.kt +22 −2 Original line number Diff line number Diff line Loading @@ -116,8 +116,28 @@ interface KeyedObservable<K> { } /** Delegation of [KeyedObservable]. */ open class KeyedObservableDelegate<K>(delegate: KeyedObservable<K>) : KeyedObservable<K> by delegate interface KeyedObservableDelegate<K> : KeyedObservable<K> { /** [KeyedObservable] to delegate. */ val keyedObservableDelegate: KeyedObservable<K> override fun addObserver(observer: KeyedObserver<K?>, executor: Executor): Boolean = keyedObservableDelegate.addObserver(observer, executor) override fun addObserver(key: K, observer: KeyedObserver<K>, executor: Executor): Boolean = keyedObservableDelegate.addObserver(key, observer, executor) override fun removeObserver(observer: KeyedObserver<K?>): Boolean = keyedObservableDelegate.removeObserver(observer) override fun removeObserver(key: K, observer: KeyedObserver<K>): Boolean = keyedObservableDelegate.removeObserver(key, observer) override fun notifyChange(reason: Int): Unit = keyedObservableDelegate.notifyChange(reason) override fun notifyChange(key: K, reason: Int): Unit = keyedObservableDelegate.notifyChange(key, reason) } /** A thread safe implementation of [KeyedObservable]. */ open class KeyedDataObservable<K> : KeyedObservable<K> { Loading Loading
packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyValueStore.kt +25 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settingslib.datastore import android.content.SharedPreferences import android.util.Log /** Interface of key-value store. */ interface KeyValueStore : KeyedObservable<String> { Loading Loading @@ -80,6 +81,27 @@ interface KeyValueStore : KeyedObservable<String> { fun setString(key: String, value: String?) = setValue(key, String::class.javaObjectType, value) } /** Delegation of [KeyValueStore]. */ interface KeyValueStoreDelegate : KeyValueStore, KeyedObservableDelegate<String> { /** [KeyValueStore] to delegate. */ val keyValueStoreDelegate: KeyValueStore override val keyedObservableDelegate get() = keyValueStoreDelegate override fun contains(key: String) = keyValueStoreDelegate.contains(key) override fun <T : Any> getDefaultValue(key: String, valueType: Class<T>) = keyValueStoreDelegate.getDefaultValue(key, valueType) override fun <T : Any> getValue(key: String, valueType: Class<T>) = keyValueStoreDelegate.getValue(key, valueType) ?: getDefaultValue(key, valueType) override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) = keyValueStoreDelegate.setValue(key, valueType, value) } /** [SharedPreferences] based [KeyValueStore]. */ interface SharedPreferencesKeyValueStore : KeyValueStore { Loading @@ -103,11 +125,11 @@ interface SharedPreferencesKeyValueStore : KeyValueStore { @Suppress("UNCHECKED_CAST") override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) { val edit = sharedPreferences.edit() if (value == null) { sharedPreferences.edit().remove(key).apply() edit.remove(key).apply() return } val edit = sharedPreferences.edit() when (valueType) { Boolean::class.javaObjectType -> edit.putBoolean(key, value as Boolean) Float::class.javaObjectType -> edit.putFloat(key, value as Float) Loading @@ -115,7 +137,7 @@ interface SharedPreferencesKeyValueStore : KeyValueStore { Long::class.javaObjectType -> edit.putLong(key, value as Long) String::class.javaObjectType -> edit.putString(key, value as String) Set::class.javaObjectType -> edit.putStringSet(key, value as Set<String>) else -> {} else -> Log.e(LOG_TAG, "Unsupported $valueType for $key: $value") } edit.apply() } Loading
packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyedObserver.kt +22 −2 Original line number Diff line number Diff line Loading @@ -116,8 +116,28 @@ interface KeyedObservable<K> { } /** Delegation of [KeyedObservable]. */ open class KeyedObservableDelegate<K>(delegate: KeyedObservable<K>) : KeyedObservable<K> by delegate interface KeyedObservableDelegate<K> : KeyedObservable<K> { /** [KeyedObservable] to delegate. */ val keyedObservableDelegate: KeyedObservable<K> override fun addObserver(observer: KeyedObserver<K?>, executor: Executor): Boolean = keyedObservableDelegate.addObserver(observer, executor) override fun addObserver(key: K, observer: KeyedObserver<K>, executor: Executor): Boolean = keyedObservableDelegate.addObserver(key, observer, executor) override fun removeObserver(observer: KeyedObserver<K?>): Boolean = keyedObservableDelegate.removeObserver(observer) override fun removeObserver(key: K, observer: KeyedObserver<K>): Boolean = keyedObservableDelegate.removeObserver(key, observer) override fun notifyChange(reason: Int): Unit = keyedObservableDelegate.notifyChange(reason) override fun notifyChange(key: K, reason: Int): Unit = keyedObservableDelegate.notifyChange(key, reason) } /** A thread safe implementation of [KeyedObservable]. */ open class KeyedDataObservable<K> : KeyedObservable<K> { Loading