package Ġcom . rol and v ite zh u . tod oc loud . ui . activity . main . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Base Expand able ListAdapter Ċ import Ġcom . rol and v ite zh u . tod oc loud . R Ċ import Ġcom . rol and v ite zh u . tod oc loud . data . Category Ċ import Ġcom . rol and v ite zh u . tod oc loud . databinding . Item Category Binding Ċ import Ġcom . rol and v ite zh u . tod oc loud . databinding . ItemList in category Binding Ċ import Ġcom . rol and v ite zh u . tod oc loud . di . Fragment Scope Ċ import Ġkotlinx . android . synt hetic . main . item _ category . view .* Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ @ Fragment Scope Ċ class ĠCategory Adapter Ġ@ Inject Ġconstructor () Ġ: ĠBase Expand able ListAdapter () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcategories : ĠMutable List < Category > ĊĠĠĠ Ġprivate Ġval Ġl hm Categories : ĠLinkedHashMap < Category , ĠList < com . rol and v ite zh u . tod oc loud . data . List >> ĊĊĠĠĠ Ġoverride Ġfun Ġget Group Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcategories . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Children Count ( group Position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġcategories [ group Position ] ĊĠĠĠĠĠĠĠ Ġval Ġlists Ġ= Ġl hm Categories [ category ] ĊĠĠĠĠĠĠĠ Ġreturn Ġlists ?. size Ġ?: Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group ( group Position : ĠInt ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcategories [ group Position ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Child ( group Position : ĠInt , Ġchild Position : ĠInt ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġcategories [ group Position ] ĊĠĠĠĠĠĠĠ Ġval Ġlists Ġ= Ġl hm Categories [ category ] ĊĠĠĠĠĠĠĠ Ġreturn Ġlists ?. get ( child Position ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget GroupId ( group Position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ(_ id ) Ġ= Ġcategories [ group Position ] ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ id !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Child Id ( group Position : ĠInt , Ġchild Position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġcategories [ group Position ] ĊĠĠĠĠĠĠĠ Ġval Ġlists Ġ= Ġl hm Categories [ category ] ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġlists ?. get ( child Position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ( if Ġ( list Ġ!= Ġnull ) Ġlist ._ id Ġelse Ġ- 1 ) !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Stable Ids (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Group View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Position : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Expanded : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠconvertView : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠViewGroup ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠconvertView Ġ= ĠconvertView ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= Ġparent . context . getSystem Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext . LAYOUT _ IN FL ATER _ SERVICE ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠLayoutInflater ĊĠĠĠĠĠĠĠ Ġval Ġitem Category Binding : ĠItem Category Binding ĊĊĠĠĠĠĠĠĠ Ġif Ġ( convert View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Category Binding Ġ= ĠItem Category Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Inflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠconvertView Ġ= Ġitem Category Binding . root ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Category Binding Ġ= ĠconvertView . tag Ġas ĠItem Category Binding ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġget Group ( group Position ) Ġas ĠCategory ĊĊĠĠĠĠĠĠĠ Ġitem Category Binding . category Ġ= Ġcategory ĊĠĠĠĠĠĠĠ Ġitem Category Binding . category Adapter Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġitem Category Binding . group Position Ġ= Ġgroup Position ĊĠĠĠĠĠĠĠ Ġitem Category Binding . is Expanded Ġ= Ġis Expanded ĊĠĠĠĠĠĠĠ Ġitem Category Binding . convert View Ġ= ĠconvertView ĊĠĠĠĠĠĠĠ Ġitem Category Binding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ ĠconvertView . tag Ġ= Ġitem Category Binding ĊĊĠĠĠĠĠĠĠ Ġreturn ĠconvertView ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Category Indicator ( group Position : ĠInt , Ġis Expanded : ĠBoolean , ĠconvertView : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( should Not Show Group Indicator ( group Position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Expanded Group Indicator ( convert View ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Expanded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Expanded Group Indicator ( convert View ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Collapsed Group Indicator ( convert View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Expanded Group Indicator ( convert View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠconvertView . image view _ item category _ group indicator . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Collapsed Group Indicator ( convert View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠconvertView . image view _ item category _ group indicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ ĠconvertView . image view _ item category _ group indicator . setImage Resource ( R . drawable . baseline _ expand _ less _ 2 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Expanded Group Indicator ( convert View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠconvertView . image view _ item category _ group indicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ ĠconvertView . image view _ item category _ group indicator . setImage Resource ( R . drawable . baseline _ expand _ more _ 2 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Not Show Group Indicator ( group Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Children Count ( group Position ) Ġ== Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Child View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Position : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Position : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Last Child : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠconvertView : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠViewGroup ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠconvertView Ġ= ĠconvertView ĊĊĠĠĠĠĠĠĠ Ġval Ġitem List in category Binding : ĠItem List in category Binding ĊĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= Ġparent . context . getSystem Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext . LAYOUT _ IN FL ATER _ SERVICE ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠLayoutInflater ĊĊĠĠĠĠĠĠĠ Ġif Ġ( convert View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem List in category Binding Ġ= ĠItem List in category Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Inflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠconvertView Ġ= Ġitem List in category Binding . root ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem List in category Binding Ġ= ĠconvertView . tag Ġas ĠItem List in category Binding ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġget Child ( group Position , Ġchild Position ) Ġas Ġcom . rol and v ite zh u . tod oc loud . data . List ĊĊĠĠĠĠĠĠĠ Ġitem List in category Binding . list Ġ= Ġlist ĊĠĠĠĠĠĠĠ Ġitem List in category Binding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ ĠconvertView . tag Ġ= Ġitem List in category Binding ĊĊĠĠĠĠĠĠĠ Ġreturn ĠconvertView ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Child Selectable ( group Position : ĠInt , Ġchild Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( l hm Categories : ĠLinkedHashMap < Category , ĠList < com . rol and v ite zh u . tod oc loud . data . List >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġcategories . clear () ĊĠĠĠĠĠĠĠ Ġthis . l hm Categories . clear () ĊĠĠĠĠĠĠĠ Ġcategories . addAll ( l hm Categories . keys ) ĊĠĠĠĠĠĠĠ Ġthis . l hm Categories . put All ( l hm Categories ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġcategories . clear () ĊĠĠĠĠĠĠĠ Ġl hm Categories . clear () ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcategories Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġl hm Categories Ġ= ĠLinkedHashMap () ĊĠĠĠ Ġ} Ċ }