package Ġcom . uts man . hi y ah iy ah i ya . ui . adapter Ċ Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . perf om er . bl itz . setTime Ago Ċ import Ġcom . uts man . hi y ah iy ah i ya . R Ċ import Ġcom . uts man . hi y ah iy ah i ya . model . row . Row Room Ċ import Ġcom . uts man . hi y ah iy ah i ya . model . row . Row Room Type Ċ import Ġcom . uts man . hi y ah iy ah i ya . model . types . Local Chat Status Ċ import Ġcom . uts man . hi y ah iy ah i ya . utils . click Ċ import Ġcom . uts man . hi y ah iy ah i ya . utils . load Ċ import Ġkotlinx . android . synt hetic . main . item _ list _ empty . view .* Ċ import Ġkotlinx . android . synt hetic . main . item _ room . view .* Ċ Ċ class ĠRoom Adapter Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġinner Ġclass ĠItem Room ViewHolder ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠRow Room . Room Item ) Ġ= ĠitemView . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg _ profile . load ( item . image Room , Ġis Circle Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx _ title . text Ġ= Ġitem . title Room ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx _ subtitle . text Ġ= Ġitem . subtitle Room ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx _ date . setTime Ago ( item . last Date Ġ?: Ġ 0 L ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . un Read Count Ġ== Ġ 0 ) Ġtx _ badge _ unread . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġtx _ badge _ unread . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx _ badge _ unread . text Ġ= Ġitem . un Read Count . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . image Badge ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg _ room _ badge . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg _ room _ badge . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg _ send _ indicator . setColor Filter ( Context Compat . getColor ( context , Ġandroid . R . color . black ), ĠPort er D uff . Mode . MULTI PLY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . local Chat Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Chat Status . NONE Ġ-> Ġimg _ send _ indicator . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Chat Status . SEND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg _ send _ indicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg _ send _ indicator . setImage Drawable ( Context Compat . get Drawable ( context , ĠR . drawable . ic _ round _ done _ 2 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Chat Status . RECE IVED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg _ send _ indicator . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg _ send _ indicator . setImage Drawable ( Context Compat . get Drawable ( context , ĠR . drawable . ic _ baseline _ done _ all _ 2 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Room Click ?. invoke ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠEmpty Room ViewHolder ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠRow Room . Empty ) Ġ= ĠitemView . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx _ empty _ message . text Ġ= Ġitem . text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠRoom Diff Callback ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġold List : ĠList < Row Room >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnew List : ĠList < Row Room > ĊĠĠĠ Ġ) Ġ: ĠDiff Util . Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold List [ old Item Position ] Ġ== Ġnew List [ new Item Position ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Old List Size (): ĠInt Ġ= Ġold List . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget New List Size (): ĠInt Ġ= Ġnew List . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item Position : ĠInt , Ġnew Item Position : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold List [ old Item Position ] Ġ== Ġnew List [ new Item Position ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġroom List : ĠMutable List < Row Room > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġon Room Click : Ġ(( Row Room . Room Item ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġfun ĠonClick ( on Room Click : Ġ(( Row Room . Room Item ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Room Click Ġ= Ġon Room Click ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Chat ( ch ats : ĠList < Row Room >) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Callback Ġ= ĠRoom Diff Callback ( room List , Ġch ats ) ĊĠĠĠĠĠĠĠ Ġval Ġdiff Result Ġ= ĠDiff Util . calculate Diff ( diff Callback ) ĊĠĠĠĠĠĠĠ Ġroom List . clear () ĊĠĠĠĠĠĠĠ Ġroom List . addAll ( ch ats ) ĊĠĠĠĠĠĠĠ Ġdiff Result . dispatch Updates To ( this ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( Row Room Type . values ()[ view Type ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow Room Type . ITEM Ġ-> ĠItem Room ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . item _ room , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow Room Type . EMPTY Ġ-> ĠEmpty Room ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . item _ list _ empty , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġroom List . size ĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ= Ġroom List [ position ]. row Room Type . ordinal ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġitem Ġ= Ġroom List [ position ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRow Room . Room Item Ġ-> Ġ( holder Ġas ĠItem Room ViewHolder ). bind ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRow Room . Empty Ġ-> Ġ( holder Ġas ĠEmpty Room ViewHolder ). bind ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }