package Ġcom . bin hn k . clean . architecture . ui . main Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bin hn k . clean . architecture . R Ċ import Ġcom . bin hn k . clean . architecture . model . User Item Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . google . gson . Gson Ċ import Ġde . hd od enh of . circle image view . Circle ImageView Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONException Ċ Ċ class ĠUser Adapter ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠmContext : ĠContext , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshow Checking : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Callback : ĠCallback Ċ ) Ġ: ĠRecyclerView . Adapter < User Adapter . User ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdata List : ĠArrayList < User Item > Ġ= ĠArrayList () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠUser ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUser ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . row _ user , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdata List . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder User : ĠUser ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Obj Ġ= Ġdata List [ position ] ĊĊĠĠĠĠĠĠĠ Ġholder User . tv UserName . text Ġ= ĠString . format ("% s Ġ% s ", Ġm Obj . firstName , Ġm Obj . lastName ) ĊĠĠĠĠĠĠĠ Ġholder User . tv Email . text Ġ= Ġm Obj . email ĊĠĠĠĠĠĠĠ ĠG lide . with ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( m Obj . avatar ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . bg _ place _ holder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( holder User . im Avatar ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( show Checking ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Obj . added In DB ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder User . tv UserName . setTextColor ( Context Compat . getColor ( mContext , ĠR . color . color Primary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder User . im Checked . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder User . tv UserName . setTextColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder User . im Checked . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder User . tv UserName . setTextColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder User . im Checked . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder User . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback . on Item Clicked ( m Obj ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġholder User . item View . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Callback . on Item Long Clicked ( m Obj ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder : ĠUser ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload s : ĠMutable List < Any > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( payload s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Bind ViewHolder ( holder , Ġposition , Ġpayload s ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġpayload s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s Ġ== Ġ" update _ check ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Obj Ġ= Ġdata List [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Checking ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Obj . added In DB ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv UserName . setTextColor ( Context Compat . getColor ( mContext , ĠR . color . color Primary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . im Checked . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv UserName . setTextColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . im Checked . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . tv UserName . setTextColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . im Checked . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġget Ġitem Ġposition Ġby ĠuserID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetItem Position ( userID : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data List . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġdata List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data List [ i ]. id Ġ== ĠuserID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate State Position ( userID : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpos Ġ= ĠgetItem Position ( userID Ġ= ĠuserID ) ĊĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata List [ pos ]. added In DB Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( pos ," update _ check ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġupdate Ġnew Ġuser Client List Ġfor Ġadapter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate Adapter ( m New Lst : ĠArrayList < User Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= ĠDiff Util . calculate Diff ( User Diff Utils ( data List , Ġm New Lst )) ĊĊĠĠĠĠĠĠĠ Ġdata List . clear () ĊĠĠĠĠĠĠĠ Ġdata List . addAll ( m New Lst ) ĊĠĠĠĠĠĠĠ Ġcallback . dispatch Updates To ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠUser ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtv UserName : ĠTextView Ġ= ĠitemView . findViewById ( R . id . tv _ user _ name ) ĊĠĠĠĠĠĠĠ Ġval Ġtv Email : ĠTextView Ġ= ĠitemView . findViewById ( R . id . tv _ email ) ĊĠĠĠĠĠĠĠ Ġval Ġim Avatar : ĠCircle ImageView Ġ= ĠitemView . findViewById ( R . id . im _ avatar ) ĊĠĠĠĠĠĠĠ Ġval Ġim Checked : ĠImageView Ġ= ĠitemView . findViewById ( R . id . im _ checked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCallback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Clicked ( m User Clicked : ĠUser Item ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Long Clicked ( m User Clicked : ĠUser Item ) ĊĠĠĠ Ġ} Ċ Ċ }