package Ġcom . send bird . chat . sample . group channel . reactions . ui . user Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġco il . load Ċ import Ġcom . send bird . android . user . User Ċ import Ġcom . send bird . chat . sample . group channel . reactions . R Ċ import Ġcom . send bird . chat . sample . group channel . reactions . databinding . ListItem Select User Binding Ċ Ċ class ĠSelect User Adapter ( ĊĠĠĠ Ġprivate Ġval Ġlistener : ĠOn ItemClickListener ?, ĊĠĠĠ Ġprivate Ġval Ġselect Mode : ĠBoolean , ĊĠĠĠ Ġselected UserList : ĠArrayList < String > ?, ĊĠĠĠ Ġbase UserId List : ĠArrayList < String > ?, Ċ ) Ġ: ĠList Adapter < User , ĠSelect User Adapter . Select User ListView Holder >( diff Callback ) Ġ{ ĊĠĠĠ Ġfun Ġinterface ĠOn ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Click ( user : ĠUser , Ġposition : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Callback Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < User >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠUser , Ġnew Item : ĠUser ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . userId Ġ== Ġnew Item . userId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠUser , Ġnew Item : ĠUser ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . nickname Ġ== Ġold Item . nickname Ġ&& Ġold Item . plain Profile ImageUrl Ġ== Ġnew Item . plain Profile ImageUrl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġselect UserId Set : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĠĠĠ Ġprivate Ġval Ġbase UserId Set : ĠMutable Set < String > Ġ= Ġmutable Set Of () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġselected UserList ?. let Ġ{ Ġselect UserId Set . addAll ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbase UserId List ?. let Ġ{ Ġbase UserId Set . addAll ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ) Ġ= ĠSelect User ListView Holder ( ĊĠĠĠĠĠĠĠ ĠListItem Select User Binding . inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠSelect User ListView Holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( getItem ( position )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Users ( users : ĠList < User >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase UserList Ġ= Ġmutable ListOf < User >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( current List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( users ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsubmit List ( base UserList ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle User ( userId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is User Checked ( userId )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect UserId Set . remove ( userId ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect UserId Set . add ( userId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis User Checked ( userId : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġselect UserId Set . contains ( userId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Base User ( userId : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbase UserId Set . contains ( userId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠSelect User ListView Holder ( private Ġval Ġbinding : ĠListItem Select User Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( select Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Item Click ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetItem ( adapter Position ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle User ( getItem ( adapter Position ). userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( adapter Position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( user : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . image view Profile . clip To Outline Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user . profile Url . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . image view Profile . load ( R . drawable . ic _ baseline _ person _ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcross fade ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . image view Profile . load ( user . profile Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcross fade ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemory CacheKey ( user . plain Profile ImageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text view Name . text Ġ= Ġuser . nickname . if Blank Ġ{ Ġuser . userId Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( select Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . checkbox User Select . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . checkbox User Select . isChecked Ġ= Ġis User Checked ( user . userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Base User ( user . userId )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . checkbox User Select . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . checkbox User Select . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . checkbox User Select . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . checkbox User Select . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }