package Ġn tn u 2 0 . im t 3 6 7 3 . group 4 . aves . data Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . google . android . gms . tasks . Task Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . firestore . Collection Reference Ċ import Ġcom . google . firebase . firestore . Document Reference Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ Ċ class ĠFire store Repository Ġ{ ĊĊĠĠĠ Ġval ĠTAG Ġ= Ġ" FIRE BASE _ REPOSITORY " ĊĠĠĠ Ġvar Ġfire store DB Ġ= ĠFirebase Fire store . getInstance () ĊĠĠĠ Ġvar Ġuser Ġ= ĠFirebase Auth . getInstance (). currentUser ĊĊĠĠĠ Ġprivate Ġval ĠcurrentUser Doc Ref : ĠDocument Reference ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfire store DB . document ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" users /${ Firebase Auth . getInstance (). uid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠNullPointerException (" UID Ġis Ġnull .") }" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġinit CurrentUser If First Time ( onComplete : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠcurrentUser Doc Ref . get (). add On Success Listener Ġ{ Ġdoc Snap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! doc Snap . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ"" ĠĠ Ġ// ĠGet Ġthe Ġname Ġlinked Ġwith Ġthe Ġgoogle Ġsign Ġin Ġprovided Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġemail : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc User Ġ= ĠFirebase Auth . getInstance (). currentUser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc User ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠName Ġfrom Ġsign - in Ġprovider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġc User . displayName . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġc User . email . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew User Ġ= ĠUser ( name , Ġemail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentUser Doc Ref . set ( new User ). add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate CurrentUser ( ĊĠĠĠĠĠĠĠ Ġname : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġemail : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Field Map Ġ= Ġmutable Map Of < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġif Ġ( name . isNotBlank ()) Ġuser Field Map [" name "] Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġif Ġ( email . isNotBlank ()) Ġuser Field Map [" email "] Ġ= Ġemail ĊĠĠĠĠĠĠĠ ĠcurrentUser Doc Ref . update ( user Field Map ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser (): ĠDocument Reference Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠcurrentUser Doc Ref ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Password () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġemail Address Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif ( user ?. email Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Address Ġ= Ġuser !!. email . toString () ĊĠĠĠĠĠĠĠ ĠFirebase Auth . getInstance (). send Password Reset Email ( email Address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Email Ġsent .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete User () Ġ{ ĊĠĠĠĠĠĠĠ Ġuser !!. delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" AV ES ", Ġ" User Ġaccount Ġdeleted .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġsave Ġobservation Ġto Ġfirebase ĊĠĠĠ Ġfun Ġsave Observation Data ( observation Data : ĠOb servation Data ): ĠTask < Document Reference > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfire store DB . collection (" observations "). document ( user !!. uid ). collection (" observations ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( observation Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġget Ġthe Ġusers Ġsaved Ġobservations Ġfrom Ġfirebase ĊĠĠĠ Ġfun Ġget Saved Ob servations (): ĠCollection Reference Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfire store DB . collection (" observations /${ user !!. uid }/ observations ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġdelete Ġan Ġobservation ĊĠĠĠ Ġfun Ġdelete Observation ( observation Data : ĠOb servation Data ): ĠTask < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocument Reference Ġ= Ġfire store DB . collection (" observations /${ user !!. uid }/ observations ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. document ( observation Data . id . toString ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġdocument Reference . delete () ĊĠĠĠ Ġ} Ċ Ċ }