package Ġcom . id v mob 4 . pi ction is Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . database .* Ċ 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 _ chat _ log .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ draw _ in .* Ċ import Ġkotlinx . android . synt hetic . main . latest _ message _ row . view .* Ċ Ċ class ĠDraw In Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġvar ĠcurrentUser : User ?= Ġnull ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= Ġ" Draw In " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ draw _ in ) ĊĊĠĠĠĠĠĠĠ Ġ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 Ġlist ner Ġon Ġyour Ġadapter ĊĊĠĠĠĠĠĠĠ Ġadapter . setOn ItemClickListener { Ġitem , Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" 1 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠChat Log Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 , Ġprevious Child Name : Ġ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 , Ġprevious Child Name : Ġ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 Removed ( snapshot : ĠData Snapshot ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Moved ( snapshot : ĠData Snapshot , Ġprevious Child Name : ĠString ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġadapter Ġ= ĠGroup Adapter < ViewHolder >() ĊĊĊĠĠĠ Ġ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 (" Draw In Activity ", Ġ" current Ġuser Ġ${ currentUser ?. username }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 _ new _ drawing Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠNew Draw 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 ) ĊĠĠĠ Ġ} Ċ }