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

Commit 0110a1a8 authored by Jacky Wang's avatar Jacky Wang
Browse files

[Catalyst] Provide PreferenceScreenMetadata via creator

PreferenceScreenMetadata is effectively singleton, which causes lots of
issues. This change allows creating different PreferenceScreenMetadata
instances per screen.

Bug: 386179791
Flag: com.android.settings.flags.catalyst
Test: manual
Change-Id: I2bad91d2ef1caa046083fcb3e7c1d478f1ac6ae7
parent 3b5e1c8f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -44,8 +44,8 @@ abstract class GetPreferenceGraphApiHandler(
    ): PreferenceGraphProto {
        val builder = PreferenceGraphBuilder.of(application, callingPid, callingUid, request)
        if (request.screenKeys.isEmpty()) {
            for (key in PreferenceScreenRegistry.preferenceScreens.keys) {
                builder.addPreferenceScreenFromRegistry(key)
            PreferenceScreenRegistry.preferenceScreenMetadataCreators.forEachKeyAsync {
                builder.addPreferenceScreenFromRegistry(it)
            }
            for (provider in preferenceScreenProviders) {
                builder.addPreferenceScreenProvider(provider)
+1 −1
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ class PreferenceGetterApiHandler(
        val preferences = mutableMapOf<PreferenceCoordinate, PreferenceProto>()
        val flags = request.flags
        for ((screenKey, coordinates) in request.preferences.groupBy { it.screenKey }) {
            val screenMetadata = PreferenceScreenRegistry[screenKey]
            val screenMetadata = PreferenceScreenRegistry.create(application, screenKey)
            if (screenMetadata == null) {
                for (coordinate in coordinates) {
                    errors[coordinate] = PreferenceGetterErrorCode.NOT_FOUND
+1 −1
Original line number Diff line number Diff line
@@ -141,7 +141,7 @@ private constructor(
        }

    suspend fun addPreferenceScreenFromRegistry(key: String): Boolean {
        val metadata = PreferenceScreenRegistry[key] ?: return false
        val metadata = PreferenceScreenRegistry.create(context, key) ?: return false
        return addPreferenceScreenMetadata(metadata)
    }

+2 −1
Original line number Diff line number Diff line
@@ -112,7 +112,8 @@ class PreferenceSetterApiHandler(
        request: PreferenceSetterRequest,
    ): Int {
        val screenMetadata =
            PreferenceScreenRegistry[request.screenKey] ?: return PreferenceSetterResult.UNSUPPORTED
            PreferenceScreenRegistry.create(application, request.screenKey)
                ?: return PreferenceSetterResult.UNSUPPORTED
        val key = request.key
        val metadata =
            screenMetadata.getPreferenceHierarchy(application).find(key)
+1 −2
Original line number Diff line number Diff line
@@ -14,10 +14,9 @@ android_library {
    ],
    srcs: [":SettingsLibMetadata-srcs"],
    static_libs: [
        "SettingsLibDataStore",
        "androidx.annotation_annotation",
        "androidx.fragment_fragment",
        "guava",
        "SettingsLibDataStore",
    ],
    kotlincflags: ["-Xjvm-default=all"],
}
Loading