package Ġcom . zone . chat ter z . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . Firebase User Ċ import Ġcom . google . firebase . database . Data Snapshot Ċ import Ġcom . google . firebase . database . Database Error Ċ import Ġcom . google . firebase . database . Firebase Database Ċ import Ġcom . google . firebase . database . Value EventListener Ċ import Ġcom . mik ha el lope z . circular image view . Circular ImageView Ċ import Ġcom . zone . chat ter z . model . Chat Ċ import Ġcom . zone . chat ter z . model . User Ċ import Ġcom . zone . chat ter z . R Ċ Ċ class ĠCh ats Adapter ( context : ĠContext , Ġlist : ĠList < Chat >) Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < Ch ats Adapter . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfirebase User : ĠFirebase User ĊĠĠĠ Ġprivate Ġval ĠMESSAGE _ LEFT _ RECE IVER Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval ĠMESSAGE _ RIGHT _ SEND ER Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġvar Ġm Chat : ĠList < Chat > Ġ= Ġlist ĊĠĠĠ Ġprivate Ġvar ĠmContext Ġ= Ġcontext ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Type . equals ( MESSAGE _ RIGHT _ SEND ER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( mContext ). inflate ( R . layout . chat _ message _ sending , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( view ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( mContext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . chat _ message _ rec ie ving , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Chat . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchat : ĠChat Ġ= Ġm Chat . get ( position ) ĊĠĠĠĠĠĠĠ Ġholder . text Message . text Ġ= Ġchat . message ĊĠĠĠĠĠĠĠ Ġshow Photo Image ( chat . sender , Ġholder . profile Chat Image ) ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġm Chat . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . is Seen . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chat . is Seen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . is Seen . setImage Resource ( R . drawable . seen _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . is Seen . setImage Resource ( R . drawable . not _ seen _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . is Seen . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtext Message : ĠTextView Ġ= ĠitemView . findViewById ( R . id . message ) ĊĠĠĠĠĠĠĠ Ġvar Ġis Seen : ĠImageView Ġ= ĠitemView . findViewById ( R . id . is Seen Message ) ĊĠĠĠĠĠĠĠ Ġvar Ġprofile Chat Image : ĠCircular ImageView Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . findViewById ( R . id . chat Profile Img Re ceiving ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġfirebase User Ġ= ĠFirebase Auth . getInstance (). currentUser !! ĊĠĠĠĠĠĠĠ Ġif Ġ( m Chat . get ( position ). sender . equals ( firebase User . uid )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMESSAGE _ RIGHT _ SEND ER ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMESSAGE _ LEFT _ RECE IVER ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Photo Image ( userid : ĠString , ĠimageView : ĠCircular ImageView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Reference Ġ= ĠFirebase Database . getInstance (). getReference (" Users " Ġ+ Ġuserid ) ĊĠĠĠĠĠĠĠ Ġdatabase Reference . addListener For Single Value Event ( object Ġ: ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( p 0 : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( p 0 : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġp 0 . getValue ( User :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user . id . equals ( userid )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user . imageUrl . equals (" null ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setImage Resource ( R . drawable . google _ logo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( mContext ). load ( user . imageUrl ). into ( imageView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }