package Ġcom . ch ir ag . world of play assignment . ui . login Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Switch Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . ch ir ag . world of play assignment . R Ċ import Ġcom . ch ir ag . world of play assignment . ui . Base Activity Ċ import Ġcom . ch ir ag . world of play assignment . ui . dashboard . Dashboard Activity Ċ import Ġcom . ch ir ag . world of play assignment . ui . login . view models . Login ViewModel Ċ import Ġcom . ch ir ag . world of play assignment . ui . login . view models . Login ViewModel Factory Ċ import Ġkotlinx . android . synt hetic . main . activity _ login .* ĊĊ Ċ class ĠLogin Activity : ĠBase Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogin ViewModel : ĠLogin ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Theme ( get Saved Theme ()) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ login ) ĊĠĠĠĠĠĠĠ Ġlogin ViewModel Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin ViewModel Factory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). get ( Login ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġlogin ViewModel . login Form State . observe ( this @ Login Activity , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogin State Ġ= Ġit Ġ?: Ġreturn @ Observer ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdisable Ġlogin Ġbutton Ġunless Ġboth Ġusername Ġ/ Ġpassword Ġis Ġvalid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Btn . isEnabled Ġ= Ġlogin State . is Data Valid ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( login State . username Error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername . error Ġ= ĠgetString ( login State . username Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( login State . password Error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// password . e Ġ= ĠgetString ( login State . password Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġlogin ViewModel . login Result . observe ( this @ Login Activity , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogin Result Ġ= Ġit Ġ?: Ġreturn @ Observer ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading ProgressBar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( login Result . error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Login Failed ( login Result . error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( login Result . success Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ui With User ( login Result . success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Complete Ġand Ġdestroy Ġlogin Ġactivity Ġonce Ġsuccessful ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġusername . after TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin ViewModel . login Data Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpassword . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin ViewModel . login Data Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Info . IME _ ACTION _ DONE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin ViewModel . login ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading ProgressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin ViewModel . login ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtheme Switch . isChecked Ġ= Ġcurrent Theme Ġ!= ĠTHE ME _ 2 ĊĊĠĠĠĠĠĠĠ Ġtheme Switch . setOn Checked ChangeListener ( Compound Button . On Checked ChangeListener Ġ{ Ġbutton View , Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Theme ( isChecked ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Theme ( checked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( checked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Theme ( THEME _ 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Theme ( THEME _ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Ui With User ( model : ĠLog ged In User View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwelcome Ġ= ĠgetString ( R . string . welcome ) ĊĠĠĠĠĠĠĠ Ġval ĠdisplayName Ġ= Ġmodel . displayName ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġ: Ġinitiate Ġsuccessful Ġlogged Ġin Ġexperience ĊĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ welcome Ġ$ displayName ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠ Ġ). show () ĊĊĠĠĠĠĠĠĠ Ġval Ġdashboard Intent Ġ= ĠIntent ( this , ĠDashboard Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( dashboard Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Login Failed (@ String Res Ġerror String : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġerror String , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġfunction Ġto Ġsimplify Ġsetting Ġan Ġafter TextChanged Ġaction Ġto ĠEditText Ġcomponents . Ċ Ġ*/ Ċ fun ĠEditText . after TextChanged ( after TextChanged : Ġ( String ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġthis . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( editable : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter TextChanged . invoke ( editable . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĠĠĠ Ġ}) Ċ Ċ } Ċ