package Ġnet . squ anch y . signin Ċ Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Account Ċ import Ġcom . google . firebase . auth . Firebase User Ċ Ċ import Ġnet . squ anch y . service . firebase . Firebase Auth Service Ċ import Ġnet . squ anch y . support . lang . Optional Ċ Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Maybe Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ Ċ class ĠSign In Service ( private Ġval Ġauth Service : ĠFirebase Auth Service ) Ġ{ ĊĊĠĠĠ Ġfun Ġis Signed In To Google (): ĠMaybe < Boolean > Ġ= ĊĠĠĠĠĠĠĠ ĠcurrentUser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first ( Optional . abs ent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isPresent Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . get () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfirebase User Ġ-> Ġ! firebase User . is Anonymous Ġ} ĊĊĠĠĠ Ġfun Ġsign In Anonymous ly If Ne cessary (): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġauth Service . currentUser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Or Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Comp letable Ġ{ Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentUser () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Or Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Comp letable Ġ{ ĠComp letable . complete () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Service . signIn Anonymous ly () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠcurrentUser (): ĠObservable < Optional < Firebase User >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġauth Service . currentUser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġsign In With Google ( account : ĠGoogle SignIn Account ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġauth Service . signIn With Google ( account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsign Out (): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġauth Service . sign Out () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠ Ġ} Ċ } Ċ