package Ġdu . duc s . message board Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . google . firebase . auth . Firebase User Ċ import Ġcom . google . firebase . auth . k tx . auth Ċ import Ġcom . google . firebase . firestore . Document Change Ċ import Ġcom . google . firebase . firestore . Query Ċ import Ġcom . google . firebase . firestore . k tx . firestore Ċ import Ġcom . google . firebase . firestore . k tx . toObject Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġdu . duc s . message board . model . Message Ċ import Ġjava . util .* Ċ Ċ class ĠMessage ViewModel Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġuser Ġ= ĠFirebase . auth . currentUser ĊĠĠĠ Ġprivate Ġval Ġdb Ġ= ĠFirebase . firestore ĊĊĠĠĠ Ġ// ĠInstance Ġof Ġthe Ġcurrent Ġlogged - in Ġuser , Ġif Ġany . ĊĠĠĠ Ġval ĠcurrentUser : ĠFirebase User ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġuser ĊĊĠĠĠ Ġprivate Ġval Ġ_ new Messages Ġ= ĠMutable LiveData < Mutable List < Message >>() ĊĠĠĠ Ġ// Ġobserve Ġthis Ġvariable Ġto Ġget Ġnew Ġmessage Ġupdates ĊĠĠĠ Ġval Ġnew Messages : ĠLive Data < Mutable List < Message >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ new Messages ĊĊĠĠĠ Ġfun ĠsendMessage ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġmessage Ġobject Ġfrom Ġuser Ġinformation Ġand Ġprovided Ġvalues . ĊĠĠĠĠĠĠĠ Ġif ( user ?. email ?. isNotBlank () Ġ== Ġtrue ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= ĠMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġmessage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġuser . displayName , Ġemail Id Ġ= Ġuser . email ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . collection ( COLLECTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( msg . to HashMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġdocument Reference Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Document Ġadded Ġwith ĠID : Ġ${ document Reference . id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> ĠLog . d ( TAG , Ġ" Error Ġadding Ġdocument ", Ġe ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Message ( msg Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . collection ( COLLECTION ). document ( msg Id ). delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĠLog . d ( TAG , Ġ" Document Ġsuccessfully Ġdeleted !") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> ĠLog . w ( TAG , Ġ" Error Ġdeleting Ġdocument ", Ġe ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit Messages ( msg Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . collection ( COLLECTION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orderBy (" timestamp ", ĠQuery . Direction . DESC ENDING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. limit ( msg Count . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Snapshot Listener Ġ{ Ġsnapshot , Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" listen Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Snapshot Listener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Message List Ġ= Ġmutable ListOf < Message >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( doc Ġin Ġsnapshot !!. document Changes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( doc . type Ġ== ĠDocument Change . Type . AD DED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġdoc . document . toObject < Message >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . id Ġ= Ġdoc . document . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Message List . add ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ new Messages . value Ġ= Ġnew Message List ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Messages : Ġ${ _ new Messages . value }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Day Two TimeStamp ( calendar : ĠCalendar ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Calendar Ġ= Ġcalendar . clone () Ġas ĠCalendar ĊĠĠĠĠĠĠĠ Ġnew Calendar . add ( Calendar . DATE , 1 ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Time Ġ 2 : Ġ${ new Calendar . time In Millis }") ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Calendar . time In Millis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Day One TimeStamp ( calendar : ĠCalendar ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Time Ġ 1 : Ġ${ calendar . time In Millis }") ĊĠĠĠĠĠĠĠ Ġreturn Ġcalendar . time In Millis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Message ViewModel " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCOL LECTION Ġ= Ġ" messages " ĊĠĠĠ Ġ} Ċ Ċ }