package Ġcom . github . sky fe 7 9 . android . react component kit . collection view Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . github . sky fe 7 9 . android . react component kit . collection models . Item Model Ċ import Ġcom . github . sky fe 7 9 . android . react component kit . collection models . RecyclerView Helper Ċ import Ġcom . github . sky fe 7 9 . android . react component kit . collection models . Section Model Ċ import Ġcom . github . sky fe 7 9 . android . react component kit . component . View Component Ċ import Ġcom . github . sky fe 7 9 . android . react component kit . view model . Token Ċ import Ġcom . github . sky fe 7 9 . android . react component kit . recyclerview . CollectionView Cell ViewHolder Ċ import Ġcom . github . sky fe 7 9 . android . react component kit . recyclerview . RecyclerView Cell Ċ import Ġcom . github . sky fe 7 9 . android . react component kit . recyclerview . RecyclerView Cell ViewHolder Ċ import Ġcom . github . sky fe 7 9 . android . react component kit . recyclerview . sticky . Sticky Headers Ċ import Ġkotlin . reflect . K Class ĊĊ Ċ private Ġdata Ġclass ĠSection Header ( val Ġitem Model : ĠItem Model ): ĠItem Model () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġid : ĠInt Ġ= Ġitem Model . id ĊĠĠĠ Ġoverride Ġval Ġcomponent Class : ĠK Class < *> Ġ= Ġitem Model . component Class ĊĠĠĠ Ġoverride Ġval Ġis Sticky : ĠBoolean Ġ= Ġitem Model . is Sticky Ċ } Ċ Ċ private Ġdata Ġclass ĠSection Footer ( val Ġitem Model : ĠItem Model ): ĠItem Model () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġid : ĠInt Ġ= Ġitem Model . id ĊĠĠĠ Ġoverride Ġval Ġcomponent Class : ĠK Class < *> Ġ= Ġitem Model . component Class ĊĠĠĠ Ġoverride Ġval Ġis Sticky : ĠBoolean Ġ= Ġitem Model . is Sticky Ċ } Ċ Ċ data Ġclass ĠSection Content ( ĊĠĠĠ Ġval Ġitem Models : ĠList < Item Model >, ĊĠĠĠ Ġval Ġre cyclerView Helper : ĠRecyclerView Helper ): ĠItem Model () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġcomponent Class : ĠK Class < *> Ġ= ĠNested CollectionView Component :: class ĊĠĠĠ Ġoverride Ġval Ġid : ĠInt Ġ= Ġitem Models . hashCode () Ċ } ĊĊ Ċ private Ġfun ĠSection Model . to Item Models (): ĠList < Item Model > Ġ{ ĊĠĠĠ Ġval Ġresult : ĠMutable List < Item Model > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġheader ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . add ( Section Header ( it )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġresult . add ( Section Content ( items , Ġre cyclerView Helper )) ĊĊĠĠĠ Ġfooter ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . add ( Section Footer ( it )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ open Ġclass ĠCollection View Adapter ( private Ġval Ġtoken : ĠToken ): ĠRecyclerView . Adapter < RecyclerView . ViewHolder >(), ĠSt icky Headers Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠView Type Ġ{ ĊĠĠĠĠĠĠĠ ĠHEADER , ĊĠĠĠĠĠĠĠ ĠCONTENT , ĊĠĠĠĠĠĠĠ ĠFO OTER ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġview Components : ĠMutable Map < Int , ĠK Class <* >> Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġvar Ġsections : ĠMutable List < Section Model > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġitems : ĠMutable List < Item Model > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems [ position ]. id . to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Sticky Header ( position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( val Ġitem Ġ= Ġitems [ position ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSection Header Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . item Model . is Sticky ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSection Footer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . item Model . is Sticky ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġposition ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġposition : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( val Ġitem Ġ= Ġitems [ position ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSection Content Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= ĠRecyclerView Cell ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Comp o ent Ġ= ĠNested CollectionView Component ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . view Component Ġ= Ġview Comp o ent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewHolder Ġ= Ġcell . onCreate Collection ViewHolder ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Comp o ent . setup ( item , Ġview Components ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠviewHolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcls Ġ= Ġview Components [ item . component Class . qualified Name . hashCode ()] Ġ?: Ġthrow ĠIllegalStateException (" view Component Ġis Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= ĠRecyclerView Cell ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . view Component Ġ= Ġcls . java . construct ors . first (). newInstance ( token ) Ġas ĠView Component ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . onCreate ViewHolder ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( val Ġitem Ġ= Ġitems [ position ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSection Header Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell ViewHolder Ġ= Ġ( holder Ġas ? ĠRecyclerView Cell ViewHolder ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell ViewHolder . on Bind ( item . item Model , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSection Footer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell ViewHolder Ġ= Ġ( holder Ġas ? ĠRecyclerView Cell ViewHolder ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell ViewHolder . on Bind ( item . item Model , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSection Content Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell ViewHolder Ġ= Ġ( holder Ġas ? ĠCollection View Cell ViewHolder ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell ViewHolder . on Bind ( item , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġset ( sections : ĠList < Section Model >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . sections . clear () ĊĠĠĠĠĠĠĠ Ġthis . sections . addAll ( sections ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Items Ġ= Ġthis . sections . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . to Item Models () ĊĠĠĠĠĠĠĠ Ġ}. flatten () ĊĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġitems . addAll ( new Items ) ĊĠĠĠĠĠĠĠ Ġthis . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister ( component : ĠK Class <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Components [ component . qualified Name . hashCode ()] Ġ= Ġcomponent ĊĠĠĠ Ġ} Ċ }