package Ġcom . github . nk z awa . socket io . android chat Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġkotlinx . android . synt hetic . main . item _ message . view .* Ċ Ċ class ĠMessage Adapter ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Messages : ĠMutable List < Message >) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . Adapter < Message Adapter . ViewHolder >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Username Colors : ĠInt Array Ġ= Ġcontext . resources . getInt Array ( R . array . username _ colors ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage . TYPE _ MESSAGE Ġ-> ĠR . layout . item _ message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage . TYPE _ ACTION Ġ-> ĠR . layout . item _ action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . layout . item _ log ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠLayoutInflater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( layout , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( v ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( view Holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġm Messages [ position ] ĊĠĠĠĠĠĠĠ ĠLog . e (" mess $ position :", Ġmessage . toString ()) ĊĠĠĠĠĠĠĠ Ġmessage . message ?. let Ġ{ ĠviewHolder . setMessage ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġmessage . username ?. let Ġ{ ĠviewHolder . set Username ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Messages . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Messages [ position ]. type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġset Username ( username : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . username _ sender . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġusername ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset TextColor ( getUsername Color ( username )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Message ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . message . text Ġ= Ġmessage ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Username Color ( username : ĠString ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhash Ġ= Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlen Ġ= Ġusername !!. length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġlen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhash Ġ= Ġusername . code Point At ( i ) Ġ+ Ġ( hash Ġshl Ġ 5 ) Ġ- Ġhash ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠMath . abs ( hash Ġ% Ġm Username Colors . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Username Colors [ index ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} Ċ Ċ }