package Ġcom . en b creative . de mon ote app . ui . auth Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . en b creative . de mon ote app . data . repository . UserRepository Ċ import Ġcom . en b creative . de mon ote app . utils . ApiException Ċ import Ġcom . en b creative . de mon ote app . utils . Cor outines Ċ Ċ class ĠAuth ViewModel ( private Ġval Ġrepository : ĠUser Repository ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġemail : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġpassword : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġpassword Confirmed : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġlistener : ĠProcess Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġ_ login Result Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġfun Ġget LoggedIn User () Ġ= Ġrepository . getUser () ĊĊĠĠĠ Ġfun Ġon Login Button Click ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener ?. on Started () ĊĠĠĠĠĠĠĠ Ġif Ġ( email . isNull OrEmpty () Ġ|| Ġpassword . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġal Ġerrors Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Failure (" Invalid ĠEmail Ġor ĠPassword ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCor outines . main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogin Response Ġ= Ġrepository . login ( email !! , Ġpassword !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Response . user ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Result . value Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save User ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ main ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Result . value Ġ= Ġlogin Response . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Result . value Ġ= Ġ" Login Ġfailed . Ġ${ e . message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlistener ?. on Success Result (_ login Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon SignUp Button Click ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener ?. on Started () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( name . isNull OrEmpty () Ġ|| Ġemail . isNull OrEmpty () Ġ|| Ġpassword . isNull OrEmpty () Ġ|| Ġpassword Confirmed . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Failure (" Invalid Ġor ĠEmpty Ġfield .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCor outines . main Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsign Up Response Ġ= Ġrepository . sign Up ( name !! , Ġemail !! , Ġpassword !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign Up Response . user ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Result . value Ġ= Ġit . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save User ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ main ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Result . value Ġ= Ġ" Cannot ĠSign ĠUp ! Ġ- Ġ${ sign Up Response . message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Result . value Ġ= Ġ" Sign ĠUp Ġfailed . Ġ${ e . message }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlistener ?. on Success Result (_ login Result ) ĊĠĠĠ Ġ} Ċ }