summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jacky Wang <jiannan@google.com> 2025-02-03 14:48:07 +0800
committer Jacky Wang <jiannan@google.com> 2025-02-03 17:45:41 +0800
commite8279c01b1c87eb536142ec73381ad4d0730a991 (patch)
tree9fa19b96e765309480e90017e7795e44c07fece3
parent107fe807c3ee6265ea430f2a0ffe0b1f125d147a (diff)
[Catalyst] Add PreferenceMetadata.tags
The tag constants are for external usage, e.g. identify certain preference. Bug: 388061003 Flag: com.android.settings.flags.catalyst Test: N/A Change-Id: Ib42fbff9e5774e9a4776847cb31fd53ae24caa84
-rw-r--r--packages/SettingsLib/Graph/graph.proto2
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt1
-rw-r--r--packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt16
3 files changed, 18 insertions, 1 deletions
diff --git a/packages/SettingsLib/Graph/graph.proto b/packages/SettingsLib/Graph/graph.proto
index a834947144a0..ec287c1b65b7 100644
--- a/packages/SettingsLib/Graph/graph.proto
+++ b/packages/SettingsLib/Graph/graph.proto
@@ -93,6 +93,8 @@ message PreferenceProto {
optional PermissionsProto read_permissions = 17;
// The required permissions to write preference value.
optional PermissionsProto write_permissions = 18;
+ // Tag constants associated with the preference.
+ repeated string tags = 19;
// Target of an Intent
message ActionTarget {
diff --git a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt
index 4290437b0d02..e511bf1c175d 100644
--- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt
+++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt
@@ -412,6 +412,7 @@ fun PreferenceMetadata.toProto(
}
metadata.intent(context)?.let { actionTarget = it.toActionTarget(context) }
screenMetadata.getLaunchIntent(context, metadata)?.let { launchIntent = it.toProto() }
+ for (tag in metadata.tags(context)) addTags(tag)
}
persistent = metadata.isPersistent(context)
if (persistent) {
diff --git a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt
index 1e70a32cb38b..a8939ab0d902 100644
--- a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt
+++ b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt
@@ -89,11 +89,25 @@ interface PreferenceMetadata {
/**
* Return the extras Bundle object associated with this preference.
*
- * It is used to provide more information for metadata.
+ * It is used to provide more *internal* information for metadata. External app is not expected
+ * to use this information as it could be changed in future. Consider [tags] for external usage.
*/
fun extras(context: Context): Bundle? = null
/**
+ * Returns the tags associated with this preference.
+ *
+ * Unlike [extras], tags are exposed for external usage. The returned tag list must be constants
+ * and **append only**. Do not edit/delete existing tag strings as it can cause backward
+ * compatibility issue.
+ *
+ * Use cases:
+ * - identify a specific preference
+ * - identify a group of preferences related to network settings
+ */
+ fun tags(context: Context): Array<String> = arrayOf()
+
+ /**
* Returns if preference is indexable, default value is `true`.
*
* Return `false` only when the preference is always unavailable on current device. If it is