Merge "Fix fillInLabel not encoded by NavType" into androidx-main
diff --git a/navigation/navigation-common/src/androidMain/kotlin/androidx/navigation/NavDestination.android.kt b/navigation/navigation-common/src/androidMain/kotlin/androidx/navigation/NavDestination.android.kt
index 8b04620..0a6c7c2 100644
--- a/navigation/navigation-common/src/androidMain/kotlin/androidx/navigation/NavDestination.android.kt
+++ b/navigation/navigation-common/src/androidMain/kotlin/androidx/navigation/NavDestination.android.kt
@@ -665,9 +665,9 @@
val argType = _arguments[argName]?.type
val argValue =
if (argType == NavType.ReferenceType) {
- context.getString(/* resId= */ args[argName] as Int)
+ context.getString(/* resId= */ NavType.ReferenceType[bundle!!, argName] as Int)
} else {
- args[argName].toString()
+ argType!![bundle!!, argName].toString()
}
builder.append(argValue)
}
diff --git a/navigation/navigation-ui/src/androidTest/java/androidx/navigation/ui/NavigationUITest.kt b/navigation/navigation-ui/src/androidTest/java/androidx/navigation/ui/NavigationUITest.kt
index fd38110..1209e27 100644
--- a/navigation/navigation-ui/src/androidTest/java/androidx/navigation/ui/NavigationUITest.kt
+++ b/navigation/navigation-ui/src/androidTest/java/androidx/navigation/ui/NavigationUITest.kt
@@ -27,6 +27,7 @@
import androidx.navigation.NavType
import androidx.navigation.createGraph
import androidx.navigation.ui.test.R
+import androidx.savedstate.SavedState
import androidx.test.annotation.UiThreadTest
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -218,6 +219,41 @@
assertThat(toolbar.title.toString()).isEqualTo(expected)
}
+ @UiThreadTest
+ @Test
+ fun navigateWithLabelEncodedByNavType() {
+ val context = ApplicationProvider.getApplicationContext<Context>()
+ val navController = NavHostController(context)
+ navController.navigatorProvider.addNavigator(TestNavigator())
+
+ val startDestination = "start_destination"
+ val endDestination = "end_destination"
+ val navType =
+ object : NavType<Int>(false) {
+ override fun put(bundle: SavedState, key: String, value: Int) {
+ IntType.put(bundle, key, value)
+ }
+
+ override fun get(bundle: SavedState, key: String): Int? = IntType[bundle, key]!! + 1
+
+ override fun parseValue(value: String): Int = IntType.parseValue(value)
+ }
+ navController.graph =
+ navController.createGraph(startDestination = startDestination) {
+ test(startDestination)
+ test("$endDestination/{test}") {
+ label = "{test}"
+ argument(name = "test") { type = navType }
+ }
+ }
+
+ val toolbar = Toolbar(context).apply { setupWithNavController(navController) }
+ val arg = 1
+ navController.navigate("$endDestination/$arg")
+
+ assertThat(toolbar.title.toString()).isEqualTo((arg + 1).toString())
+ }
+
private fun createToolbarOnDestinationChangedListener(
toolbar: Toolbar,
bundle: Bundle?,