/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠNav j ot ĠSing h ĠB edi . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . de ha at . good reads . screens Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . input method . Editor Info . IME _ ACTION _ GO Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . de ha at . good reads . R Ċ import Ġcom . de ha at . good reads . databinding . Activity Login Binding Ċ import Ġcom . de ha at . good reads . utils . Global Config . Settings . VALID _ EMAIL Ċ import Ġcom . de ha at . good reads . utils . Global Config . Settings . VALID _ PASSWORD Ċ import Ġcom . de ha at . good reads . utils . Utils Ċ import Ġcom . de ha at . good reads . view models . Login ViewModel Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġio . reactivex . rx java 3 . kotlin . subscribe By Ċ import Ġkotlinx . android . synt hetic . main . activity _ login .* Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠActivity Ġto Ġperform Ġlogin Ċ Ġ*/ Ċ @ Android EntryPoint Ċ class ĠLogin Activity Ġ: ĠAppCompatActivity ( R . layout . activity _ login ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġemail Pattern Ġ= Ġ"[ a - zA - Z 0 - 9 ._ - ]+ @ [ a - z ]+ \\. + [ a - z ] +" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Login Binding ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠLogin ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġutils : ĠUtils ĊĊĠĠĠ Ġoverride Ġfun Ġon Post Create ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Post Create ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Login Binding . bind ( root ) ĊĠĠĠĠĠĠĠ Ġattach Text Watcher () ĊĠĠĠĠĠĠĠ Ġattach Callback () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġattach Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . callback Ġ= Ġobject Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlogin () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Login () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . edit Text Password . setOn Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Editor ActionListener Ġif Ġ( action Id Ġ== ĠI ME _ ACTION _ GO Ġ&& Ġbinding . button Login . isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Login . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġattach Text Watcher () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . edit Text Email . add TextChanged Listener ( on TextChanged Ġ= Ġ{ Ġs , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . enable Login . post Value ( it . isNotBlank () Ġ&& Ġbinding . edit Text Password . text . isNotBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . edit Text Password . add TextChanged Listener ( on TextChanged Ġ= Ġ{ Ġs , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . enable Login . post Value ( it . isNotBlank () Ġ&& Ġbinding . edit Text Email . text . isNotBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . enable Login . observe ( this , ĠObserver < Boolean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Login . isEnabled Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġperform Login () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( can Login ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . enable Login . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . perform Login ( binding . edit Text Email . text . toString (), Ġbinding . edit Text Password . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . enable Login . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutils . show Toast ( R . string . error _ something _ wrong ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . enable Login . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutils . show Toast ( R . string . toast _ login _ success ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Login (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( binding . edit Text Email . text . toString (). matches ( email Pattern . to Regex ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . edit Text Email . text . toString () Ġ== ĠVALID _ EMAIL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . edit Text Password . text . toString () Ġ== ĠVALID _ PASSWORD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġbinding . edit Text Password . error Ġ= Ġresources . getString ( R . string . error _ incorrect _ password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġbinding . edit Text Email . error Ġ= Ġresources . getString ( R . string . error _ incorrect _ email ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġbinding . edit Text Email . error Ġ= Ġresources . getString ( R . string . error _ invalid _ email ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠMainActivity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK Ġor ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TASK ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCallback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġlogin () ĊĠĠĠ Ġ} Ċ }