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

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

Merge "Improve runtime parameter support. 1. Define runtime parameter as...

Merge "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."
parents 9d8f4ade 18a595d0
Loading
Loading
Loading
Loading
+2 −13
Original line number Original line Diff line number Diff line
@@ -18,14 +18,11 @@ package com.android.settingslib.spa.gallery.home


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


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


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


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


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


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

        InitialDestinationNavigator(navController)
    }
    }


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


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