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

Commit 18a595d0 authored by Zekan Qian's avatar Zekan Qian
Browse files

Improve runtime parameter support.

1. Define runtime parameter as prefixed by "rt_"
2. Move entry highlight parameter into intent as Extra, instead of a runtime parameter.

Bug: 244122804
Test: manual - build Gallery
Change-Id: Ic8945d32868173f30c31afd5fe54b2ba12fad6e4
parent 8dce333c
Loading
Loading
Loading
Loading
+2 −13
Original line number Diff line number Diff line
@@ -18,14 +18,11 @@ package com.android.settingslib.spa.gallery.home

import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.common.SettingsEntry
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.getRuntimeArguments
import com.android.settingslib.spa.framework.util.mergeArguments
import com.android.settingslib.spa.gallery.R
import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
import com.android.settingslib.spa.gallery.button.ActionButtonPageProvider
@@ -61,20 +58,12 @@ object HomePageProvider : SettingsPageProvider {

    @Composable
    override fun Page(arguments: Bundle?) {
        val globalRuntimeArgs = remember { getRuntimeArguments(arguments) }
        HomeScaffold(title = stringResource(R.string.app_name)) {
            for (entry in buildEntry(arguments)) {
                if (entry.owner.isCreateBy(SettingsPageProviderEnum.ARGUMENT.name)) {
                    entry.UiLayout(
                        mergeArguments(
                            listOf(
                                globalRuntimeArgs,
                                ArgumentPageModel.buildArgument(intParam = 0)
                            )
                        )
                    )
                    entry.UiLayout(ArgumentPageModel.buildArgument(intParam = 0))
                } else {
                    entry.UiLayout(globalRuntimeArgs)
                    entry.UiLayout()
                }
            }
        }
+2 −13
Original line number Diff line number Diff line
@@ -18,15 +18,12 @@ package com.android.settingslib.spa.gallery.page

import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.common.SettingsEntry
import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.getRuntimeArguments
import com.android.settingslib.spa.framework.util.mergeArguments
import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
import com.android.settingslib.spa.gallery.createSettingsPage
import com.android.settingslib.spa.widget.preference.Preference
@@ -101,20 +98,12 @@ object ArgumentPageProvider : SettingsPageProvider {

    @Composable
    override fun Page(arguments: Bundle?) {
        val globalRuntimeArgs = remember { getRuntimeArguments(arguments) }
        RegularScaffold(title = ArgumentPageModel.create(arguments).genPageTitle()) {
            for (entry in buildEntry(arguments)) {
                if (entry.toPage != null) {
                    entry.UiLayout(
                        mergeArguments(
                            listOf(
                                globalRuntimeArgs,
                                ArgumentPageModel.buildNextArgument(arguments)
                            )
                        )
                    )
                    entry.UiLayout(ArgumentPageModel.buildNextArgument(arguments))
                } else {
                    entry.UiLayout(globalRuntimeArgs)
                    entry.UiLayout()
                }
            }
        }
+1 −1
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ private const val PAGE_TITLE = "Sample page with arguments"
private const val STRING_PARAM_TITLE = "String param value"
private const val INT_PARAM_TITLE = "Int param value"
private const val STRING_PARAM_NAME = "stringParam"
private const val INT_PARAM_NAME = "intParam"
private const val INT_PARAM_NAME = "rt_intParam"
private val ARGUMENT_PAGE_KEYWORDS = listOf("argument keyword1", "argument keyword2")

class ArgumentPageModel : PageModel() {
+1 −3
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ 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.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.getRuntimeArguments
import com.android.settingslib.spa.gallery.SettingsPageProviderEnum
import com.android.settingslib.spa.gallery.createSettingsPage
import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.ASYNC_PREFERENCE_TITLE
@@ -178,10 +177,9 @@ object PreferencePageProvider : SettingsPageProvider {

    @Composable
    override fun Page(arguments: Bundle?) {
        val globalRuntimeArgs = remember { getRuntimeArguments(arguments) }
        RegularScaffold(title = PAGE_TITLE) {
            for (entry in buildEntry(arguments)) {
                entry.UiLayout(globalRuntimeArgs)
                entry.UiLayout()
            }
        }
    }
+12 −14
Original line number Diff line number Diff line
@@ -25,13 +25,13 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import com.android.settingslib.spa.R
import com.android.settingslib.spa.framework.common.SpaEnvironment
import com.android.settingslib.spa.framework.compose.LocalNavController
import com.android.settingslib.spa.framework.compose.NavControllerWrapperImpl
import com.android.settingslib.spa.framework.compose.localNavController
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.navRoute
@@ -70,31 +70,29 @@ open class BrowseActivity(spaEnvironment: SpaEnvironment) : ComponentActivity()
                composable(NULL_PAGE_NAME) {}
                for (page in sppRepository.getAllProviders()) {
                    composable(
                        route = page.name + page.parameter.navRoute() +
                            "?$HIGHLIGHT_ENTRY_PARAM_NAME={$HIGHLIGHT_ENTRY_PARAM_NAME}",
                        arguments = page.parameter + listOf(
                            // add optional parameters
                            navArgument(HIGHLIGHT_ENTRY_PARAM_NAME) { defaultValue = "null" }
                        ),
                    ) { navBackStackEntry ->
                        page.Page(navBackStackEntry.arguments)
                        route = page.name + page.parameter.navRoute(),
                        arguments = page.parameter,
                    ) { navBackStackEntry -> page.Page(navBackStackEntry.arguments)
                    }
                }
            }
            InitialDestinationNavigator()
        }

        InitialDestinationNavigator(navController)
    }

    @Composable
    private fun InitialDestinationNavigator(navController: NavHostController) {
    private fun InitialDestinationNavigator() {
        val destinationNavigated = rememberSaveable { mutableStateOf(false) }
        if (destinationNavigated.value) return
        destinationNavigated.value = true
        val controller = LocalNavController.current as NavControllerWrapperImpl
        LaunchedEffect(Unit) {
            val destination =
                intent?.getStringExtra(KEY_DESTINATION) ?: sppRepository.getDefaultStartPage()
            val highlightEntryId = intent?.getStringExtra(KEY_HIGHLIGHT_ENTRY)
            if (destination.isNotEmpty()) {
                controller.highlightId = highlightEntryId
                val navController = controller.navController
                navController.navigate(destination) {
                    popUpTo(navController.graph.findStartDestination().id) {
                        inclusive = true
@@ -106,6 +104,6 @@ open class BrowseActivity(spaEnvironment: SpaEnvironment) : ComponentActivity()

    companion object {
        const val KEY_DESTINATION = "spaActivityDestination"
        const val HIGHLIGHT_ENTRY_PARAM_NAME = "highlightEntry"
        const val KEY_HIGHLIGHT_ENTRY = "highlightEntry"
    }
}
Loading