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?,