@@ -101,6 +101,11 @@ internal fun SerialDescriptor.getNavType(): NavType<*> {
101101 InternalType .LONG -> NavType .LongListType
102102 InternalType .STRING -> NavType .StringListType
103103 InternalType .STRING_NULLABLE -> InternalNavType .StringNullableListType
104+ InternalType .ENUM ->
105+ @Suppress(" UNCHECKED_CAST" )
106+ InternalNavType .EnumListType (
107+ getElementDescriptor(0 ).getClass() as Class <Enum <* >>
108+ )
104109 else -> UNKNOWN
105110 }
106111 }
@@ -471,6 +476,46 @@ internal object InternalNavType {
471476 override fun emptyCollection (): List <Double > = emptyList()
472477 }
473478
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+
474519 class EnumNullableType <D : Enum <* >? >(type : Class <D ?>) : SerializableNullableType<D?>(type) {
475520 private val type: Class <D ?>
476521
0 commit comments