Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed3e775c authored by Jacky Wang's avatar Jacky Wang
Browse files

[Catalyst] Fix storage issue for hybrid mode

Bug: 325144964
Flag: EXEMPT framework
Test: Manual
Change-Id: I49113f2962a18eeb430a26e6871abf457eeb96cf
parent 7875655e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settingslib.datastore

import android.content.ContentResolver
import android.content.Context
import android.net.Uri
import android.provider.Settings.Global
import android.provider.Settings.SettingNotFoundException

@@ -29,6 +30,9 @@ import android.provider.Settings.SettingNotFoundException
class SettingsGlobalStore private constructor(contentResolver: ContentResolver) :
    SettingsStore(contentResolver) {

    override val uri: Uri
        get() = Global.getUriFor("")

    override val tag: String
        get() = "SettingsGlobalStore"

+4 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settingslib.datastore

import android.content.ContentResolver
import android.content.Context
import android.net.Uri
import android.provider.Settings.Secure
import android.provider.Settings.SettingNotFoundException

@@ -29,6 +30,9 @@ import android.provider.Settings.SettingNotFoundException
class SettingsSecureStore private constructor(contentResolver: ContentResolver) :
    SettingsStore(contentResolver) {

    override val uri: Uri
        get() = Secure.getUriFor("")

    override val tag: String
        get() = "SettingsSecureStore"

+4 −6
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.database.ContentObserver
import android.net.Uri
import android.os.Handler
import android.os.Looper
import android.provider.Settings
import android.util.Log
import java.util.concurrent.Executor
import java.util.concurrent.atomic.AtomicInteger
@@ -70,13 +69,12 @@ abstract class SettingsStore(protected val contentResolver: ContentResolver) :
    private fun onObserverAdded() {
        if (counter.getAndIncrement() != 0) return
        Log.i(tag, "registerContentObserver")
        contentResolver.registerContentObserver(
            Settings.Global.getUriFor(""),
            true,
            contentObserver,
        )
        contentResolver.registerContentObserver(uri, true, contentObserver)
    }

    /** The URI to watch for any key change. */
    protected abstract val uri: Uri

    override fun removeObserver(observer: KeyedObserver<String?>) =
        if (super.removeObserver(observer)) {
            onObserverRemoved()
+4 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settingslib.datastore

import android.content.ContentResolver
import android.content.Context
import android.net.Uri
import android.provider.Settings.SettingNotFoundException
import android.provider.Settings.System

@@ -29,6 +30,9 @@ import android.provider.Settings.System
class SettingsSystemStore private constructor(contentResolver: ContentResolver) :
    SettingsStore(contentResolver) {

    override val uri: Uri
        get() = System.getUriFor("")

    override val tag: String
        get() = "SettingsSystemStore"

+11 −2
Original line number Diff line number Diff line
@@ -20,8 +20,10 @@ import android.content.Context
import android.os.Handler
import android.os.Looper
import androidx.preference.Preference
import androidx.preference.PreferenceDataStore
import androidx.preference.PreferenceGroup
import androidx.preference.PreferenceScreen
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedDataObservable
import com.android.settingslib.datastore.KeyedObservable
import com.android.settingslib.datastore.KeyedObserver
@@ -181,15 +183,22 @@ class PreferenceScreenBindingHelper(
        private fun PreferenceGroup.bindRecursively(
            preferenceBindingFactory: PreferenceBindingFactory,
            preferences: Map<String, PreferenceMetadata>,
            storages: MutableMap<KeyValueStore, PreferenceDataStore> = mutableMapOf(),
        ) {
            preferenceBindingFactory.bind(this, preferences[key])
            val count = preferenceCount
            for (index in 0 until count) {
                val preference = getPreference(index)
                if (preference is PreferenceGroup) {
                    preference.bindRecursively(preferenceBindingFactory, preferences)
                    preference.bindRecursively(preferenceBindingFactory, preferences, storages)
                } else {
                    preferenceBindingFactory.bind(preference, preferences[preference.key])
                    preferences[preference.key]?.let {
                        preferenceBindingFactory.getPreferenceBinding(it)?.bind(preference, it)
                        (it as? PersistentPreference<*>)?.storage(context)?.let { storage ->
                            preference.preferenceDataStore =
                                storages.getOrPut(storage) { PreferenceDataStoreAdapter(storage) }
                        }
                    }
                }
            }
        }