package Ġio . code labs . ug cloud chat . view . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġio . code labs . ug cloud chat . R Ċ import Ġio . code labs . ug cloud chat . model . Chat Ċ import Ġio . code labs . ug cloud chat . model . preferences . User SharedPreferences Ċ import Ġio . code labs . ug cloud chat . util . layout Inflater Ċ import Ġkotlinx . android . synt hetic . main . item _ message _ sender . view .* Ċ Ċ class ĠChat Adapter ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġlistener : ĠOn Conversation ClickListener , ĊĠĠĠ Ġprivate Ġval Ġprefs : ĠUser SharedPreferences Ċ ) Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdataset Ġ= Ġmutable ListOf < Chat >() ĊĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdataset . isNotEmpty () Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġsender ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdataset [ position ]. sender Ġ== Ġprefs . uid Ġ-> ĠR . layout . item _ message _ sender ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġrecipient ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . layout . item _ message _ recipient ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġempty Ġmessages ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . layout . item _ message _ empty ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ message _ sender Ġ-> ĠCon versation ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . layout Inflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ message _ recipient Ġ-> ĠCon versation ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . layout Inflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ message _ empty Ġ-> ĠEmpty ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . layout Inflater . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Cannot Ġcreate Ġan Ġinstance Ġof Ġthis Ġview holder ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠGet Ġthe Ġnumber Ġof Ġitems Ġto Ġshow Ġin Ġthe Ġre cycler view ĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġif Ġ( dataset . isEmpty ()) Ġ 1 Ġelse Ġdataset . size ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( getItem ViewType ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ message _ sender Ġ-> Ġbind Sender UI ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdataset [ position ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġas ĠCon versation ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ message _ recipient Ġ-> Ġbind Recipient UI ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdataset [ position ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġas ĠCon versation ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ message _ empty Ġ-> Ġbind Empty View ( holder Ġas ĠEmpty ViewHolder ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Empty View ( holder : ĠEmpty ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġbind Ġthe Ġempty Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Sender UI ( ĊĠĠĠĠĠĠĠ Ġchat : ĠChat , ĊĠĠĠĠĠĠĠ Ġholder : ĠCon versation ViewHolder , ĊĠĠĠĠĠĠĠ Ġposition : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . v . sender _ text _ message . text Ġ= Ġchat . message . trim () ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġadd Ġsupport Ġfor Ġuser 's Ġprofile Ġimage Ġin Ġthe Ġfuture ĊĊĠĠĠĠĠĠĠ Ġ// ĠClick Ġaction ĊĠĠĠĠĠĠĠ Ġholder . v . setOnClickListener Ġ{ Ġlistener . onClick ( chat , Ġposition ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind Recipient UI ( ĊĠĠĠĠĠĠĠ Ġchat : ĠChat , ĊĠĠĠĠĠĠĠ Ġholder : ĠCon versation ViewHolder , ĊĠĠĠĠĠĠĠ Ġposition : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġbind Ġthe Ġrecipient Ġfor Ġeach Ġmessage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd New Messages ( ch ats : ĠMutable List < Chat > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠReturn Ġwhen Ġthe Ġnew Ġmessages Ġlist Ġis Ġnull Ġor Ġempty ĊĠĠĠĠĠĠĠ Ġif Ġ( ch ats . isNull OrEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġnew Ġmessages Ġto Ġthe Ġexisting Ġlist ĊĠĠĠĠĠĠĠ Ġthis . dataset . clear () ĊĠĠĠĠĠĠĠ Ġthis . dataset . addAll ( ch ats ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠViewHolder Ġfor Ġeach Ġline Ġof Ġconversation Ġin Ġthe Ġchat ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠCon versation ViewHolder ( val Ġv : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( v ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShows Ġan Ġempty Ġview Ġfor Ġno Ġmessages ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠEmpty ViewHolder ( val Ġv : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( v ) Ċ }