diff options
author | 2025-03-11 00:44:59 +0800 | |
---|---|---|
committer | 2025-03-11 09:39:23 +0800 | |
commit | 8bb5e41168ac2f39222648af68e86fc8070ad43f (patch) | |
tree | 8176bf9e525fb85401a0b9db7b9beca5b51f60ce | |
parent | 1347d67e1844fd66ac1e36b284efd1f72e2d4d6b (diff) |
[Catalyst] Introduce KeyValueStoreDelegate
Bug: 388167106
Flag: com.android.settings.flags.catalyst
Test: manual
Change-Id: I35525121e556f677e24d2ef103aa634b2f298939
-rw-r--r-- | packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyValueStore.kt | 28 | ||||
-rw-r--r-- | packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyedObserver.kt | 24 |
2 files changed, 47 insertions, 5 deletions
diff --git a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyValueStore.kt b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyValueStore.kt index 472ffa9289a7..6dec2f999630 100644 --- a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyValueStore.kt +++ b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyValueStore.kt @@ -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> { @@ -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 { @@ -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) @@ -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() } diff --git a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyedObserver.kt b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyedObserver.kt index 07b1c9e3385e..ff58bf7b8728 100644 --- a/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyedObserver.kt +++ b/packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyedObserver.kt @@ -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> { |