package Ġcom . h ann es dor fm ann . navigation . view . login Ċ Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġcom . h ann es dor fm ann . navigation . domain . user . Login StateMachine Ċ import Ġcom . h ann es dor fm ann . navigation . utils . plus Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ Ċ class ĠLogin ViewModel ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogin StateMachine : ĠLogin StateMachine , ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġon SignUp Clicked : Ġ(() Ġ-> ĠUnit )? , ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġon Forgot Password Clicked : Ġ(() Ġ-> ĠUnit )? Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġstate : ĠMutable LiveData < Login ViewState > Ġ= ĠMutable LiveData < Login ViewState >() ĊĊĠĠĠ Ġprivate Ġval Ġdis pos ables Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshared Login State Ġ= Ġlogin StateMachine . state ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. share () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĊĠĠĠĠĠĠĠ Ġdis pos ables Ġ+ Ġshared Login State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= ĠLogin StateMachine . State . Successful Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin StateMachine . State . Loading Ġ-> ĠLogin ViewState . Loading State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin StateMachine . State . Unknown User Error Ġ-> ĠLogin ViewState . Show Login Form WithError State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException ("$ it Ġshould Ġnever Ġbe Ġreached ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start With ( Login ViewState . Show Login Form ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġlogin ( login Credentials : ĠLogin StateMachine . Login Credentials ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogin StateMachine . input . accept ( login Credentials ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsign Up (){ ĊĠĠĠĠĠĠĠ Ġon SignUp Clicked !! () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġforgot Password (){ ĊĠĠĠĠĠĠĠ Ġon Forgot Password Clicked !! () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ Ġdis pos ables . dispose () ĊĠĠĠĠĠĠĠ Ġon SignUp Clicked Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġon Forgot Password Clicked Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ sealed Ġclass ĠLogin ViewState Ġ{ ĊĠĠĠ Ġobject ĠShow Login Form Ġ: ĠLogin ViewState () ĊĠĠĠ Ġobject ĠLoading State Ġ: ĠLogin ViewState () ĊĠĠĠ Ġobject ĠShow Login Form WithError State Ġ: ĠLogin ViewState () Ċ }