summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt19
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt23
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt4
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsScaffold.kt2
-rw-r--r--packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListModel.kt8
-rw-r--r--packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt8
6 files changed, 50 insertions, 14 deletions
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
index 6a7b17ab1b27..e8d1ea2c7680 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt
@@ -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"
}
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt
index c68d5de0d7c7..32ef0bb3d19b 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/compose/NavControllerWrapper.kt
@@ -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()
}
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt
index c9602543b364..b8e43609708d 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/Actions.kt
@@ -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()
}
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsScaffold.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsScaffold.kt
index ee453f246623..8b530b0d7b9b 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsScaffold.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/scaffold/SettingsScaffold.kt
@@ -49,7 +49,7 @@ fun SettingsScaffold(
modifier = Modifier.padding(SettingsDimension.itemPaddingAround),
)
},
- navigationIcon = { NavigateUp() },
+ navigationIcon = { NavigateBack() },
actions = actions,
colors = settingsTopAppBarColors(),
)
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListModel.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListModel.kt
index e1354bdd9871..a2848392a2f0 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListModel.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListModel.kt
@@ -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
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt
index 6d00d56e6952..a4d9058fde4d 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/template/app/TogglePermissionAppListPage.kt
@@ -75,8 +75,14 @@ internal class TogglePermissionAppListPageProvider(
}
companion object {
+ /**
+ * Gets the route to this page.
+ *
+ * Expose route to enable enter from non-SPA pages.
+ */
+ internal fun getRoute(permissionType: String) = "$NAME/$permissionType"
@Composable
- internal fun navigator(permissionType: String) = navigator(route = "$NAME/$permissionType")
+ internal fun navigator(permissionType: String) = navigator(route = getRoute(permissionType))
}
}