package Ġcom . e it . en hanced consult ant . view Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . e it . en hanced consult ant . R Ċ import Ġcom . e it . en hanced consult ant . model .* Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . Firebase User Ċ import Ġcom . google . firebase . auth . k tx . auth Ċ import Ġcom . google . firebase . database . Data Snapshot Ċ import Ġcom . google . firebase . database . Database Error Ċ import Ġcom . google . firebase . database . Database Reference Ċ import Ġcom . google . firebase . database . Value EventListener Ċ import Ġcom . google . firebase . database . k tx . database Ċ import Ġcom . google . firebase . database . k tx . getValue Ċ import Ġcom . google . firebase . k tx . Firebase ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġ// ĠFirebase Ġinstance Ġvariables ĊĠĠĠ Ġprivate Ġval Ġdatabase Ġ= ĠFirebase . database . reference Ġ// ĠDatabase Ġ( Firebase ) Ġreference Ġfor Ġentire Ġproject ĊĠĠĠ Ġprivate Ġval Ġauth Ġ= ĠFirebase . auth ĊĠĠĠ Ġprivate Ġvar Ġuser : ĠFirebase User ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠUser Ġproperties Ġ( pre - defined Ġby ĠGoogle ; Ġwe ĠCAN NOT Ġadd Ġmore Ġfields ) ĊĠĠĠ Ġprivate Ġvar Ġuid : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġemail : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠdisplayName : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġphoto Url : ĠUri ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Email Verified : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġuser Ġ= Ġauth . currentUser ĊĊĠĠĠĠĠĠĠ Ġif Ġ( user Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNot Ġsigned Ġin , Ġlaunch Ġthe ĠSign ĠIn Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠEmail Password Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Profile () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetUser Profile () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ[ START Ġget _ user _ profile ] ĊĠĠĠĠĠĠĠ Ġuser Ġ= ĠFirebase . auth . currentUser ĊĠĠĠĠĠĠĠ Ġuser ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġuser 's ĠID , Ġunique Ġto Ġthe ĠFirebase Ġproject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuid Ġ= Ġ( user Ġas ĠFirebase User ). uid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. child (" users ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. child ( uid Ġas ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. child (" tasks ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value EventListener ( task Listener ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠName , Ġemail Ġaddress , Ġand Ġprofile Ġphoto ĠUrl ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdisplayName Ġ= Ġ( user Ġas ĠFirebase User ). displayName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ( user Ġas ĠFirebase User ). email ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Url Ġ= Ġ( user Ġas ĠFirebase User ). photoUrl ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġuser 's Ġemail Ġis Ġverified ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Email Verified Ġ= Ġ( user Ġas ĠFirebase User ). is Email Verified ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ[ END Ġget _ user _ profile ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd User ( uid : ĠString , Ġcontact Number : ĠString , Ġemail : ĠString , ĠfirstName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName : ĠString , Ġlevel : ĠInt , Ġlogged In : ĠBoolean , Ġpassword : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser ( contact Number , Ġemail , ĠfirstName , ĠlastName , Ġlevel , Ġlogged In , Ġpassword , ĠuserName ) ĊĠĠĠĠĠĠĠ Ġval Ġcomplete User Ġ= ĠComplete User ( user Ġ= Ġuser ) ĊĠĠĠĠĠĠĠ Ġval Ġcomplete User Values Ġ= Ġcomplete User . toMap () ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Updates Ġ= Ġhash Map Of < String , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ users /$ uid " Ġto Ġcomplete User Values ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdatabase . update Children ( child Updates ) Ġ// ĠTry Ġ. update Children Async Ġhere ------------------------------------------------ - ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Task ( accepted : ĠBoolean , Ġassigned By : ĠString , Ġassigned To : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted : ĠBoolean , Ġdecl ined : ĠBoolean , Ġdue Date : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString , Ġtime Stamp : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRe use Ġsame Ġkey Ġfor Ġall Ġthree Ġ" tables " ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġdatabase . child (" members "). push (). key ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Couldn 't Ġget Ġpush Ġkey ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġmembers Ġ" table " ĊĠĠĠĠĠĠĠ Ġval Ġmembers Task Ġ= ĠMembers Task ( assigned By , Ġassigned To ) ĊĠĠĠĠĠĠĠ Ġval Ġmembers Task Values Ġ= Ġmembers Task . toMap () ĊĊĠĠĠĠĠĠĠ Ġ// Ġmeta Ġ" table " ĊĠĠĠĠĠĠĠ Ġval Ġmeta Task Ġ= ĠMeta Task ( due Date , Ġname , Ġtime Stamp ) ĊĠĠĠĠĠĠĠ Ġval Ġmeta Task Values Ġ= Ġmeta Task . toMap () ĊĊĠĠĠĠĠĠĠ Ġ// Ġtasks Ġ" table " ĊĠĠĠĠĠĠĠ Ġval Ġcomplete Task Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComplete Task ( accepted , Ġassigned By , Ġassigned To , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted , Ġdecl ined , Ġdue Date , Ġname , Ġtime Stamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcomplete Task Values Ġ= Ġcomplete Task . toMap () ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Updates Ġ= Ġhash Map Of < String , ĠAny >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ members /$ key " Ġto Ġmembers Task Values , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ meta /$ key " Ġto Ġmeta Task Values , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ tasks /$ key " Ġto Ġcomplete Task Values ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdatabase . update Children ( child Updates ) Ġ// ĠTry Ġ. update Children Async Ġhere ------------------------------------------------ - ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠAdd Ġvalue Ġevent Ġlistener Ġto Ġthe Ġpost ĊĠĠĠ Ġprivate Ġval Ġtask Listener Ġ= Ġobject Ġ: ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( data Snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠPost Ġobject Ġand Ġuse Ġthe Ġvalues Ġto Ġupdate Ġthe ĠUI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġdata Snapshot . getValue < Complete Task >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate ĠUI Ġwith Ġnew Ġtask Ġinformation Ġand Ġsend Ġpush Ġnotification ----------------------------------------------------------------------- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( database Error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGetting ĠPost Ġfailed , Ġlog Ġa Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" load Post : on Cancelled ", Ġdatabase Error . to Exception ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" Failed Ġto Ġload Ġtask .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete User ( uid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. child (" users ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. child ( uid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Value () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Task ( uid : ĠString , Ġkey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. child (" users ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. child ( uid ). child (" tasks ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. child ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Value () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . sign _ out _ menu Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth . sign Out () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuid Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdisplayName Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Url Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Email Verified Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠEmail Password Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" MainActivity " ĊĠĠĠ Ġ} Ċ }