package Ġcom . n aram . party _ project . adapter Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . recyclerview . widget . Async List Differ Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġcom . google . firebase . storage . k tx . storage Ċ import Ġcom . n aram . party _ project . R Ċ import Ġcom . n aram . party _ project . databinding . Item Chat Binding Ċ import Ġcom . n aram . party _ project . chat ting Model . Chat ting Ċ import Ġcom . n aram . party _ project . chat ting Model . Message Ċ import Ġcom . n aram . party _ project . m Chat ting Diff Callback Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠChat ting Adapter ( ĊĠĠĠ Ġval Ġmy UID : ĠString Ċ ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Differ Ġ= ĠAsync List Differ ( this , Ġm Chat ting Diff Callback ) ĊĊĠĠĠ Ġval Ġmessage List Ġ= Ġmutable ListOf < Message >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠ Ġ): ĠRecyclerView . ViewHolder ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Chat Binding . inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( ĊĠĠĠĠĠĠĠ Ġval Ġbinding : ĠItem Chat Binding ĊĠĠĠ Ġ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠMessage ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( item . uid Ġ== Ġmy UID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cl Send Container . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Send Time . text Ġ= Ġget DateTime ( item . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv SendMessage . text Ġ= Ġitem . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cl Received Container . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Received Name . text Ġ= Ġitem . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Received Message . text Ġ= Ġitem . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Received Time . text Ġ= Ġget DateTime ( item . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . picture ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Image From Cloud ( item . picture !! , ĠitemView , Ġbinding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġuse ĠDiff Util Ċ // ĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġm Differ . current List . size Ċ // Ċ // ĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ) Ġ= Ġm Differ . current List [ position ]. hashCode (). to Long () Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ċ // ĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġm Differ . current List [ position ] Ċ // ĠĠĠĠĠĠĠ Ġ( holder Ġas ĠViewHolder ). bind ( item ) Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġmessage List . size ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ) Ġ= Ġposition . to Long () ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġmessage List [ position ] ĊĠĠĠĠĠĠĠ Ġ( holder Ġas ĠViewHolder ). bind ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget DateTime ( timestamp : ĠAny ): ĠString ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate ( timestamp . toString (). to Long ()) ĊĠĠĠĠĠĠĠ Ġval Ġtoday Ġ= ĠDate () ĊĊĠĠĠĠĠĠĠ Ġval Ġday Format Ġ= ĠSimpleDateFormat (" yyyy . MM . dd ") ĊĠĠĠĠĠĠĠ Ġval Ġtime Format Ġ= ĠSimpleDateFormat (" a ĠHH : mm ") ĊĠĠĠĠĠĠĠ Ġval Ġall Format Ġ= ĠSimpleDateFormat (" yyyy . MM . dd ĠHH : mm ") ĊĊĠĠĠĠĠĠĠ Ġday Format . time Zone Ġ= ĠTime Zone . getTime Zone (" Asia / Se oul ") ĊĠĠĠĠĠĠĠ Ġtime Format . time Zone Ġ= ĠTime Zone . getTime Zone (" Asia / Se oul ") ĊĠĠĠĠĠĠĠ Ġall Format . time Zone Ġ= ĠTime Zone . getTime Zone (" Asia / Se oul ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġif ( day Format . format ( date ) Ġ== Ġday Format . format ( today )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Format . format ( date ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Format . format ( date ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupload Image From Cloud ( path : ĠString , ĠitemView : ĠView , Ġbinding : ĠItem Chat Binding ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimages Ref Ġ= ĠFirebase . storage . reference . child ( path ) ĊĊĠĠĠĠĠĠĠ Ġimages Ref . download Url . add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( item View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . loading _ image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( binding . iv Received Picture ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( binding . root . context , Ġ" ìĤ¬ ì§Ħ ìĿĦ Ġë¶Ī ëŁ¬ ìĺ¤ ëĬĶ ëį° Ġìĺ¤ ë¥ĺ ê°Ģ Ġë°ľ ìĥĿ íĸĪ ìĬµëĭĪëĭ¤ .", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubmit List ( new List : ĠMutable List < Message >) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Differ . current List Ġ== Ġnew List ) Ġreturn ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Chat ting Adapter ", Ġ" submit List ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew List ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Differ . submit List ( ArrayList < Message >( new List )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }