package Ġcom . ch uo . timetable . login Ċ Ċ import Ġandroid . util . Patterns Ċ import Ġandroidx . lifecycle . Saved State Handle Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . ch uo . timetable . base . Base ViewModel Ċ import Ġcom . ch uo . timetable . model . Teacher Ċ import Ġcom . ch uo . timetable . repository . Firebase Repository Ċ import Ġcom . ch uo . timetable . ui . Screen Navigator Ċ import Ġcom . ch uo . timetable . view model . Ass isted Saved State ViewModel Factory Ċ import Ġcom . google . android . gms . tasks . Task Ċ import Ġcom . google . firebase . auth . Auth Result Ċ import Ġcom . squareup . inject . ass isted . Ass isted Ċ import Ġcom . squareup . inject . ass isted . Ass isted Inject Ċ import Ġkotlinx . coroutines . Coroutine ExceptionHandler Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . regex . Pattern Ċ import Ġjavax . inject . Inject Ċ Ċ @ Experimental Cor outines Api Ċ class ĠLogin ViewModel Ċ @ Ass isted Inject Ċ constructor ( firebase Repository : ĠFirebase Repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State : ĠLogin ViewState , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Ass isted Ġprivate Ġval Ġsaved State Handle : ĠSaved State Handle Ċ ) Ġ: ĠBase ViewModel < Login ViewState >( firebase Repository , Ġview State ) Ġ{ ĊĊĠĠĠ Ġ@ Ass isted Inject . Factory ĊĠĠĠ Ġinterface ĠFactory Ġ: ĊĠĠĠĠĠĠĠ ĠAss isted Saved State ViewModel Factory < @ Jvm Suppress W ild cards ĠLogin ViewModel > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( saved State Handle : ĠSaved State Handle ): ĠLogin ViewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhandle Submit Button Clicked ( username : ĠString , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogin With Email And Password ( username , Ġpassword ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun ĠhandleChange Pass ( email : ĠString ){ ĊĠĠĠĠĠĠĠ Ġchange Password ( email ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġteacher List (){ ĊĠĠĠĠĠĠĠ Ġobserve Teacher List () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġ Ġfun Ġobserve Teacher List (){ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Repository . observe T utors (). collect Ġ{ Ġresult : ĠResult < List < Teacher > ?> -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . is Success Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . te achers LiveData Ġ= Ġfirebase Repository . observe Teacher LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . is Failure Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( result . exception OrNull ()?. message !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Password ( email : ĠString ){ ĊĠĠĠ Ġif ( email . isEmpty ()){ ĊĠĠĠĠĠĠĠ Ġview State . errorMessage Ġ= Ġ" Fill ĠEmail Ġfield " ĊĠĠĠĠĠĠĠ Ġview State . progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġupdate Ui () ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview State . submit Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġview State . errorMessage Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġview State . progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġupdate Ui () ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Repository . change Password ( email ). collect Ġ{ result : ĠResult < Task < Void >> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . is Success ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . submit Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . change Pass Message Ġ= Ġ" Password ĠChanging ĠEmail ĠSent " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . is Failure ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . submit Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . errorMessage Ġ= Ġ Ġresult . exception OrNull ()?. message !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġlogin With Email And Password ( email : ĠString , Ġpassword : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! validate ( email , Ġpassword )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview State . submit Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġview State . progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġupdate Ui () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġ Ġfirebase Repository . login Teacher ( email , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow . collect Ġ{ result : ĠResult < Auth Result > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . is Success ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . submit Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . progress Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . is Failure ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . submit Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . errorMessage Ġ= Ġ Ġresult . exception OrNull ()?. message !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġvalidate ( email : ĠString , Ġpassword : ĠString ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( email . isEmpty () Ġ|| Ġpassword . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . view State . errorMessage Ġ= Ġ" Please Ġfill Ġout Ġall Ġthe Ġfields " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! Patterns . EMAIL _ ADDRESS . matcher ( email ). matches ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . view State . errorMessage Ġ= Ġ" Please Ġenter Ġa Ġvalid Ġemail " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( password . length Ġ< Ġ 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . view State . errorMessage Ġ= Ġ" Password Ġmust Ġbe Ġat Ġleast Ġ 6 Ġcharacters Ġlong " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview State . progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview State . errorMessage Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġview State . progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ }