package Ġie . wit . p int mark . views . account . login Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . activity . result . Activity Result Launcher Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġie . wit . p int mark . views . marker list . Marker ListView Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġie . wit . p int mark . main . Main App Ċ import Ġie . wit . p int mark . models . Marker Fire Store ĊĊ Ċ class ĠLogin Presenter Ġ( val Ġview : ĠLogin View ) Ġ Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogin Intent Launcher Ġ: ĠActivity Result Launcher < Intent > ĊĠĠĠ Ġvar Ġapp : ĠMain App Ġ= Ġview . application Ġas ĠMain App ĊĠĠĠ Ġvar Ġfire Store : ĠMarker Fire Store ? Ġ= Ġnull ĊĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġregister Login Callback () ĊĠĠĠĠĠĠĠ Ġif Ġ( app . markers Ġis ĠMarker Fire Store ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfire Store Ġ= Ġapp . markers Ġas ĠMarker Fire Store ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġobject Ġused Ġto Ġinteract Ġwith Ġfirebase ĊĠĠĠ Ġvar Ġauth : ĠFirebase Auth Ġ= ĠFirebase Auth . getInstance () ĊĊĠĠĠ Ġfun Ġdo SignIn ( username : ĠString , Ġsecret : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfirst Ġshow Ġthe Ġlogin Ġprogress Ġspinner Ġicon ĊĠĠĠĠĠĠĠ Ġview . show Progress () ĊĠĠĠĠĠĠĠ Ġ// Ġauthenticate Ġusing Ġfirebase ĊĠĠĠĠĠĠĠ Ġauth . signIn With Email And Password ( username , Ġsecret ). add On Complete Listener ( view !! ) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfetch Ġthe Ġmarkers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfire Store !!. fetch Markers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġafter Ġfetching Ġthe Ġmarkers , Ġgo Ġto Ġthe Ġlist Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlauncher Intent Ġ= ĠIntent ( view , ĠMarker ListView :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Intent Launcher . launch ( launcher Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdisplay Ġthe Ġerror Ġto Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Sn ackBar (" Login Ġfailed : Ġ${ task . exception ?. message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Register ( username : ĠString , Ġsecret : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfirst Ġshow Ġthe Ġlogin Ġprogress Ġspinner Ġicon ĊĠĠĠĠĠĠĠ Ġview . show Progress () ĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġa Ġnew Ġuser Ġin Ġfirebase ĊĠĠĠĠĠĠĠ Ġauth . createUser With Email And Password ( username , Ġsecret ). add On Complete Listener ( view !! ) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfire Store !!. fetch Markers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġafter Ġfetching Ġthe Ġmarkers , Ġgo Ġto Ġthe Ġlist Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlauncher Intent Ġ= ĠIntent ( view , ĠMarker ListView :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Intent Launcher . launch ( launcher Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdisplay Ġthe Ġerror Ġto Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Sn ackBar (" Login Ġwas Ġun successful : Ġ${ task . exception ?. message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Progress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsign Out (){ ĊĠĠĠĠĠĠĠ ĠFirebase Auth . getInstance (). sign Out () ĊĠĠĠĠĠĠĠ Ġ// Ġclear Ġthe Ġlocal Ġmarkers ĊĠĠĠĠĠĠĠ Ġapp . markers . clear () ĊĠĠĠĠĠĠĠ Ġ// Ġgo Ġback Ġto Ġthe Ġlogin Ġview ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( view , ĠLogin View :: class . java ) ĊĠĠĠĠĠĠĠ Ġlogin Intent Launcher . launch ( intent ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġregister Login Callback (){ ĊĠĠĠĠĠĠĠ Ġlogin Intent Launcher Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . register For Activity Result ( Activity Result Contracts . Start Activity For Result ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ Ġ} ĊĠĠĠ Ġ} Ċ }