diff options
8 files changed, 33 insertions, 19 deletions
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/debug/DebugFormat.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/debug/DebugFormat.kt index 58736350dc7f..6ecf9c39c9fa 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/debug/DebugFormat.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/debug/DebugFormat.kt @@ -40,7 +40,7 @@ private fun EntryStatusData.debugContent(): String { } fun SettingsPage.debugArguments(): String { - val normArguments = parameter.normalize(arguments) + val normArguments = parameter.normalize(arguments, eraseRuntimeValues = true) if (normArguments == null || normArguments.isEmpty) return "[No arguments]" return normArguments.toString().removeRange(0, 6) } diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt index 702c07585be1..4985b44783e9 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt @@ -35,6 +35,8 @@ interface EntryData { get() = null val isHighlighted: Boolean get() = false + val arguments: Bundle? + get() = null } val LocalEntryDataProvider = @@ -121,11 +123,11 @@ data class SettingsEntry( } private fun fullArgument(runtimeArguments: Bundle? = null): Bundle { - val arguments = Bundle() - if (owner.arguments != null) arguments.putAll(owner.arguments) - // Put runtime args later, which can override page args. - if (runtimeArguments != null) arguments.putAll(runtimeArguments) - return arguments + return Bundle().apply { + if (owner.arguments != null) putAll(owner.arguments) + // Put runtime args later, which can override page args. + if (runtimeArguments != null) putAll(runtimeArguments) + } } fun getStatusData(runtimeArguments: Bundle? = null): EntryStatusData? { @@ -142,19 +144,21 @@ data class SettingsEntry( @Composable fun UiLayout(runtimeArguments: Bundle? = null) { - CompositionLocalProvider(provideLocalEntryData()) { - uiLayoutImpl(fullArgument(runtimeArguments)) + val arguments = remember { fullArgument(runtimeArguments) } + CompositionLocalProvider(provideLocalEntryData(arguments)) { + uiLayoutImpl(arguments) } } @Composable - fun provideLocalEntryData(): ProvidedValue<EntryData> { + fun provideLocalEntryData(arguments: Bundle): ProvidedValue<EntryData> { val controller = LocalNavController.current return LocalEntryDataProvider provides remember { object : EntryData { override val pageId = containerPage().id override val entryId = id override val isHighlighted = controller.highlightEntryId == id + override val arguments = arguments } } } diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt index 7a39b730342c..2bfa2a4375da 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt @@ -69,7 +69,7 @@ data class SettingsPage( parameter: List<NamedNavArgument> = emptyList(), arguments: Bundle? = null ): String { - val normArguments = parameter.normalize(arguments) + val normArguments = parameter.normalize(arguments, eraseRuntimeValues = true) return "$name:${normArguments?.toString()}".toHashId() } } diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/EntryLogger.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/EntryLogger.kt index 1c881878f751..8ff436866502 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/EntryLogger.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/EntryLogger.kt @@ -28,9 +28,12 @@ import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory @Composable fun logEntryEvent(): (event: LogEvent, extraData: Bundle) -> Unit { val entryId = LocalEntryDataProvider.current.entryId ?: return { _, _ -> } + val arguments = LocalEntryDataProvider.current.arguments return { event, extraData -> SpaEnvironmentFactory.instance.logger.event( - entryId, event, category = LogCategory.VIEW, extraData = extraData + entryId, event, category = LogCategory.VIEW, extraData = extraData.apply { + if (arguments != null) putAll(arguments) + } ) } } @@ -40,7 +43,7 @@ fun wrapOnClickWithLog(onClick: (() -> Unit)?): (() -> Unit)? { if (onClick == null) return null val logEvent = logEntryEvent() return { - logEvent(LogEvent.ENTRY_CLICK, Bundle.EMPTY) + logEvent(LogEvent.ENTRY_CLICK, bundleOf()) onClick() } } diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt index a88125472b52..271443e86dac 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt @@ -48,7 +48,10 @@ internal fun SettingsPageProvider.PageEvent(arguments: Bundle? = null) { extraData = bundleOf( LOG_DATA_DISPLAY_NAME to page.displayName, LOG_DATA_SESSION_NAME to navController.sessionSourceName, - ) + ).apply { + val normArguments = parameter.normalize(arguments) + if (normArguments != null) putAll(normArguments) + } ) } if (event == Lifecycle.Event.ON_START) { diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/Parameter.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/Parameter.kt index f10d3b097fc8..be303f09fb75 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/Parameter.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/Parameter.kt @@ -47,12 +47,15 @@ fun List<NamedNavArgument>.navLink(arguments: Bundle? = null): String { return argsArray.joinToString("") { arg -> "/$arg" } } -fun List<NamedNavArgument>.normalize(arguments: Bundle? = null): Bundle? { +fun List<NamedNavArgument>.normalize( + arguments: Bundle? = null, + eraseRuntimeValues: Boolean = false +): Bundle? { if (this.isEmpty()) return null val normArgs = Bundle() for (navArg in this) { // Erase value of runtime parameters. - if (navArg.isRuntimeParam()) { + if (navArg.isRuntimeParam() && eraseRuntimeValues) { normArgs.putString(navArg.name, null) continue } diff --git a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/ParameterTest.kt b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/ParameterTest.kt index 48ebd8d8ade8..0aa846c6f997 100644 --- a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/ParameterTest.kt +++ b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/ParameterTest.kt @@ -88,7 +88,7 @@ class ParameterTest { val emptyParam = navArguments.normalize() assertThat(emptyParam).isNotNull() assertThat(emptyParam.toString()).isEqualTo( - "Bundle[{rt_param=null, unset_string_param=null, unset_int_param=null}]" + "Bundle[{unset_rt_param=null, unset_string_param=null, unset_int_param=null}]" ) val setPartialParam = navArguments.normalize( @@ -99,7 +99,7 @@ class ParameterTest { ) assertThat(setPartialParam).isNotNull() assertThat(setPartialParam.toString()).isEqualTo( - "Bundle[{rt_param=null, string_param=myStr, unset_int_param=null}]" + "Bundle[{rt_param=rtStr, string_param=myStr, unset_int_param=null}]" ) val setAllParam = navArguments.normalize( @@ -107,7 +107,8 @@ class ParameterTest { "string_param" to "myStr", "int_param" to 10, "rt_param" to "rtStr", - ) + ), + eraseRuntimeValues = true ) assertThat(setAllParam).isNotNull() assertThat(setAllParam.toString()).isEqualTo( diff --git a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/tests/testutils/UniqueIdHelper.kt b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/tests/testutils/UniqueIdHelper.kt index 7e51fea69041..ce9b7917b769 100644 --- a/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/tests/testutils/UniqueIdHelper.kt +++ b/packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/tests/testutils/UniqueIdHelper.kt @@ -27,7 +27,7 @@ fun getUniquePageId( parameter: List<NamedNavArgument> = emptyList(), arguments: Bundle? = null ): String { - val normArguments = parameter.normalize(arguments) + val normArguments = parameter.normalize(arguments, eraseRuntimeValues = true) return "$name:${normArguments?.toString()}".toHashId() } |