package Ġcom . ing resse . design . ui . tree List Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ class ĠTree Recycler Adapter ( val ĠviewHolder : Ġ( level : ĠInt , Ġparent : ĠViewGroup ) Ġ-> ĠTree VH ): ĠRecyclerView . Adapter < Tree VH >() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġitems : ĠMutable List < Tree Data > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġfun Ġupdate Items ( list : ĠList < Tree Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠTree Diff Callback ( items , Ġlist ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠDiff Util . calculate Diff ( callback ) ĊĠĠĠĠĠĠĠ Ġresult . dispatch Updates To ( this ) ĊĊĠĠĠĠĠĠĠ Ġitems Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġitems . addAll ( list ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ( count : ĠInt , Ġpath : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġitems . indexOf First Ġ{ Ġpath . drop Last ( 1 ) Ġ== Ġit . path Ġ} ĊĠĠĠĠĠĠĠ Ġitems [ position ]. count Ġ+= Ġcount ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( count : ĠInt , Ġpath : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġitems . indexOf First Ġ{ Ġpath . drop Last ( 1 ) Ġ== Ġit . path Ġ} ĊĠĠĠĠĠĠĠ Ġitems [ position ]. count Ġ-= Ġcount ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġitems . size ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ) Ġ= ĠviewHolder ( view Type , Ġparent ) ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠTree VH , Ġposition : ĠInt ) Ġ= Ġholder . load Item ( items [ position ]) ĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ) Ġ= Ġitems [ position ]. level Ċ } Ċ