Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt +15 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading @@ -61,6 +62,16 @@ open class BrowseActivity( } } } if (!destination.isNullOrEmpty()) { LaunchedEffect(Unit) { navController.navigate(destination) { popUpTo(navController.graph.findStartDestination().id) { inclusive = true } } } } } } Loading @@ -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" } } packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt +17 −6 Original line number Diff line number Diff line Loading @@ -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() {} } } Loading @@ -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() } } packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt +2 −2 Original line number Diff line number Diff line Loading @@ -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() } } Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsScaffold.kt +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ fun SettingsScaffold( modifier = Modifier.padding(SettingsDimension.itemPaddingAround), ) }, navigationIcon = { NavigateUp() }, navigationIcon = { NavigateBack() }, actions = actions, colors = settingsTopAppBarColors(), ) Loading packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListModel.kt +8 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt +15 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading @@ -61,6 +62,16 @@ open class BrowseActivity( } } } if (!destination.isNullOrEmpty()) { LaunchedEffect(Unit) { navController.navigate(destination) { popUpTo(navController.graph.findStartDestination().id) { inclusive = true } } } } } } Loading @@ -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" } }
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt +17 −6 Original line number Diff line number Diff line Loading @@ -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() {} } } Loading @@ -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() } }
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt +2 −2 Original line number Diff line number Diff line Loading @@ -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() } } Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsScaffold.kt +1 −1 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ fun SettingsScaffold( modifier = Modifier.padding(SettingsDimension.itemPaddingAround), ) }, navigationIcon = { NavigateUp() }, navigationIcon = { NavigateBack() }, actions = actions, colors = settingsTopAppBarColors(), ) Loading
packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListModel.kt +8 −0 Original line number Diff line number Diff line Loading @@ -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