Merge "Support extraData in SpaLogger API."
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user