Support extraData in SpaLogger API.

Add session_name / switch_status / display_name as extraData.

Bug: 253979024
Test: unit-test & local build gallery
Change-Id: I8106ba3e0dd4e1eab922087c86aca0b62e6a2089
This commit is contained in:
Zekan Qian
2022-12-01 10:00:22 +08:00
parent 493d0f3d2f
commit 3092a89dbe
4 changed files with 38 additions and 27 deletions

View File

@@ -16,6 +16,7 @@
package com.android.settingslib.spa.framework.common
import android.os.Bundle
import android.util.Log
// Defines the category of the log, for quick filter
@@ -38,10 +39,13 @@ enum class LogEvent {
// Entry related events.
ENTRY_CLICK,
ENTRY_SWITCH_ON,
ENTRY_SWITCH_OFF,
ENTRY_SWITCH,
}
internal const val LOG_DATA_DISPLAY_NAME = "name"
internal const val LOG_DATA_SESSION_NAME = "session"
internal const val LOG_DATA_SWITCH_STATUS = "switch"
/**
* The interface of logger in Spa
*/
@@ -54,7 +58,7 @@ interface SpaLogger {
id: String,
event: LogEvent,
category: LogCategory = LogCategory.DEFAULT,
details: String? = null
extraData: Bundle = Bundle.EMPTY
) {
}
}
@@ -64,8 +68,8 @@ class LocalLogger : SpaLogger {
Log.d("SpaMsg-$category", "[$tag] $msg")
}
override fun event(id: String, event: LogEvent, category: LogCategory, details: String?) {
val extraMsg = if (details == null) "" else " ($details)"
Log.d("SpaEvent-$category", "[$id] $event$extraMsg")
override fun event(id: String, event: LogEvent, category: LogCategory, extraData: Bundle) {
val extraMsg = extraData.toString().removeRange(0, 6)
Log.d("SpaEvent-$category", "[$id] $event $extraMsg")
}
}

View File

@@ -16,17 +16,22 @@
package com.android.settingslib.spa.framework.util
import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.core.os.bundleOf
import com.android.settingslib.spa.framework.common.LOG_DATA_SWITCH_STATUS
import com.android.settingslib.spa.framework.common.LocalEntryDataProvider
import com.android.settingslib.spa.framework.common.LogCategory
import com.android.settingslib.spa.framework.common.LogEvent
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
@Composable
fun logEntryEvent(): (event: LogEvent) -> Unit {
val entryId = LocalEntryDataProvider.current.entryId ?: return {}
return {
SpaEnvironmentFactory.instance.logger.event(entryId, it, category = LogCategory.VIEW)
fun logEntryEvent(): (event: LogEvent, extraData: Bundle) -> Unit {
val entryId = LocalEntryDataProvider.current.entryId ?: return { _, _ -> }
return { event, extraData ->
SpaEnvironmentFactory.instance.logger.event(
entryId, event, category = LogCategory.VIEW, extraData = extraData
)
}
}
@@ -35,7 +40,7 @@ fun wrapOnClickWithLog(onClick: (() -> Unit)?): (() -> Unit)? {
if (onClick == null) return null
val logEvent = logEntryEvent()
return {
logEvent(LogEvent.ENTRY_CLICK)
logEvent(LogEvent.ENTRY_CLICK, Bundle.EMPTY)
onClick()
}
}
@@ -45,8 +50,7 @@ fun wrapOnSwitchWithLog(onSwitch: ((checked: Boolean) -> Unit)?): ((checked: Boo
if (onSwitch == null) return null
val logEvent = logEntryEvent()
return {
val event = if (it) LogEvent.ENTRY_SWITCH_ON else LogEvent.ENTRY_SWITCH_OFF
logEvent(event)
logEvent(LogEvent.ENTRY_SWITCH, bundleOf(LOG_DATA_SWITCH_STATUS to it))
onSwitch(it)
}
}

View File

@@ -21,8 +21,11 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.core.os.bundleOf
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import com.android.settingslib.spa.framework.common.LOG_DATA_DISPLAY_NAME
import com.android.settingslib.spa.framework.common.LOG_DATA_SESSION_NAME
import com.android.settingslib.spa.framework.common.LogCategory
import com.android.settingslib.spa.framework.common.LogEvent
import com.android.settingslib.spa.framework.common.SettingsPageProvider
@@ -37,21 +40,21 @@ internal fun SettingsPageProvider.PageEvent(arguments: Bundle? = null) {
val navController = LocalNavController.current
DisposableEffect(lifecycleOwner) {
val observer = LifecycleEventObserver { _, event ->
val spaLogger = SpaEnvironmentFactory.instance.logger
val logPageEvent: (event: LogEvent) -> Unit = {
SpaEnvironmentFactory.instance.logger.event(
id = page.id,
event = it,
category = LogCategory.FRAMEWORK,
extraData = bundleOf(
LOG_DATA_DISPLAY_NAME to page.displayName,
LOG_DATA_SESSION_NAME to navController.sessionSourceName,
)
)
}
if (event == Lifecycle.Event.ON_START) {
spaLogger.event(
page.id,
LogEvent.PAGE_ENTER,
category = LogCategory.FRAMEWORK,
details = navController.sessionSourceName ?: page.displayName,
)
logPageEvent(LogEvent.PAGE_ENTER)
} else if (event == Lifecycle.Event.ON_STOP) {
spaLogger.event(
page.id,
LogEvent.PAGE_LEAVE,
category = LogCategory.FRAMEWORK,
details = navController.sessionSourceName ?: page.displayName,
)
logPageEvent(LogEvent.PAGE_LEAVE)
}
}

View File

@@ -51,7 +51,7 @@ class SpaLoggerForTest : SpaLogger {
messageCount[key] = (messageCount[key] ?: 0) + 1
}
override fun event(id: String, event: LogEvent, category: LogCategory, details: String?) {
override fun event(id: String, event: LogEvent, category: LogCategory, extraData: Bundle) {
val key = EventCountKey(id, event, category)
eventCount[key] = (eventCount[key] ?: 0) + 1
}