package Ġcom . dw training . fragments Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . dw training . arch comp module 2 . R Ċ import Ġcom . dw training . arch comp module 2 . databinding . Fragment Login Binding Ċ import Ġcom . dw training . base . Base Fragment Ċ import Ġcom . dw training . dialogs . Simple Progress Dialog Ċ import Ġcom . dw training . models . User Ċ import Ġcom . dw training . view models . Login ViewModel Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* Ġ@ author ĠG iov ani ĠG on z Ã¡ lez Ċ Ġ* ĠCreated Ġby ĠG iov ani Ġon Ġ 2 0 2 0 - 0 6 - 2 1 . Ċ Ġ*/ Ċ class ĠLogin Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠLogin ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġvar Ġdialog : ĠSimple Progress Dialog ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbinding : ĠFragment Login Binding ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġdialog Ġ= ĠSimple Progress Dialog () ĊĠĠĠĠĠĠĠ Ġcontext ?. theme ?. apply Style ( R . style . Login Theme , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetContentView ( container : ĠViewGroup ?): ĠView Ġ= ĊĠĠĠĠĠĠĠ ĠFragment Login Binding . inflate ( layout Inflater ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ}. root ĊĊĠĠĠ Ġoverride Ġfun Ġon View Fragment Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . onError Occurred Ġ= Ġ{ Ġproperty , Ġold , Ġnew Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Log Property ", Ġ"$ new Ġ- Ġ$ old ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( property . name Ġ== Ġ" username Error ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. Username EditText ?. error Ġ= Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. Password EditText ?. error Ġ= Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding ?. button Login ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog ?. show ( require Activity (). support FragmentManager , Ġ" Progress Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . user Ġ= ĠUser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġbinding ?. Username EditText ?. text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġbinding ?. Password EditText ?. text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . login ( viewModel . user ) Ġ{ Ġcredentials Are Ok Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( credentials Are Ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ Ġgo To Main () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Bad Credentials Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon Back Pressed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. finish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Bad Credentials Dialog () Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( getString ( R . string . error _ bad _ credentials _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( getString ( R . string . error _ bad _ credentials _ message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . ok )) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. create (). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġgo To Main () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay ( 2 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġdialog ?. dismiss () ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġbundle Of ( HAS _ TOOL BAR _ KEY Ġto Ġtrue ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . main Fragment , Ġbundle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġbinding Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }