Add samples for popUpTo and singleTop
Adding samples for the new NavOptions feature.
Test: tested in demo app
Bug: 171468994
Change-Id: Ibff40345ca8562549d8580b9b04b0955035fba1c
diff --git a/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/NavPopUpToDemo.kt b/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/NavPopUpToDemo.kt
new file mode 100644
index 0000000..fd00b02
--- /dev/null
+++ b/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/NavPopUpToDemo.kt
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.navigation.compose.demos
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.Button
+import androidx.compose.material.ButtonConstants
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
+import androidx.navigation.compose.NavHost
+import androidx.navigation.compose.composable
+import androidx.navigation.compose.navigate
+import androidx.navigation.compose.popUpTo
+import androidx.navigation.compose.rememberNavController
+
+@Composable
+fun NavPopUpToDemo() {
+ val navController = rememberNavController()
+ NavHost(navController, startDestination = "1") {
+ composable("1") { NumberedScreen(navController, 1) }
+ composable("2") { NumberedScreen(navController, 2) }
+ composable("3") { NumberedScreen(navController, 3) }
+ composable("4") { NumberedScreen(navController, 4) }
+ composable("5") { NumberedScreen(navController, 5) }
+ }
+}
+
+@Composable
+fun NumberedScreen(navController: NavController, number: Int) {
+ Column(Modifier.fillMaxSize().then(Modifier.padding(8.dp))) {
+ val next = number + 1
+ if (number < 5) {
+ Button(
+ navController.navigate("$next") },
+ colors = ButtonConstants.defaultButtonColors(backgroundColor = Color.LightGray),
+ modifier = Modifier.fillMaxWidth()
+ ) {
+ Text(text = "Navigate to Screen $next")
+ }
+ }
+ Text("This is screen $number", Modifier.weight(1f))
+ if (navController.previousBackStackEntry != null) {
+ Button(
+ navController.navigate("1") { popUpTo("1") { inclusive = true } } },
+ colors = ButtonConstants.defaultButtonColors(backgroundColor = Color.LightGray),
+ modifier = Modifier.fillMaxWidth()
+ ) {
+ Text(text = "PopUpTo Screen 1")
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/NavSingleTopDemo.kt b/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/NavSingleTopDemo.kt
new file mode 100644
index 0000000..05f2abc
--- /dev/null
+++ b/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/NavSingleTopDemo.kt
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.navigation.compose.demos
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.Divider
+import androidx.compose.material.Text
+import androidx.compose.material.TextField
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.savedinstancestate.savedInstanceState
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.unit.dp
+import androidx.navigation.compose.NavHost
+import androidx.navigation.compose.composable
+import androidx.navigation.compose.navigate
+import androidx.navigation.compose.rememberNavController
+import androidx.navigation.compose.samples.NavigateButton
+
+@Composable
+fun NavSingleTopDemo() {
+ val navController = rememberNavController()
+ val query = savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
+ Column(Modifier.fillMaxSize().then(Modifier.padding(8.dp))) {
+ TextField(
+ value = query.value,
+ query.value = it },
+ placeholder = { Text("Search") }
+ )
+ NavigateButton("Search") {
+ navController.navigate("search/" + query.value.text) {
+ launchSingleTop = true
+ }
+ }
+ NavHost(navController, startDestination = "start") {
+ composable("start") { StartScreen() }
+ composable("search/{query}") { backStackEntry ->
+ SearchResultScreen(
+ backStackEntry.arguments!!.getString("query", "no query entered")
+ )
+ }
+ }
+ }
+}
+
+@Composable
+fun StartScreen() {
+ Divider(color = Color.Black)
+ Text(text = "Start a search above")
+}
+
+@Composable
+fun SearchResultScreen(query: String) {
+ Text("You searched for $query")
+}
diff --git a/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/NavigationDemos.kt b/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/NavigationDemos.kt
index 8c8b507..3e8b40e 100644
--- a/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/NavigationDemos.kt
+++ b/navigation/navigation-compose/integration-tests/navigation-demos/src/main/java/androidx/navigation/compose/demos/NavigationDemos.kt
@@ -25,6 +25,8 @@
ComposableDemo("Basic Nav Demo") { BasicNavDemo() },
ComposableDemo("Bottom Bar Nav Demo") { BottomBarNavDemo() },
ComposableDemo("Navigation with Args") { NavWithArgsDemo() },
- ComposableDemo("Navigation by DeepLink") { NavByDeepLinkDemo() }
+ ComposableDemo("Navigation by DeepLink") { NavByDeepLinkDemo() },
+ ComposableDemo("Navigation PopUpTo") { NavPopUpToDemo() },
+ ComposableDemo("Navigation SingleTop") { NavSingleTopDemo() }
)
)