[Catalyst] Provide launch intent for preference graph
Bug: 373895400
Flag: com.android.settings.flags.catalyst
Test: manual
Change-Id: I9dd9b25082192eb0c91fd5205d938fef8be1fa81
diff --git a/packages/SettingsLib/Graph/graph.proto b/packages/SettingsLib/Graph/graph.proto
index e93d756..cbe602e 100644
--- a/packages/SettingsLib/Graph/graph.proto
+++ b/packages/SettingsLib/Graph/graph.proto
@@ -74,6 +74,9 @@
optional ActionTarget action_target = 12;
// Preference value (if present, it means `persistent` is true).
optional PreferenceValueProto value = 13;
+ // Intent to show and locate the preference (might have highlight animation on
+ // the preference).
+ optional IntentProto launch_intent = 14;
// 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 5e78a29..9cb872a 100644
--- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt
+++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt
@@ -51,9 +51,9 @@
import com.android.settingslib.metadata.PreferenceTitleProvider
import com.android.settingslib.preference.PreferenceScreenFactory
import com.android.settingslib.preference.PreferenceScreenProvider
+import java.util.Locale
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
-import java.util.Locale
private const val TAG = "PreferenceGraphBuilder"
@@ -140,7 +140,7 @@
addPreferenceScreen(metadata.key) {
preferenceScreenProto {
completeHierarchy = metadata.hasCompleteHierarchy()
- root = metadata.getPreferenceHierarchy(context).toProto(true)
+ root = metadata.getPreferenceHierarchy(context).toProto(metadata, true)
}
}
@@ -237,23 +237,29 @@
this@toProto.intent?.let { actionTarget = it.toActionTarget() }
}
- private suspend fun PreferenceHierarchy.toProto(isRoot: Boolean): PreferenceGroupProto =
- preferenceGroupProto {
- preference = toProto(this@toProto, isRoot)
- forEachAsync {
- addPreferences(
- preferenceOrGroupProto {
- if (it is PreferenceHierarchy) {
- group = it.toProto(false)
- } else {
- preference = toProto(it, false)
- }
+ private suspend fun PreferenceHierarchy.toProto(
+ screenMetadata: PreferenceScreenMetadata,
+ isRoot: Boolean,
+ ): PreferenceGroupProto = preferenceGroupProto {
+ preference = toProto(screenMetadata, this@toProto, isRoot)
+ forEachAsync {
+ addPreferences(
+ preferenceOrGroupProto {
+ if (it is PreferenceHierarchy) {
+ group = it.toProto(screenMetadata, false)
+ } else {
+ preference = toProto(screenMetadata, it, false)
}
- )
- }
+ }
+ )
}
+ }
- private suspend fun toProto(node: PreferenceHierarchyNode, isRoot: Boolean) = preferenceProto {
+ private suspend fun toProto(
+ screenMetadata: PreferenceScreenMetadata,
+ node: PreferenceHierarchyNode,
+ isRoot: Boolean,
+ ) = preferenceProto {
val metadata = node.metadata
key = metadata.key
metadata.getTitleTextProto(isRoot)?.let { title = it }
@@ -291,6 +297,7 @@
@Suppress("CheckReturnValue") addPreferenceScreenMetadata(metadata)
}
metadata.intent(context)?.let { actionTarget = it.toActionTarget() }
+ screenMetadata.getLaunchIntent(context, metadata)?.let { launchIntent = it.toProto() }
}
private fun PreferenceMetadata.getTitleTextProto(isRoot: Boolean): TextProto? {