Merge "Add arguments in Logger."
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user