Loading packages/SettingsLib/Graph/graph.proto +3 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,9 @@ message PreferenceProto { 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 { Loading packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt +23 −16 Original line number Diff line number Diff line Loading @@ -51,9 +51,9 @@ import com.android.settingslib.metadata.PreferenceSummaryProvider 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" Loading Loading @@ -140,7 +140,7 @@ private constructor(private val context: Context, private val request: GetPrefer addPreferenceScreen(metadata.key) { preferenceScreenProto { completeHierarchy = metadata.hasCompleteHierarchy() root = metadata.getPreferenceHierarchy(context).toProto(true) root = metadata.getPreferenceHierarchy(context).toProto(metadata, true) } } Loading Loading @@ -237,23 +237,29 @@ private constructor(private val context: Context, private val request: GetPrefer this@toProto.intent?.let { actionTarget = it.toActionTarget() } } private suspend fun PreferenceHierarchy.toProto(isRoot: Boolean): PreferenceGroupProto = preferenceGroupProto { preference = toProto(this@toProto, isRoot) 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(false) group = it.toProto(screenMetadata, false) } else { preference = toProto(it, false) 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 } Loading Loading @@ -291,6 +297,7 @@ private constructor(private val context: Context, private val request: GetPrefer @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? { Loading packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt +9 −2 Original line number Diff line number Diff line Loading @@ -162,8 +162,8 @@ interface PreferenceMetadata { /** * Returns the preference icon. * * Implement [PreferenceIconProvider] interface if icon content is provided dynamically * (e.g. icon is provided based on flag value). * Implement [PreferenceIconProvider] interface if icon is provided dynamically (e.g. icon is * provided based on flag value). */ fun getPreferenceIcon(context: Context): Int = when { Loading Loading @@ -212,4 +212,11 @@ interface PreferenceScreenMetadata : PreferenceMetadata { * conditions. DO NOT check any condition (except compile time flag) before adding a preference. */ fun getPreferenceHierarchy(context: Context): PreferenceHierarchy /** * Returns the [Intent] to show current preference screen. * * @param metadata the preference to locate when show the screen */ fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?): Intent? = null } Loading
packages/SettingsLib/Graph/graph.proto +3 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,9 @@ message PreferenceProto { 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 { Loading
packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt +23 −16 Original line number Diff line number Diff line Loading @@ -51,9 +51,9 @@ import com.android.settingslib.metadata.PreferenceSummaryProvider 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" Loading Loading @@ -140,7 +140,7 @@ private constructor(private val context: Context, private val request: GetPrefer addPreferenceScreen(metadata.key) { preferenceScreenProto { completeHierarchy = metadata.hasCompleteHierarchy() root = metadata.getPreferenceHierarchy(context).toProto(true) root = metadata.getPreferenceHierarchy(context).toProto(metadata, true) } } Loading Loading @@ -237,23 +237,29 @@ private constructor(private val context: Context, private val request: GetPrefer this@toProto.intent?.let { actionTarget = it.toActionTarget() } } private suspend fun PreferenceHierarchy.toProto(isRoot: Boolean): PreferenceGroupProto = preferenceGroupProto { preference = toProto(this@toProto, isRoot) 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(false) group = it.toProto(screenMetadata, false) } else { preference = toProto(it, false) 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 } Loading Loading @@ -291,6 +297,7 @@ private constructor(private val context: Context, private val request: GetPrefer @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? { Loading
packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceMetadata.kt +9 −2 Original line number Diff line number Diff line Loading @@ -162,8 +162,8 @@ interface PreferenceMetadata { /** * Returns the preference icon. * * Implement [PreferenceIconProvider] interface if icon content is provided dynamically * (e.g. icon is provided based on flag value). * Implement [PreferenceIconProvider] interface if icon is provided dynamically (e.g. icon is * provided based on flag value). */ fun getPreferenceIcon(context: Context): Int = when { Loading Loading @@ -212,4 +212,11 @@ interface PreferenceScreenMetadata : PreferenceMetadata { * conditions. DO NOT check any condition (except compile time flag) before adding a preference. */ fun getPreferenceHierarchy(context: Context): PreferenceHierarchy /** * Returns the [Intent] to show current preference screen. * * @param metadata the preference to locate when show the screen */ fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?): Intent? = null }