Loading packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGetterApi.kt +1 −1 Original line number Diff line number Diff line Loading @@ -131,7 +131,7 @@ class PreferenceGetterApiHandler( for (coordinate in coordinates) nodes[coordinate.key] = null screenMetadata.getPreferenceHierarchy(application, this).forEachRecursivelyAsync { val metadata = it.metadata val key = metadata.key val key = metadata.bindingKey if (nodes.containsKey(key)) nodes[key] = it } for (coordinate in coordinates) { Loading packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt +6 −5 Original line number Diff line number Diff line Loading @@ -427,7 +427,7 @@ fun PreferenceMetadata.toProto( flags: Int, ) = preferenceProto { val metadata = this@toProto key = metadata.key key = metadata.bindingKey if (flags.includeMetadata()) { metadata.getTitleTextProto(context, isRoot)?.let { title = it } if (metadata.summary != 0) { Loading Loading @@ -473,13 +473,14 @@ fun PreferenceMetadata.toProto( ) { val storage = metadata.storage(context) value = preferenceValueProto { val key = metadata.bindingKey when (metadata.valueType) { Int::class.javaObjectType -> storage.getInt(metadata.key)?.let { intValue = it } Int::class.javaObjectType -> storage.getInt(key)?.let { intValue = it } Boolean::class.javaObjectType -> storage.getBoolean(metadata.key)?.let { booleanValue = it } storage.getBoolean(key)?.let { booleanValue = it } Float::class.javaObjectType -> storage.getFloat(metadata.key)?.let { floatValue = it } Long::class.javaObjectType -> storage.getLong(metadata.key)?.let { longValue = it } storage.getFloat(key)?.let { floatValue = it } Long::class.javaObjectType -> storage.getLong(key)?.let { longValue = it } else -> {} } } Loading packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceHierarchy.kt +3 −3 Original line number Diff line number Diff line Loading @@ -171,7 +171,7 @@ class PreferenceHierarchy : PreferenceHierarchyNode { private fun findPreference(key: String): Pair<PreferenceHierarchy, Int>? { children.forEachIndexed { index, node -> if (node !is PreferenceHierarchyNode) return@forEachIndexed if (node.metadata.key == key) return this to index if (node.metadata.bindingKey == key) return this to index if (node is PreferenceHierarchy) { val result = node.findPreference(key) if (result != null) return result Loading Loading @@ -346,7 +346,7 @@ class PreferenceHierarchy : PreferenceHierarchyNode { * Note: sub async hierarchy will not be searched, use [findAsync] if needed. */ fun find(key: String): PreferenceMetadata? { if (metadata.key == key) return metadata if (metadata.bindingKey == key) return metadata for (child in children) { if (child is Deferred<*>) continue if (child is PreferenceHierarchy) { Loading @@ -354,7 +354,7 @@ class PreferenceHierarchy : PreferenceHierarchyNode { if (result != null) return result } else { child as PreferenceHierarchyNode if (child.metadata.key == key) return child.metadata if (child.metadata.bindingKey == key) return child.metadata } } return null Loading packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt +4 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,10 @@ interface PreferenceMetadata { /** Preference key. */ val key: String /** Preference key when attached to preference hierarchy. */ val bindingKey: String get() = key /** * Preference title resource id. * Loading packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceScreenMetadata.kt +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import kotlinx.coroutines.flow.Flow * For parameterized preference screen that relies on additional information (e.g. package name, * language code) to build its content, the subclass must: * - override [arguments] in constructor * - override [bindingKey] to distinguish the preferences on the preference hierarchy * - add a static method `fun parameters(context: Context): Flow<Bundle>` (context is optional) to * provide all possible arguments */ Loading Loading
packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGetterApi.kt +1 −1 Original line number Diff line number Diff line Loading @@ -131,7 +131,7 @@ class PreferenceGetterApiHandler( for (coordinate in coordinates) nodes[coordinate.key] = null screenMetadata.getPreferenceHierarchy(application, this).forEachRecursivelyAsync { val metadata = it.metadata val key = metadata.key val key = metadata.bindingKey if (nodes.containsKey(key)) nodes[key] = it } for (coordinate in coordinates) { Loading
packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt +6 −5 Original line number Diff line number Diff line Loading @@ -427,7 +427,7 @@ fun PreferenceMetadata.toProto( flags: Int, ) = preferenceProto { val metadata = this@toProto key = metadata.key key = metadata.bindingKey if (flags.includeMetadata()) { metadata.getTitleTextProto(context, isRoot)?.let { title = it } if (metadata.summary != 0) { Loading Loading @@ -473,13 +473,14 @@ fun PreferenceMetadata.toProto( ) { val storage = metadata.storage(context) value = preferenceValueProto { val key = metadata.bindingKey when (metadata.valueType) { Int::class.javaObjectType -> storage.getInt(metadata.key)?.let { intValue = it } Int::class.javaObjectType -> storage.getInt(key)?.let { intValue = it } Boolean::class.javaObjectType -> storage.getBoolean(metadata.key)?.let { booleanValue = it } storage.getBoolean(key)?.let { booleanValue = it } Float::class.javaObjectType -> storage.getFloat(metadata.key)?.let { floatValue = it } Long::class.javaObjectType -> storage.getLong(metadata.key)?.let { longValue = it } storage.getFloat(key)?.let { floatValue = it } Long::class.javaObjectType -> storage.getLong(key)?.let { longValue = it } else -> {} } } Loading
packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceHierarchy.kt +3 −3 Original line number Diff line number Diff line Loading @@ -171,7 +171,7 @@ class PreferenceHierarchy : PreferenceHierarchyNode { private fun findPreference(key: String): Pair<PreferenceHierarchy, Int>? { children.forEachIndexed { index, node -> if (node !is PreferenceHierarchyNode) return@forEachIndexed if (node.metadata.key == key) return this to index if (node.metadata.bindingKey == key) return this to index if (node is PreferenceHierarchy) { val result = node.findPreference(key) if (result != null) return result Loading Loading @@ -346,7 +346,7 @@ class PreferenceHierarchy : PreferenceHierarchyNode { * Note: sub async hierarchy will not be searched, use [findAsync] if needed. */ fun find(key: String): PreferenceMetadata? { if (metadata.key == key) return metadata if (metadata.bindingKey == key) return metadata for (child in children) { if (child is Deferred<*>) continue if (child is PreferenceHierarchy) { Loading @@ -354,7 +354,7 @@ class PreferenceHierarchy : PreferenceHierarchyNode { if (result != null) return result } else { child as PreferenceHierarchyNode if (child.metadata.key == key) return child.metadata if (child.metadata.bindingKey == key) return child.metadata } } return null Loading
packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt +4 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,10 @@ interface PreferenceMetadata { /** Preference key. */ val key: String /** Preference key when attached to preference hierarchy. */ val bindingKey: String get() = key /** * Preference title resource id. * Loading
packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceScreenMetadata.kt +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import kotlinx.coroutines.flow.Flow * For parameterized preference screen that relies on additional information (e.g. package name, * language code) to build its content, the subclass must: * - override [arguments] in constructor * - override [bindingKey] to distinguish the preferences on the preference hierarchy * - add a static method `fun parameters(context: Context): Flow<Bundle>` (context is optional) to * provide all possible arguments */ Loading