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()
}
}