Change NavType arrays to CollectionNavType

Test: ./gradlew navigation:navigation-common:cC
Bug: 188693139
Relnote: "NavType built-in arrays such as IntArray are now of type CollectionNavType"
Change-Id: Idcf796fd63e0ef2fc17cf40ccee98ac64c3b6641
diff --git a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavTypeTest.kt b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavTypeTest.kt
index 0e06434..c92982f 100644
--- a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavTypeTest.kt
+++ b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavTypeTest.kt
@@ -53,6 +53,7 @@
         private val en = Bitmap.Config.ALPHA_8
         private val enString = "ALPHA_8"
         private val enStringCasing = "alpha_8"
+        private val referenceString = "2131034161"
         private val serializable = Person()
         private val serializables = arrayOf(Bitmap.Config.ALPHA_8)
         private val parcelableNavType = NavType.ParcelableType(ActivityInfo::class.java)
@@ -297,6 +298,25 @@
     }
 
     @Test
+    fun serializeAsValues() {
+        assertThat((NavType.IntArrayType as CollectionNavType).serializeAsValues(
+            intArrayOf(0, 1))
+        ).containsExactly("0", "1").inOrder()
+        assertThat((NavType.BoolArrayType as CollectionNavType).serializeAsValues(
+            booleanArrayOf(true, false))
+        ).containsExactly("true", "false").inOrder()
+        assertThat((NavType.StringArrayType as CollectionNavType).serializeAsValues(
+            arrayOf("test", "test2"))
+        ).containsExactly("test", "test2").inOrder()
+        assertThat((NavType.FloatArrayType as CollectionNavType).serializeAsValues(
+            floatArrayOf(1F, 2F))
+        ).containsExactly("1.0", "2.0").inOrder()
+        assertThat((NavType.LongArrayType as CollectionNavType).serializeAsValues(
+            longArrayOf(1L, 2L))
+        ).containsExactly("1", "2").inOrder()
+    }
+
+    @Test
     fun customType_defaultSerializeAsValue() {
         val testItemType = object : NavType<TestItem> (false) {
             override fun put(bundle: Bundle, key: String, value: TestItem) {
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavType.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavType.kt
index e342709..c80966e 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavType.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavType.kt
@@ -380,7 +380,9 @@
          * Default values in Navigation XML files are not supported.
          */
         @JvmField
-        public val IntArrayType: NavType<IntArray?> = object : NavType<IntArray?>(true) {
+        public val IntArrayType: NavType<IntArray?> = object : CollectionNavType<IntArray?>(
+            true
+        ) {
             override val name: String
                 get() = "integer[]"
 
@@ -406,6 +408,9 @@
                 val otherArray = other?.toTypedArray()
                 return valueArray.contentDeepEquals(otherArray)
             }
+
+            override fun serializeAsValues(value: IntArray?): List<String> =
+                value?.toList()?.map { it.toString() } ?: emptyList()
         }
 
         /**
@@ -454,7 +459,9 @@
          * Default values in Navigation XML files are not supported.
          */
         @JvmField
-        public val LongArrayType: NavType<LongArray?> = object : NavType<LongArray?>(true) {
+        public val LongArrayType: NavType<LongArray?> = object : CollectionNavType<LongArray?>(
+            true
+        ) {
             override val name: String
                 get() = "long[]"
 
@@ -480,6 +487,9 @@
                 val otherArray = other?.toTypedArray()
                 return valueArray.contentDeepEquals(otherArray)
             }
+
+            override fun serializeAsValues(value: LongArray?): List<String> =
+                value?.toList()?.map { it.toString() } ?: emptyList()
         }
 
         /**
@@ -515,7 +525,9 @@
          * Default values in Navigation XML files are not supported.
          */
         @JvmField
-        public val FloatArrayType: NavType<FloatArray?> = object : NavType<FloatArray?>(true) {
+        public val FloatArrayType: NavType<FloatArray?> = object : CollectionNavType<FloatArray?>(
+            true
+        ) {
             override val name: String
                 get() = "float[]"
 
@@ -541,6 +553,9 @@
                 val otherArray = other?.toTypedArray()
                 return valueArray.contentDeepEquals(otherArray)
             }
+
+            override fun serializeAsValues(value: FloatArray?): List<String> =
+                value?.toList()?.map { it.toString() } ?: emptyList()
         }
 
         /**
@@ -584,7 +599,8 @@
          * Default values in Navigation XML files are not supported.
          */
         @JvmField
-        public val BoolArrayType: NavType<BooleanArray?> = object : NavType<BooleanArray?>(true) {
+        public val BoolArrayType: NavType<BooleanArray?> =
+            object : CollectionNavType<BooleanArray?>(true) {
             override val name: String
                 get() = "boolean[]"
 
@@ -610,6 +626,9 @@
                 val otherArray = other?.toTypedArray()
                 return valueArray.contentDeepEquals(otherArray)
             }
+
+            override fun serializeAsValues(value: BooleanArray?): List<String> =
+                value?.toList()?.map { it.toString() } ?: emptyList()
         }
 
         /**
@@ -662,9 +681,8 @@
          * Default values in Navigation XML files are not supported.
          */
         @JvmField
-        public val StringArrayType: NavType<Array<String>?> = object : NavType<Array<String>?>(
-            true
-        ) {
+        public val StringArrayType: NavType<Array<String>?> =
+            object : CollectionNavType<Array<String>?>(true) {
             override val name: String
                 get() = "string[]"
 
@@ -687,6 +705,9 @@
 
             override fun valueEquals(value: Array<String>?, other: Array<String>?) =
                 value.contentDeepEquals(other)
+
+            override fun serializeAsValues(value: Array<String>?): List<String> =
+                value?.toList() ?: emptyList()
         }
     }