package Ġcom . mess ias jun ior . code war sv 2 . presentation . home Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . paging . Paged ListAdapter Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . mess ias jun ior . code war sv 2 . R Ċ import Ġcom . mess ias jun ior . code war sv 2 . databinding . ListItem User Binding Ċ import Ġcom . mess ias jun ior . code war sv 2 . model . User Ċ import Ġjava . util . Locale Ċ Ċ class ĠUser Adapter ( ĊĠĠĠ Ġprivate Ġval Ġhome ViewModel : ĠHome ViewModel Ċ ) Ġ: ĠP aged ListAdapter < User , ĠUser ViewHolder >( DIFF _ UTIL ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠUser ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUser ViewHolder . create ( parent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠUser ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġitem ?. let Ġ{ Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ Ġhome ViewModel . select User ( user ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDIFF _ UTIL Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < User >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠUser , Ġnew Item : ĠUser ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . username Ġ== Ġnew Item . username ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠUser , Ġnew Item : ĠUser ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . username Ġ== Ġnew Item . username Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . name Ġ== Ġnew Item . name Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . hon or Ġ== Ġnew Item . hon or Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . best Language Ġ== Ġnew Item . best Language ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠUser ViewHolder ( ĊĠĠĠ Ġprivate Ġval Ġbinding : ĠListItem User Binding Ċ ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠ Ġfun Ġbind ( user : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . name Ġ= Ġuser . displayName ĊĊĠĠĠĠĠĠĠ Ġbinding . hon or Ġ= Ġuser . hon or ĊĊĠĠĠĠĠĠĠ Ġbinding . rank Ġ= Ġuser . leader board Position ?. toString () Ġ?: Ġbinding . root . context . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . un available ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . best Language Ġ= Ġbinding . root . context . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . best _ language , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . best Language ?. name ?. capitalize ( Locale . getDefault ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . best Language ?. rank ?. score ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( parent : ĠViewGroup ): ĠUser ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠListItem User Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUser ViewHolder ( binding ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ