package Ġcom . cat p . th und ers im line up . ui . list Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . cat p . th und ers im line up . R Ċ import Ġeu . dav idea . flex ible adapter . Flex ible Adapter Ċ import Ġeu . dav idea . flex ible adapter . items . Abstract Flex ible Item Ċ import Ġeu . dav idea . flex ible adapter . items . I Expand able Ċ import Ġeu . dav idea . flex ible adapter . items . IF lex ible Ċ import Ġeu . dav idea . flex ible adapter . items . I Header Ċ import Ġeu . dav idea . view holders . Expand able ViewHolder ĊĊ Ċ class ĠExpand able Header Item < Sub Item Ġ: ĠAbstract Flex ible Item < *> >( ĊĠĠĠ Ġval Ġid : ĠInt , ĊĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠ Ġprivate Ġval Ġheader Color : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġis Highlight ed : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠAbstract Flex ible Item < Expand able Header Item . Expand able Header ViewHolder >(), ĊĠĠĠ ĠI Expand able < Expand able Header Item . Expand able Header ViewHolder , ĠSub Item >, ĊĠĠĠ ĠI Header < Expand able Header Item . Expand able Header ViewHolder > Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ expanded Ġ= Ġtrue ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġis Drag gable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Hidden Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġis Selectable Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġitems Ġ= Ġmutable ListOf < Sub Item >() ĊĊĠĠĠ Ġclass ĠExpand able Header ViewHolder ( ĊĠĠĠĠĠĠĠ Ġview : ĠView , ĊĠĠĠĠĠĠĠ Ġadapter : ĠFlex ible Adapter < IF lex ible < RecyclerView . ViewHolder >> ĊĠĠĠ Ġ) Ġ: ĊĠĠĠĠĠĠĠ ĠExpand able ViewHolder ( view , Ġadapter , Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠtextView : ĠTextView Ġ= Ġview . findViewById ( R . id . tv Title ) ĊĠĠĠĠĠĠĠ Ġval Ġimg Collapse : ĠImageView Ġ= Ġview . findViewById ( R . id . iv Collapse ) ĊĠĠĠĠĠĠĠ Ġval Ġbackground : ĠView Ġ= Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun Ġbind ViewHolder ( ĊĠĠĠĠĠĠĠ Ġadapter : ĠFlex ible Adapter < IF lex ible < RecyclerView . ViewHolder >>, ĊĠĠĠĠĠĠĠ Ġholder : ĠExpand able Header ViewHolder , ĊĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠ Ġpayload s : ĠMutable List < Any >? ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter . has Filter ()) Ġitems . size Ġ- Ġsub Items . count Ġ{ Ġit . is Hidden Ġ} Ġelse Ġitems . size ĊĠĠĠĠĠĠĠ Ġholder . textView . text Ġ= Ġ"$ title (${ count })" ĊĠĠĠĠĠĠĠ Ġval Ġdegree Ġ= Ġif Ġ( is Expanded Ġ&& Ġsub Items . isNotEmpty ()) Ġ 0 Ġelse Ġ- 9 0 ĊĠĠĠĠĠĠĠ Ġholder . img Collapse . rotation Ġ= Ġdegree . toFloat () ĊĠĠĠĠĠĠĠ Ġholder . background . set BackgroundColor ( header Color ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Highlight ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . textView . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . textView . type face Ġ= ĠType face . DEFAULT _ BOLD ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . textView . alpha Ġ= Ġ. 7 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . textView . type face Ġ= ĠType face . DEFAULT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Res (): ĠInt Ġ= ĠR . layout . list _ header ĊĊĠĠĠ Ġoverride Ġfun Ġget Expansion Level (): ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġis Expanded (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ expanded ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Expanded ( expanded : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ expanded Ġ= Ġexpanded ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Sub Items (): ĠMutable List < Sub Item > Ġ= Ġitems ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠExpand able Header Item <* >) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġother . id ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġid . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate ViewHolder ( ĊĠĠĠĠĠĠĠ Ġview : ĠView , ĊĠĠĠĠĠĠĠ Ġadapter : ĠFlex ible Adapter < IF lex ible < RecyclerView . ViewHolder >> ĊĠĠĠ Ġ): ĠExpand able Header ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠExpand able Header ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊ Ċ }