package Ġcom . v dx . chip rv . adapters Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . v dx . chip rv . items . Chip Item Ċ import Ġcom . v dx . chip rv . view holder . Chip ViewHolder Ċ import Ġcom . v dx . chip rv . view holder . Chip ViewHolder Builder Ċ import Ġcom . v dx . chip rv . view holder . Chip ViewHolder Click EventListener ĊĊ Ċ class ĠCh ip Adapter < T Ġ: ĠCh ip Item >() Ġ: ĠRecyclerView . Adapter < Chip ViewHolder < T >>() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġis Selected : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġvar ĠITEM _ TYPE Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġroot Items : ĠArrayList < T > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġval Ġitems : ĠArrayList < T > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġselected Position Ġ= ĠNO _ POSITION ĊĠĠĠ Ġprivate Ġvar Ġprev Selected Position Ġ= ĠNO _ POSITION ĊĊĊĠĠĠ Ġprivate Ġvar Ġcontext : ĠContext ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġre cycler ClickListener : ĠCh ip ClickListener < T >? Ġ= Ġnull ĊĊĊĠĠĠ Ġprivate Ġval Ġhold ers : ĠHashMap < Int ?, ĠCH older Wrapper > Ġ= ĠHashMap () ĊĠĠĠ Ġprivate Ġval Ġview Types : ĠHashMap < Class < out ĠT ? >, ĠInt > Ġ= ĠHashMap () ĊĊĠĠĠ Ġfun Ġcontext ( context : ĠContext ?): ĠCh ip Adapter < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġholder ( ĊĠĠĠĠĠĠĠ Ġitem Class : ĠClass < out ĠT ? >, ĊĠĠĠĠĠĠĠ ĠviewHolder Class : ĠClass < out ĠCh ip ViewHolder < out ĠT >> ?, ĊĠĠĠĠĠĠĠ Ġresource ID : ĠInt , ĊĠĠĠĠĠĠĠ Ġspan Count : ĠInt ĊĠĠĠ Ġ): ĠCh ip Adapter < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Type Ġ= ĠITEM _ TYPE ++ ĊĠĠĠĠĠĠĠ Ġview Types [ item Class ] Ġ= Ġview Type ĊĠĠĠĠĠĠĠ Ġhold ers [ view Type ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCH older Wrapper (). set Holder Class ( view Holder Class ). set Resource ID ( resource ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Span Count ( span Count ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġlistener ( recycler ClickListener : ĠCh ip ClickListener < T >? ): ĠCh ip Adapter < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . recycler ClickListener Ġ= Ġre cycler ClickListener ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset ( items : ĠArrayList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis [ items ] Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġset ( items : ĠArrayList < T >, Ġoverride Root Items : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( override Root Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Items . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Items . addAll ( items ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . items . clear () ĊĠĠĠĠĠĠĠ Ġthis . items . addAll ( items ) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( 0 , Ġitems . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd All ( items : ĠArrayList < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġroot Items . addAll ( items ) ĊĠĠĠĠĠĠĠ Ġthis . items . addAll ( items ) ĊĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( this . items . size Ġ+ Ġ 1 , Ġitems . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroot Items . add ( item ) ĊĠĠĠĠĠĠĠ Ġitems . add ( item ) ĊĠĠĠĠĠĠĠ Ġnotify Item Inserted ( items . size Ġ- Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove () Ġ{ ĊĠĠĠĠĠĠĠ Ġroot Items . clear () ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġnotify Item Range Removed ( 0 , Ġitems . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitems [ index ] ĊĠĠĠĠĠĠĠ Ġroot Items . remove ( item ) ĊĠĠĠĠĠĠĠ Ġitems . remove At ( index ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroot Items . remove ( item ) ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġitems . indexOf ( item ) ĊĠĠĠĠĠĠĠ Ġitems . remove At ( index ) ĊĠĠĠĠĠĠĠ Ġnotify Item Removed ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġitems . indexOf ( item ) ĊĠĠĠĠĠĠĠ Ġthis . notify Item Changed ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Items (): ĠArrayList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Span Count ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhold ers [ view Types [ items [ position ]. java Class ]] !!. span Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( view Group : ĠViewGroup , Ġi : ĠInt ): ĠCh ip ViewHolder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Holder Wrapper Ġ= Ġhold ers [ i ] ĊĠĠĠĠĠĠĠ Ġreturn Ġc Holder Wrapper ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ViewHolder Builder < Chip ViewHolder < T >> (). type Of ( c Holder Wrapper . get Holder Class ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Context ( context ). with Layout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . resource ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). build ( view Group , Ġobject Ġ: ĠCh ip ViewHolder Click EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick Event ( position : ĠInt , Ġclick Event Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recycler ClickListener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( position , Ġclick Event Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler ClickListener ?. onClick ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ position ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Event Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( GR ViewHolder : ĠCh ip ViewHolder < T >, Ġi : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGR ViewHolder . bind ( items [ i ], Ġi , Ġitem Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitems . size ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġview Types [ items [ position ]. java Class ] !! ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġget Root Items (): ĠArrayList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroot Items ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick ( position : ĠInt , Ġclick Event Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cycler ClickListener ?. let Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Selected Ġ= Ġitems [ position ]. selected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ position ]. selected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Position Ġ= ĠNO _ POSITION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Selected Position Ġ= ĠNO _ POSITION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ position ]. selected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Position Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Selected Position Ġ== ĠNO _ POSITION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Selected Position Ġ= Ġselected Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ prev Selected Position ]. selected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( prev Selected Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Selected Position Ġ= Ġselected Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selected Position Ġ>= Ġ 0 ) Ġnotify Item Changed ( selected Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Selection ( selected : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . isSelected Ġ= Ġselected ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmove To Position ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ!= ĠNO _ POSITION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! items . isNull OrEmpty () Ġ&& Ġposition Ġ< Ġitems . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Position Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Selected Position Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ position ]. selected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠCH older Wrapper Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġholder Class : ĠClass < out ĠCh ip ViewHolder <* >> ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġresource ID Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠĠĠĠĠ Ġvar Ġspan Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Holder Class (): ĠClass < out ĠCh ip ViewHolder <* >> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġholder Class ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Holder Class ( holder Class : ĠClass < out ĠCh ip ViewHolder <* >> ?): ĠCH older Wrapper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . holder Class Ġ= Ġholder Class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Resource ID ( resource ID : ĠInt ): ĠCH older Wrapper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . resource ID Ġ= Ġresource ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Span Count ( span Count : ĠInt ): ĠCH older Wrapper Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . span Count Ġ= Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNO _ POSITION Ġ= ĠRecyclerView . NO _ POSITION ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠCh ip ClickListener < T > Ġ{ ĊĠĠĠ Ġfun ĠonClick ( item : ĠT , Ġposition : ĠInt , Ġclick Event Code : ĠInt ) Ċ }