package Ġcom . lets build that app . kotlin messenger . messages Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . Divider Item Decoration Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . database .* Ċ import Ġcom . lets build that app . kotlin messenger . R Ċ import Ġcom . lets build that app . kotlin messenger . models . ChatMessage Ċ import Ġcom . lets build that app . kotlin messenger . models . User Ċ import Ġcom . lets build that app . kotlin messenger . register login . Register Activity Ċ import Ġcom . lets build that app . kotlin messenger . views . Latest Message Row Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġcom . x wr ay . group ie . Group Adapter Ċ import Ġcom . x wr ay . group ie . Item Ċ import Ġcom . x wr ay . group ie . ViewHolder Ċ import Ġkotlinx . android . synt hetic . main . activity _ latest _ messages .* Ċ import Ġkotlinx . android . synt hetic . main . latest _ message _ row . view .* Ċ Ċ class ĠLatest Messages Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġvar ĠcurrentUser : ĠUser ? Ġ= Ġnull ĊĠĠĠ Ġval ĠTAG Ġ= Ġ" Latest Messages " ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ ĠsetContentView ( R . layout . activity _ latest _ messages ) ĊĊĠĠĠ Ġre cycler view _ latest _ messages . adapter Ġ= Ġadapter ĊĠĠĠ Ġre cycler view _ latest _ messages . addItem Decoration ( Divider Item Decoration ( this , ĠDiv ider Item Decoration . VERTICAL )) ĊĊĠĠĠ Ġ// Ġset Ġitem Ġclick Ġlistener Ġon Ġyour Ġadapter ĊĠĠĠ Ġadapter . setOn ItemClickListener Ġ{ Ġitem , Ġview Ġ-> ĊĠĠĠĠĠ ĠLog . d ( TAG , Ġ" 1 2 3 ") ĊĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠChat Log Activity :: class . java ) ĊĊĠĠĠĠĠ Ġ// Ġwe Ġare Ġmissing Ġthe Ġchat Ġpartner Ġuser ĊĊĠĠĠĠĠ Ġval Ġrow Ġ= Ġitem Ġas ĠLatest Message Row ĊĠĠĠĠĠ Ġintent . putExtra ( New Message Activity . USER _ KEY , Ġrow . chat Partner User ) ĊĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġsetup Dummy Rows () ĊĠĠĠ Ġlisten For Latest Messages () ĊĊĠĠĠ Ġfetch CurrentUser () ĊĊĠĠĠ Ġverify User Is LoggedIn () ĊĠ Ġ} ĊĊĠ Ġval Ġlatest Messages Map Ġ= ĠHashMap < String , ĠChat Message >() ĊĊĠ Ġprivate Ġfun Ġrefresh RecyclerView Messages () Ġ{ ĊĠĠĠ Ġadapter . clear () ĊĠĠĠ Ġlatest Messages Map . values . forEach Ġ{ ĊĠĠĠĠĠ Ġadapter . add ( Latest Message Row ( it )) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġlisten For Latest Messages () Ġ{ ĊĠĠĠ Ġval Ġfrom Id Ġ= ĠFirebase Auth . getInstance (). uid ĊĠĠĠ Ġval Ġref Ġ= ĠFirebase Database . getInstance (). getReference ("/ latest - messages /$ from Id ") ĊĠĠĠ Ġref . addChild EventListener ( object : ĠChild EventListener Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Child Added ( p 0 : ĠData Snapshot , Ġp 1 : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchat Message Ġ= Ġp 0 . getValue ( ChatMessage :: class . java ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġlatest Messages Map [ p 0 . key !! ] Ġ= Ġchat Message ĊĠĠĠĠĠĠĠ Ġrefresh RecyclerView Messages () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Child Changed ( p 0 : ĠData Snapshot , Ġp 1 : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchat Message Ġ= Ġp 0 . getValue ( ChatMessage :: class . java ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġlatest Messages Map [ p 0 . key !! ] Ġ= Ġchat Message ĊĠĠĠĠĠĠĠ Ġrefresh RecyclerView Messages () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Child Moved ( p 0 : ĠData Snapshot , Ġp 1 : ĠString ?) Ġ{ ĊĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Child Removed ( p 0 : ĠData Snapshot ) Ġ{ ĊĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( p 0 : ĠDatabase Error ) Ġ{ ĊĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġval Ġadapter Ġ= ĠGroup Adapter < ViewHolder >() Ċ Ċ // Ġ Ġprivate Ġfun Ġsetup Dummy Rows () Ġ{ Ċ // Ċ // Ċ // ĠĠĠ Ġadapter . add ( Latest Message Row ()) Ċ // ĠĠĠ Ġadapter . add ( Latest Message Row ()) Ċ // ĠĠĠ Ġadapter . add ( Latest Message Row ()) Ċ // Ġ Ġ} ĊĊĠ Ġprivate Ġfun Ġfetch CurrentUser () Ġ{ ĊĠĠĠ Ġval Ġuid Ġ= ĠFirebase Auth . getInstance (). uid ĊĠĠĠ Ġval Ġref Ġ= ĠFirebase Database . getInstance (). getReference ("/ users /$ uid ") ĊĠĠĠ Ġref . addListener For Single Value Event ( object : ĠValue EventListener Ġ{ ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( p 0 : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠ ĠcurrentUser Ġ= Ġp 0 . getValue ( User :: class . java ) ĊĠĠĠĠĠĠĠ ĠLog . d (" Latest Messages ", Ġ" Current Ġuser Ġ${ currentUser ?. profile ImageUrl }") ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( p 0 : ĠDatabase Error ) Ġ{ ĊĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġverify User Is LoggedIn () Ġ{ ĊĠĠĠ Ġval Ġuid Ġ= ĠFirebase Auth . getInstance (). uid ĊĠĠĠ Ġif Ġ( uid Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠRegister Activity :: class . java ) ĊĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK . or ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠ Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠ ĠR . id . menu _ new _ message Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠNew Message Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠR . id . menu _ sign _ out Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ ĠFirebase Auth . getInstance (). sign Out () ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠRegister Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK . or ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠ Ġmenu Inflater . inflate ( R . menu . nav _ menu , Ġmenu ) ĊĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠ Ġ} Ċ Ċ } Ċ