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

Commit ec5defee authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "Support navigate with param to SpaActivity"

parents 8b6a7d63 f329c668
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
@@ -46,12 +48,11 @@ open class BrowseActivity(

    @Composable
    private fun MainContent() {
        val startDestination =
            intent?.getStringExtra(KEY_START_DESTINATION) ?: sppRepository.getDefaultStartPageName()
        val destination = intent?.getStringExtra(KEY_DESTINATION)

        val navController = rememberNavController()
        CompositionLocalProvider(navController.localNavController()) {
            NavHost(navController, startDestination) {
            NavHost(navController, sppRepository.getDefaultStartPageName()) {
                for (page in sppRepository.getAllProviders()) {
                    composable(
                        route = page.route,
@@ -61,6 +62,16 @@ open class BrowseActivity(
                    }
                }
            }

            if (!destination.isNullOrEmpty()) {
                LaunchedEffect(Unit) {
                    navController.navigate(destination) {
                        popUpTo(navController.graph.findStartDestination().id) {
                            inclusive = true
                        }
                    }
                }
            }
        }
    }

@@ -68,6 +79,6 @@ open class BrowseActivity(
        get() = name + arguments.joinToString("") { argument -> "/{${argument.name}}" }

    companion object {
        const val KEY_START_DESTINATION = "spa:SpaActivity:startDestination"
        const val KEY_DESTINATION = "spa:SpaActivity:destination"
    }
}
+17 −6
Original line number Diff line number Diff line
@@ -16,25 +16,35 @@

package com.android.settingslib.spa.framework.compose

import androidx.activity.OnBackPressedDispatcher
import androidx.activity.compose.LocalOnBackPressedDispatcherOwner
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ProvidedValue
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.remember
import androidx.navigation.NavHostController

interface NavControllerWrapper {
    fun navigate(route: String)
    fun navigateUp()
    fun navigateBack()
}

@Composable
fun NavHostController.localNavController() =
    LocalNavController provides remember { NavControllerWrapperImpl(this) }
fun NavHostController.localNavController(): ProvidedValue<NavControllerWrapper> {
    val onBackPressedDispatcherOwner = LocalOnBackPressedDispatcherOwner.current
    return LocalNavController provides remember {
        NavControllerWrapperImpl(
            navController = this,
            onBackPressedDispatcher = onBackPressedDispatcherOwner?.onBackPressedDispatcher,
        )
    }
}

val LocalNavController = compositionLocalOf<NavControllerWrapper> {
    object : NavControllerWrapper {
        override fun navigate(route: String) {}

        override fun navigateUp() {}
        override fun navigateBack() {}
    }
}

@@ -46,12 +56,13 @@ fun navigator(route: String): () -> Unit {

internal class NavControllerWrapperImpl(
    private val navController: NavHostController,
    private val onBackPressedDispatcher: OnBackPressedDispatcher?,
) : NavControllerWrapper {
    override fun navigate(route: String) {
        navController.navigate(route)
    }

    override fun navigateUp() {
        navController.navigateUp()
    override fun navigateBack() {
        onBackPressedDispatcher?.onBackPressed()
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -26,13 +26,13 @@ import androidx.compose.ui.res.stringResource
import com.android.settingslib.spa.framework.compose.LocalNavController

@Composable
internal fun NavigateUp() {
internal fun NavigateBack() {
    val navController = LocalNavController.current
    val contentDescription = stringResource(
        id = androidx.appcompat.R.string.abc_action_bar_up_description,
    )
    BackAction(contentDescription) {
        navController.navigateUp()
        navController.navigateBack()
    }
}

+1 −1
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ fun SettingsScaffold(
                        modifier = Modifier.padding(SettingsDimension.itemPaddingAround),
                    )
                },
                navigationIcon = { NavigateUp() },
                navigationIcon = { NavigateBack() },
                actions = actions,
                colors = settingsTopAppBarColors(),
            )
+8 −0
Original line number Diff line number Diff line
@@ -68,6 +68,14 @@ interface TogglePermissionAppListModelFactory {
            }
        )
    }

    /**
     * Gets the route to the toggle permission App List page.
     *
     * Expose route to enable enter from non-SPA pages.
     */
    fun getRoute(permissionType: String): String =
        TogglePermissionAppListPageProvider.getRoute(permissionType)
}

@Composable
Loading