summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/debug/DebugFormat.kt2
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt20
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt2
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/EntryLogger.kt7
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt5
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/Parameter.kt7
-rw-r--r--packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/framework/util/ParameterTest.kt7
-rw-r--r--packages/SettingsLib/Spa/tests/src/com/android/settingslib/spa/tests/testutils/UniqueIdHelper.kt2
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()
}