/* Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCreated Ġby ĠM ur illo ĠCom ino Ġon Ġ 0 2 / 0 3 / 2 0 Ġ 1 5 : 5 0 Ċ Ġ* Ġ Ġ* ĠGithub : Ġgithub . com / M ur illo Com ino Ċ Ġ* Ġ Ġ* ĠStack Over Flow : Ġpt . stackoverflow . com / users / 1 2 8 5 7 3 Ċ Ġ* Ġ Ġ* ĠEmail : Ġm ur illo _ com ino @ hotmail . com Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 Ġ. ĠAll Ġrights Ġreserved . Ċ Ġ* Ġ Ġ* ĠLast Ġmodified Ġ 0 2 / 0 3 / 2 0 Ġ 1 5 : 3 8 Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . on imus . bl ab las ocial media . mv vm . ui . auth . login ĊĊ Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Account Ċ import Ġcom . google . android . gms . tasks . Task Ċ import Ġcom . google . firebase . auth . Auth Credential Ċ import Ġcom . on imus . bl ab las ocial media . mv vm . common . Authentication ViewModel Ċ import Ġcom . on imus . bl ab las ocial media . mv vm . data . repository . UserRepository Ċ import Ġcom . on imus . bl ab las ocial media . mv vm . utils . Handle Errors Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers ĊĊ Ċ class ĠLogin ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠUser Repository , ĊĠĠĠ Ġprivate Ġval Ġprocess Scheduler : ĠScheduler Ġ= ĠS chedulers . io (), ĊĠĠĠ Ġprivate Ġval Ġobserver Scheduler : ĠScheduler Ġ= ĠAndroid Schedulers . main Thread () Ċ ) Ġ: ĠAuthentication ViewModel () Ġ{ ĊĊĠĠĠ Ġvar Ġemail : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġpassword : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġlogin Listener : ĠLogin Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġhandle Errors Ġ= ĠHandle Errors () ĊĊĠĠĠ Ġ// dis posable Ġto Ġdispose Ġthe ĠComp letable ĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbutton Ġhandler ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠonClick Button Login () Ġ{ ĊĠĠĠĠĠĠĠ Ġlogin Listener ?. reset TextInput Layout () ĊĊĠĠĠĠĠĠĠ Ġval Ġcomplet able Ġ= Ġrepository . log In User ( email , Ġpassword ). subscribe On ( process Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( observer Scheduler ) ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġdis posable To Authentication ( comp letable , Ġlogin Listener !! , Ġhandle Errors ) ĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( dis posable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick Button Google SignIn ( task : ĠTask < Google SignIn Account >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// login Ġprocess ĊĠĠĠĠĠĠĠ Ġset Action To Google SignIn ( task ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfirebase Auth With Google ( credential : ĠAuth Credential ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// calling Ġrepository Ġto Ġperform Ġthe Ġactual Ġauthentication ĊĠĠĠĠĠĠĠ Ġval Ġcomplet able Ġ= Ġrepository . log In User ( credential ). subscribe On ( process Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( observer Scheduler ) ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġdis posable To Authentication ( comp letable , Ġlogin Listener !! , Ġhandle Errors ) ĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( dis posable ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick TextView Register () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// go Ġto Ġfragment _ register ĊĠĠĠĠĠĠĠ Ġlogin Listener ?. onClick TextView Register () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick TextView Forgot Password () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// go Ġto Ġfragment _ reset _ password ĊĠĠĠĠĠĠĠ Ġlogin Listener ?. onClick TextView Forgot Password () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAction Ġfor Ġbuttons ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Action To Google SignIn ( task : ĠTask < Google SignIn Account >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// calling Ġthe Ġrepository Ġto Ġretrieve Ġuser Ġinformation Ġon Ġthe Ġgoogle Ġaccount . ĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( get Disposable On Google SignIn ( repository . google SignIn ( task ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Disposable On Google SignIn ( comp letable : ĠComp letable ): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcomplet able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( process Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( observer Scheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Listener ?. on Success Google Sign () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġhandle Errors . getMessage Error ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// show Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Listener ?. on Failure Auth ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// on Cle ared Ġis Ġcalled Ġwhen Ġthe Ġapp Ġis Ġput Ġinto Ġthe Ġbackground Ġand Ġthe Ġapp Ġprocess Ġis Ġkilled Ġin Ġorder Ġto Ġfree Ġup Ġthe Ġsystem 's Ġmemory . ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġ// ĠUsing Ġdispose Ġwill Ġclear Ġall Ġand Ġset Ġis Disposed Ġ= Ġtrue , Ġso Ġit Ġwill Ġnot Ġaccept Ġany Ġnew Ġdis posable ĊĠĠĠĠĠĠĠ Ġdis pos ables . dispose () ĊĠĠĠ Ġ} Ċ } Ċ