package Ġcom . can _ apps . chat . app . adapter Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . can _ apps . chat . bres enter . ChatMessage Model Ċ import Ġcom . can _ apps . chat . databinding . Item My Message Binding Ċ import Ġcom . can _ apps . chat . databinding . Item My Message Tail Binding Ċ import Ġcom . can _ apps . chat . databinding . Item Other Message Binding Ċ import Ġcom . can _ apps . chat . databinding . Item Other Message Tail Binding Ċ import Ġcom . can _ apps . chat . databinding . Item System Message Binding Ċ Ċ internal Ġclass ĠChat Adapter Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMY _ MSG Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠOTHER _ MSG Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSYSTEM _ MSG Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMY _ MSG _ TAIL Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠOTHER _ MSG _ TAIL Ġ= Ġ 4 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġitems Ġ= Ġmutable ListOf < ChatMessage Model >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMY _ MSG Ġ-> ĠChat My Message ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem My Message Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), Ġparent , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOTHER _ MSG Ġ-> ĠChat Other Message ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Other Message Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), Ġparent , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSYSTEM _ MSG Ġ-> ĠChat System Message ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem System Message Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), Ġparent , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMY _ MSG _ TAIL Ġ-> ĠChat My Message Tail ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem My Message Tail Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), Ġparent , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOTHER _ MSG _ TAIL Ġ-> ĠChat Other Message Tail ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Other Message Tail Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), Ġparent , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Invalid Ġview Ġholder Ġfor Ġtype Ġ$ view Type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( items [ position ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Message Model . My Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠChat My Message ViewHolder ). bind ( items [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Message Model . Other Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠChat Other Message ViewHolder ). bind ( items [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Message Model . System Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠChat System Message ViewHolder ). bind ( items [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Message Model . My With Tail Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠChat My Message Tail ViewHolder ). bind ( items [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Message Model . Other With Tail Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠChat Other Message Tail ViewHolder ). bind ( items [ position ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġitems . size ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( items [ position ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Message Model . My Ġ-> ĠMY _ MSG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Message Model . Other Ġ-> ĠOTHER _ MSG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Message Model . System Ġ-> ĠSYSTEM _ MSG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Message Model . My With Tail Ġ-> ĠMY _ MSG _ TAIL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChat Message Model . Other With Tail Ġ-> ĠOTHER _ MSG _ TAIL ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd ToList ( message : ĠChat Message Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . id Ġ== Ġitems [ 0 ]. id Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ 0 ] Ġ= Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( 0 , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ