[Catalyst] Refine AmbientDisplayAlwaysOnPreference datastore

NO_IFTTT=Catalyst only

Bug: 372307567
Flag: com.android.settings.flags.catalyst_lockscreen_from_display_settings
Test: devtool
Change-Id: Icd7990d4bb42c2ed5e3432d0dd81473217913b56
This commit is contained in:
Jacky Wang
2025-01-17 16:02:50 +08:00
parent 6237fd2826
commit 68178f684e

View File

@@ -25,15 +25,13 @@ import android.provider.Settings.Secure.DOZE_ALWAYS_ON
import com.android.settings.PreferenceRestrictionMixin import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime
import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObservableDelegate
import com.android.settingslib.datastore.KeyedObserver import com.android.settingslib.datastore.KeyedObserver
import com.android.settingslib.datastore.SettingsSecureStore import com.android.settingslib.datastore.SettingsSecureStore
import com.android.settingslib.datastore.SettingsStore import com.android.settingslib.datastore.SettingsStore
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceLifecycleContext
import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.PreferenceSummaryProvider import com.android.settingslib.metadata.PreferenceSummaryProvider
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel import com.android.settingslib.metadata.SensitivityLevel
@@ -44,11 +42,8 @@ class AmbientDisplayAlwaysOnPreference :
SwitchPreference(KEY, R.string.doze_always_on_title, R.string.doze_always_on_summary), SwitchPreference(KEY, R.string.doze_always_on_title, R.string.doze_always_on_summary),
PreferenceAvailabilityProvider, PreferenceAvailabilityProvider,
PreferenceSummaryProvider, PreferenceSummaryProvider,
PreferenceLifecycleProvider,
PreferenceRestrictionMixin { PreferenceRestrictionMixin {
private var keyMappingObserver: KeyedObserver<String>? = null
override val keywords: Int override val keywords: Int
get() = R.string.keywords_always_show_time_info get() = R.string.keywords_always_show_time_info
@@ -88,24 +83,17 @@ class AmbientDisplayAlwaysOnPreference :
override val sensitivityLevel override val sensitivityLevel
get() = SensitivityLevel.NO_SENSITIVITY get() = SensitivityLevel.NO_SENSITIVITY
override fun onCreate(context: PreferenceLifecycleContext) { /**
val storage = SettingsSecureStore.get(context) * Datastore of the preference.
keyMappingObserver = *
KeyedObserver<String> { _, reason -> storage.notifyChange(KEY, reason) } * The preference key and underlying storage key are the different, leverage
.also { storage.addObserver(DOZE_ALWAYS_ON, it, HandlerExecutor.main) } * [AbstractKeyedDataObservable] to redirect data change event.
} */
override fun onDestroy(context: PreferenceLifecycleContext) {
keyMappingObserver?.let {
SettingsSecureStore.get(context).removeObserver(DOZE_ALWAYS_ON, it)
}
}
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
class Storage( class Storage(
private val context: Context, private val context: Context,
private val settingsStore: SettingsStore = SettingsSecureStore.get(context), private val settingsStore: SettingsStore = SettingsSecureStore.get(context),
) : KeyedObservableDelegate<String>(settingsStore), KeyValueStore { ) : AbstractKeyedDataObservable<String>(), KeyedObserver<String>, KeyValueStore {
override fun contains(key: String) = settingsStore.contains(DOZE_ALWAYS_ON) override fun contains(key: String) = settingsStore.contains(DOZE_ALWAYS_ON)
@@ -118,6 +106,20 @@ class AmbientDisplayAlwaysOnPreference :
override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) = override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) =
settingsStore.setValue(DOZE_ALWAYS_ON, valueType, value) settingsStore.setValue(DOZE_ALWAYS_ON, valueType, value)
override fun onFirstObserverAdded() {
// observe the underlying storage key
settingsStore.addObserver(DOZE_ALWAYS_ON, this, HandlerExecutor.main)
}
override fun onKeyChanged(key: String, reason: Int) {
// forward data change to preference hierarchy key
notifyChange(KEY, reason)
}
override fun onLastObserverRemoved() {
settingsStore.removeObserver(DOZE_ALWAYS_ON, this)
}
} }
companion object { companion object {