@@ -101,6 +101,11 @@ internal fun SerialDescriptor.getNavType(): NavType<*> {
101
101
InternalType .LONG -> NavType .LongListType
102
102
InternalType .STRING -> NavType .StringListType
103
103
InternalType .STRING_NULLABLE -> InternalNavType .StringNullableListType
104
+ InternalType .ENUM ->
105
+ @Suppress(" UNCHECKED_CAST" )
106
+ InternalNavType .EnumListType (
107
+ getElementDescriptor(0 ).getClass() as Class <Enum <* >>
108
+ )
104
109
else -> UNKNOWN
105
110
}
106
111
}
@@ -471,6 +476,46 @@ internal object InternalNavType {
471
476
override fun emptyCollection (): List <Double > = emptyList()
472
477
}
473
478
479
+ class EnumListType <D : Enum <* >>(type : Class <D >) : CollectionNavType<List<D>?>(true ) {
480
+ private val enumNavType = EnumType (type)
481
+
482
+ override val name: String
483
+ get() = " List<${enumNavType.name} }>"
484
+
485
+ override fun put (bundle : Bundle , key : String , value : List <D >? ) {
486
+ bundle.putSerializable(key, value?.let { ArrayList (value) })
487
+ }
488
+
489
+ @Suppress(" DEPRECATION" , " UNCHECKED_CAST" )
490
+ override fun get (bundle : Bundle , key : String ): List <D >? = (bundle[key] as ? List <D >? )
491
+
492
+ override fun parseValue (value : String ): List <D > = listOf (enumNavType.parseValue(value))
493
+
494
+ override fun parseValue (value : String , previousValue : List <D >? ): List <D >? =
495
+ previousValue?.plus(parseValue(value)) ? : parseValue(value)
496
+
497
+ override fun valueEquals (value : List <D >? , other : List <D >? ): Boolean {
498
+ val valueArrayList = value?.let { ArrayList (value) }
499
+ val otherArrayList = other?.let { ArrayList (other) }
500
+ return valueArrayList == otherArrayList
501
+ }
502
+
503
+ override fun serializeAsValues (value : List <D >? ): List <String > =
504
+ value?.map { it.toString() } ? : emptyList()
505
+
506
+ override fun emptyCollection (): List <D > = emptyList()
507
+
508
+ public override fun equals (other : Any? ): Boolean {
509
+ if (this == = other) return true
510
+ if (other !is EnumListType <* >) return false
511
+ return enumNavType == other.enumNavType
512
+ }
513
+
514
+ public override fun hashCode (): Int {
515
+ return enumNavType.hashCode()
516
+ }
517
+ }
518
+
474
519
class EnumNullableType <D : Enum <* >? >(type : Class <D ?>) : SerializableNullableType<D?>(type) {
475
520
private val type: Class <D ?>
476
521
0 commit comments