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

Commit 3d0a6c17 authored by Zekan Qian's avatar Zekan Qian Committed by Android (Google) Code Review
Browse files

Merge "Support extraData in SpaLogger API."

parents f7aaff32 3092a89d
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
    }