Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3092a89d authored by Zekan Qian's avatar Zekan Qian
Browse files

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
parent 493d0f3d
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -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)"
    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")
    }
}
 No newline at end of file
+11 −7
Original line number Diff line number Diff line
@@ -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)
    }
}
+15 −12
Original line number Diff line number Diff line
@@ -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,22 +40,22 @@ internal fun SettingsPageProvider.PageEvent(arguments: Bundle? = null) {
    val navController = LocalNavController.current
    DisposableEffect(lifecycleOwner) {
        val observer = LifecycleEventObserver { _, event ->
            val spaLogger = SpaEnvironmentFactory.instance.logger
            if (event == Lifecycle.Event.ON_START) {
                spaLogger.event(
                    page.id,
                    LogEvent.PAGE_ENTER,
            val logPageEvent: (event: LogEvent) -> Unit = {
                SpaEnvironmentFactory.instance.logger.event(
                    id = page.id,
                    event = it,
                    category = LogCategory.FRAMEWORK,
                    details = navController.sessionSourceName ?: page.displayName,
                    extraData = bundleOf(
                        LOG_DATA_DISPLAY_NAME to page.displayName,
                        LOG_DATA_SESSION_NAME to navController.sessionSourceName,
                    )
            } else if (event == Lifecycle.Event.ON_STOP) {
                spaLogger.event(
                    page.id,
                    LogEvent.PAGE_LEAVE,
                    category = LogCategory.FRAMEWORK,
                    details = navController.sessionSourceName ?: page.displayName,
                )
            }
            if (event == Lifecycle.Event.ON_START) {
                logPageEvent(LogEvent.PAGE_ENTER)
            } else if (event == Lifecycle.Event.ON_STOP) {
                logPageEvent(LogEvent.PAGE_LEAVE)
            }
        }

        // Add the observer to the lifecycle
+1 −1
Original line number Diff line number Diff line
@@ -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
    }