package Ġnet . formula 9 7 . stack task . logic . impl Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Account Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Client Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Options Ċ import Ġcom . google . android . gms . common . api . ApiException Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . Firebase User Ċ import Ġcom . google . firebase . auth . Google Auth Provider Ċ import Ġcom . google . firebase . database . Database Reference Ċ import Ġnet . formula 9 7 . stack task . R Ċ import Ġnet . formula 9 7 . stack task . kind . Task Item Ċ import Ġnet . formula 9 7 . stack task . logic . Firebase Logic Ċ import Ġnet . formula 9 7 . stack task . misc . App Constants Ċ import Ġnet . formula 9 7 . stack task . repository . Firebase Repository Ċ import Ġjava . util .* Ċ Ċ class ĠFirebase Logic Impl Ġconstructor ( private Ġval Ġfirebase Repository : ĠFirebase Repository , Ġprivate Ġval Ġcontext : ĠContext ) Ġ: ĠFirebase Logic Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġlogout ( callback : ĠFirebase Logic . On SignIn Finished Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠĠĠĠĠ Ġauth . add Auth State Listener Ġ{ Ġfirebase Auth Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" logout ", Ġ" Firebase Auth Ġstate Ġchanged .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( firebase Auth . currentUser Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Success ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġauth . sign Out () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġgoogle SignIn Client : ĠGoogle SignIn Client ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Google SignIn Client (): ĠGoogle SignIn Client Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( google SignIn Client Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg so : ĠGoogle SignIn Options Ġ= ĠGoogle SignIn Options . Builder ( Google SignIn Options . DEFAULT _ SIGN _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. requestId Token ( context . getString ( R . string . default _ web _ client _ id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Email () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle SignIn Client Ġ= ĠGoogle SignIn . getClient ( context , Ġg so ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġgoogle SignIn Client !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsign In With Google ( account : ĠGoogle SignIn Account , Ġcallback : ĠFirebase Logic . On SignIn Finished Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcred Ġ= ĠGoogle Auth Provider . getC redential ( account . id Token , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĊĠĠĠĠĠĠĠ Ġauth . signIn With Credential ( cred ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Success ( auth . currentUser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Failure ( task . exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetCurrent User (): ĠFirebase User ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFirebase Auth . getInstance (). currentUser ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Tasks ( uid : ĠString , ĠorderBy : ĠInt ): ĠList < Task Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġraw TaskList : ĠMutable List < Task Item > Ġ= Ġfirebase Repository . read Tasks Once ( uid ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġchange Order ( raw TaskList . toList (), ĠorderBy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Task ( task Item : ĠTask Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuid Ġ= ĠgetCurrent User () !!. uid ĊĠĠĠĠĠĠĠ Ġfirebase Repository . add Task ( uid , Ġtask Item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Task ( task Item : ĠTask Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuid Ġ= ĠgetCurrent User () !!. uid ĊĠĠĠĠĠĠĠ Ġfirebase Repository . update Task ( uid , Ġtask Item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchange Order ( task List : ĠList < Task Item >, ĠorderBy : ĠInt ): ĠMutable List < Task Item > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmutable List : ĠMutable List < Task Item > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġmutable List . addAll ( task List ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcurrent Serial : ĠLong Ġ= ĠDate (). time ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( orderBy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Constants . ORDER _ BY _ D UE _ DATE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable List . sortBy Ġ{ Ġit . due Date Ġ- Ġcurrent Serial Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Constants . ORDER _ BY _ PRIORITY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable List . sortBy Descending Ġ{ Ġit . priority Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Constants . ORDER _ BY _ NAME Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable List . sortBy Ġ{ Ġit . task Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable List . sortBy Ġ{ Ġit . due Date Ġ- Ġcurrent Serial Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmutable List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Task ( task Item : ĠTask Item , Ġcallback : ĠFirebase Logic . On Submit Finished Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuid Ġ= ĠgetCurrent User () !!. uid ĊĊĠĠĠĠĠĠĠ Ġfirebase Repository . add Task ( uid , Ġtask Item , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Task ( task Item : ĠTask Item , Ġcallback : ĠFirebase Logic . On Submit Finished Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuid Ġ= ĠgetCurrent User () !!. uid ĊĠĠĠĠĠĠĠ Ġfirebase Repository . update Task ( uid , Ġtask Item , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Reference ( uid : ĠString ): ĠDatabase Reference Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfirebase Repository . getReference ( uid ) ĊĠĠĠ Ġ} Ċ }