package Ġcom . nak ul . blog Wall . view models Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . nak ul . blog Wall . My Application Ċ import Ġcom . nak ul . blog Wall . R Ċ import Ġcom . nak ul . blog Wall . models . auth . Login Model Ċ import Ġcom . nak ul . blog Wall . models . auth . Login Response Ċ import Ġcom . nak ul . blog Wall . models . auth . Register Model Ċ import Ġcom . nak ul . blog Wall . models . auth . Register Response Ċ import Ġcom . nak ul . blog Wall . models . network _ event . Event Ċ import Ġcom . nak ul . blog Wall . network . ApiException Ċ import Ġcom . nak ul . blog Wall . network . Auth Interface Ċ import Ġcom . nak ul . blog Wall . repositories . Auth Repository Ċ import Ġcom . nak ul . blog Wall . utils . Util Constants Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠLogin ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrepository : ĠAuth Repository ĊĠĠĠ Ġprivate Ġval Ġshared Preferences : ĠSharedPreferences ĊĊĠĠĠ Ġval Ġsignup Event : ĠLive Data < Event < Register Response >> ĊĠĠĠ Ġprivate Ġval Ġ_ signup Event : ĠMutable LiveData < Event < Register Response >> ĊĊĠĠĠ Ġval Ġsign in Event : ĠLive Data < Event < Login Response >> ĊĠĠĠ Ġprivate Ġval Ġ_ signin Event : ĠMutable LiveData < Event < Login Response >> ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ signup Event Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġsignup Event Ġ= Ġ_ signup Event ĊĠĠĠĠĠĠĠ Ġ_ signup Event . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ_ signin Event Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġsign in Event Ġ= Ġ_ signin Event ĊĠĠĠĠĠĠĠ Ġ_ signin Event . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġrepository Ġ= ĠAuth Repository ( Auth Interface ()) ĊĠĠĠĠĠĠĠ Ġshared Preferences Ġ= Ġapplication . get SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtil Constants . fileName , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext . MODE _ PRIVATE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsign In User ( email : ĠString , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ signin Event . post Value ( Event . Loading ()) ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġrepository . login User ( Login Model ( email , Ġpassword )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save User ( shared Preferences , Ġres ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ signin Event . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . welcome ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠApiException ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ signin Event . post Value ( Event . Error ( e . message . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ signin Event . post Value ( Event . Error ( getString ( R . string . bad _ network ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ signup Event . post Value ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsign Up User ( email : ĠString , Ġname : ĠString , Ġpassword : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ_ signup Event . post Value ( Event . Loading ()) ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġrepository . register User ( Register Model ( email , Ġname , Ġpassword )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res . sent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ signup Event . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . register _ successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠApiException ( getString ( R . string . register _ failed )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠApiException ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ signup Event . post Value ( Event . Error ( e . message . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ signup Event . post Value ( Event . Error ( getString ( R . string . bad _ network ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ signup Event . post Value ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetString ( id : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Application < My Application >(). resources . getString ( id ) ĊĠĠĠ Ġ} Ċ }