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

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

Merge "Add SpaLogger."

parents 7dbd3423 9badf3d8
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settingslib.spa.gallery

import com.android.settingslib.spa.framework.common.LocalLogger
import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository
import com.android.settingslib.spa.framework.common.SpaEnvironment
import com.android.settingslib.spa.framework.common.createSettingsPage
@@ -75,4 +76,6 @@ object GallerySpaEnvironment : SpaEnvironment() {
    override val browseActivityClass = GalleryMainActivity::class.java

    override val entryProviderAuthorities = "com.android.spa.gallery.provider"

    override val logger = LocalLogger()
}
+6 −6
Original line number Diff line number Diff line
@@ -17,13 +17,13 @@
package com.android.settingslib.spa.gallery.page

import android.os.Bundle
import android.util.Log
import androidx.compose.runtime.Composable
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavType
import androidx.navigation.navArgument
import com.android.settingslib.spa.framework.common.EntrySearchData
import com.android.settingslib.spa.framework.common.PageModel
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.stateOf
import com.android.settingslib.spa.framework.util.getIntArg
@@ -32,6 +32,8 @@ import com.android.settingslib.spa.framework.util.navLink
import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
import com.android.settingslib.spa.widget.preference.PreferenceModel

private const val TAG = "ArgumentPageModel"

// Defines all the resources for this page.
// In real Settings App, resources data is defined in xml, rather than SPP.
private const val PAGE_TITLE = "Sample page with arguments"
@@ -93,7 +95,9 @@ class ArgumentPageModel : PageModel() {
    private var intParam: Int? = null

    override fun initialize(arguments: Bundle?) {
        logMsg("init with args " + arguments.toString())
        SpaEnvironmentFactory.instance.logger.message(
            TAG, "Initialize with args " + arguments.toString()
        )
        this.arguments = arguments
        stringParam = parameter.getStringArg(STRING_PARAM_NAME, arguments)
        intParam = parameter.getIntArg(INT_PARAM_NAME, arguments)
@@ -135,7 +139,3 @@ class ArgumentPageModel : PageModel() {
        }
    }
}

private fun logMsg(message: String) {
    Log.d("ArgumentPageModel", message)
}
+8 −5
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.settingslib.spa.framework.common.EntrySearchData
import com.android.settingslib.spa.framework.common.SettingsEntry
import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.framework.compose.toState
import com.android.settingslib.spa.framework.theme.SettingsTheme
@@ -44,13 +45,14 @@ import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Compan
import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.SIMPLE_PREFERENCE_KEYWORDS
import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.SIMPLE_PREFERENCE_SUMMARY
import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.SIMPLE_PREFERENCE_TITLE
import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.logMsg
import com.android.settingslib.spa.widget.preference.Preference
import com.android.settingslib.spa.widget.preference.PreferenceModel
import com.android.settingslib.spa.widget.preference.SimplePreferenceMacro
import com.android.settingslib.spa.widget.scaffold.RegularScaffold
import com.android.settingslib.spa.widget.ui.SettingsIcon

private const val TAG = "PreferencePage"

object PreferencePageProvider : SettingsPageProvider {
    // Defines all entry name in this page.
    // Note that entry name would be used in log. DO NOT change it once it is set.
@@ -67,6 +69,7 @@ object PreferencePageProvider : SettingsPageProvider {

    override val name = SettingsPageProviderEnum.PREFERENCE.name
    override val displayName = SettingsPageProviderEnum.PREFERENCE.displayName
    private val spaLogger = SpaEnvironmentFactory.instance.logger
    private val owner = createSettingsPage()

    private fun createEntry(entry: EntryEnum): SettingsEntryBuilder {
@@ -79,7 +82,7 @@ object PreferencePageProvider : SettingsPageProvider {
            createEntry(EntryEnum.SIMPLE_PREFERENCE)
                .setIsAllowSearch(true)
                .setMacro {
                    logMsg("create macro for ${EntryEnum.SIMPLE_PREFERENCE}")
                    spaLogger.message(TAG, "create macro for ${EntryEnum.SIMPLE_PREFERENCE}")
                    SimplePreferenceMacro(title = SIMPLE_PREFERENCE_TITLE)
                }
                .build()
@@ -88,7 +91,7 @@ object PreferencePageProvider : SettingsPageProvider {
            createEntry(EntryEnum.SUMMARY_PREFERENCE)
                .setIsAllowSearch(true)
                .setMacro {
                    logMsg("create macro for ${EntryEnum.SUMMARY_PREFERENCE}")
                    spaLogger.message(TAG, "create macro for ${EntryEnum.SUMMARY_PREFERENCE}")
                    SimplePreferenceMacro(
                        title = SIMPLE_PREFERENCE_TITLE,
                        summary = SIMPLE_PREFERENCE_SUMMARY,
@@ -102,7 +105,7 @@ object PreferencePageProvider : SettingsPageProvider {
            createEntry(EntryEnum.DISABLED_PREFERENCE)
                .setIsAllowSearch(true)
                .setMacro {
                    logMsg("create macro for ${EntryEnum.DISABLED_PREFERENCE}")
                    spaLogger.message(TAG, "create macro for ${EntryEnum.DISABLED_PREFERENCE}")
                    SimplePreferenceMacro(
                        title = DISABLE_PREFERENCE_TITLE,
                        summary = DISABLE_PREFERENCE_SUMMARY,
@@ -188,7 +191,7 @@ object PreferencePageProvider : SettingsPageProvider {
        return SettingsEntryBuilder.createInject(owner = owner)
            .setIsAllowSearch(true)
            .setMacro {
                logMsg("create macro for INJECT entry")
                spaLogger.message(TAG, "create macro for INJECT entry")
                SimplePreferenceMacro(
                    title = PAGE_TITLE,
                    clickRoute = SettingsPageProviderEnum.PREFERENCE.name
+13 −14
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.settingslib.spa.gallery.preference

import android.os.Bundle
import android.util.Log
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
@@ -27,11 +26,14 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import com.android.settingslib.spa.framework.common.PageModel
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

private const val TAG = "PreferencePageModel"

class PreferencePageModel : PageModel() {
    companion object {
        // Defines all the resources for this page.
@@ -53,12 +55,10 @@ class PreferencePageModel : PageModel() {
            pageModel.initOnce()
            return pageModel
        }

        fun logMsg(message: String) {
            Log.d("PreferencePageModel", message)
        }
    }

    private val spaLogger = SpaEnvironmentFactory.instance.logger

    private val asyncSummary = mutableStateOf(" ")

    private val manualUpdater = mutableStateOf(0)
@@ -67,26 +67,25 @@ class PreferencePageModel : PageModel() {
        private var tick = 0
        private var updateJob: Job? = null
        override fun onActive() {
            logMsg("autoUpdater.active")
            spaLogger.message(TAG, "autoUpdater.active")
            updateJob = viewModelScope.launch(Dispatchers.IO) {
                while (true) {
                    delay(1000L)
                    tick++
                    logMsg("autoUpdater.value $tick")
                    spaLogger.message(TAG, "autoUpdater.value $tick")
                    postValue(tick.toString())
                }
            }
        }

        override fun onInactive() {
            logMsg("autoUpdater.inactive")
            spaLogger.message(TAG, "autoUpdater.inactive")
            updateJob?.cancel()
        }
    }

    override fun initialize(arguments: Bundle?) {
        logMsg("init with args " + arguments.toString())

        spaLogger.message(TAG, "initialize with args " + arguments.toString())
        viewModelScope.launch(Dispatchers.IO) {
            delay(2000L)
            asyncSummary.value = ASYNC_PREFERENCE_SUMMARY
@@ -94,22 +93,22 @@ class PreferencePageModel : PageModel() {
    }

    fun getAsyncSummary(): State<String> {
        logMsg("getAsyncSummary")
        spaLogger.message(TAG, "getAsyncSummary")
        return asyncSummary
    }

    fun getManualUpdaterSummary(): State<String> {
        logMsg("getManualUpdaterSummary")
        spaLogger.message(TAG, "getManualUpdaterSummary")
        return derivedStateOf { manualUpdater.value.toString() }
    }

    fun manualUpdaterOnClick() {
        logMsg("manualUpdaterOnClick")
        spaLogger.message(TAG, "manualUpdaterOnClick")
        manualUpdater.value = manualUpdater.value + 1
    }

    fun getAutoUpdaterSummary(): LiveData<String> {
        logMsg("getAutoUpdaterSummary")
        spaLogger.message(TAG, "getAutoUpdaterSummary")
        return autoUpdater
    }
}
+43 −6
Original line number Diff line number Diff line
@@ -17,20 +17,25 @@
package com.android.settingslib.spa.framework

import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.android.settingslib.spa.R
import com.android.settingslib.spa.framework.common.LogCategory
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.framework.compose.LocalNavController
import com.android.settingslib.spa.framework.compose.NavControllerWrapperImpl
import com.android.settingslib.spa.framework.compose.localNavController
@@ -62,7 +67,7 @@ open class BrowseActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        setTheme(R.style.Theme_SpaLib_DayNight)
        super.onCreate(savedInstanceState)
        Log.d(TAG, "onCreate")
        spaEnvironment.logger.message(TAG, "onCreate", category = LogCategory.FRAMEWORK)

        setContent {
            SettingsTheme {
@@ -78,11 +83,43 @@ open class BrowseActivity : ComponentActivity() {
        CompositionLocalProvider(navController.localNavController()) {
            NavHost(navController, NULL_PAGE_NAME) {
                composable(NULL_PAGE_NAME) {}
                for (page in sppRepository.getAllProviders()) {
                for (spp in sppRepository.getAllProviders()) {
                    composable(
                        route = page.name + page.parameter.navRoute(),
                        arguments = page.parameter,
                    ) { navBackStackEntry -> page.Page(navBackStackEntry.arguments) }
                        route = spp.name + spp.parameter.navRoute(),
                        arguments = spp.parameter,
                    ) { navBackStackEntry ->
                        val lifecycleOwner = LocalLifecycleOwner.current
                        val spaLogger = spaEnvironment.logger
                        val sp = spp.createSettingsPage(arguments = navBackStackEntry.arguments)

                        DisposableEffect(lifecycleOwner) {
                            val observer = LifecycleEventObserver { _, event ->
                                if (event == Lifecycle.Event.ON_START) {
                                    spaLogger.event(
                                        sp.id,
                                        "enter page ${sp.formatDisplayTitle()}",
                                        category = LogCategory.FRAMEWORK
                                    )
                                } else if (event == Lifecycle.Event.ON_STOP) {
                                    spaLogger.event(
                                        sp.id,
                                        "leave page ${sp.formatDisplayTitle()}",
                                        category = LogCategory.FRAMEWORK
                                    )
                                }
                            }

                            // Add the observer to the lifecycle
                            lifecycleOwner.lifecycle.addObserver(observer)

                            // When the effect leaves the Composition, remove the observer
                            onDispose {
                                lifecycleOwner.lifecycle.removeObserver(observer)
                            }
                        }

                        spp.Page(navBackStackEntry.arguments)
                    }
                }
            }
            InitialDestinationNavigator()
Loading