package Ġcom . buck . ui . login Ċ Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . method . Hide Returns Transformation Method Ċ import Ġandroid . text . method . Password Transformation Method Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . ant onio le iva . weather app . extensions . Deleg ates Ext Ċ import Ġcom . buck . App Ċ import Ġcom . buck . R Ċ import Ġcom . buck . internal . after TextChanged Ċ import Ġcom . buck . internal . startActivity Ċ import Ġcom . buck . ui . MainActivity Ċ import Ġcom . buck . ui . base . Base Fragment Ċ Ċ import Ġkotlinx . android . synt hetic . main . fragment _ login .* Ċ Ċ class ĠLogin Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠLogin Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠLogin ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Providers . of ( this @ Login Fragment ). get ( Login ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġusername : ĠString Ġby ĠDeleg ates Ext . preference ( ĊĠĠĠĠĠĠĠ ĠApp . instance , ĊĠĠĠĠĠĠĠ ĠLogin Activity . USERNAME , ĊĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġvar Ġpassword : ĠString Ġby ĠDeleg ates Ext . preference ( ĊĠĠĠĠĠĠĠ ĠApp . instance , ĊĠĠĠĠĠĠĠ ĠLogin Activity . PASSWORD , ĊĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Res Id (): ĠInt Ġ= ĠR . layout . fragment _ login ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġet _ username . setText ( username ) ĊĠĠĠĠĠĠĠ Ġet _ username . setSelection ( username . length ) ĊĠĠĠĠĠĠĠ Ġet _ pwd . setText ( password ) ĊĠĠĠĠĠĠĠ Ġet _ pwd . setSelection ( password . length ) ĊĠĠĠĠĠĠĠ Ġlogin . isEnabled Ġ= Ġ! username . isBlank () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit Listener () ĊĠĠĠĠĠĠĠ Ġobserver Result () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserver Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// 1 . Ġ ä¸Ģä¸ª LiveData åŃĹæ®µ çĶ¨äºİ çķĮéĿ¢ ä¿¡æģ¯ çļĦ æĽ´æĸ° ĊĠĠĠĠĠĠĠ ĠviewModel . login Form State . observe ( this @ Login Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogin State Ġ= Ġit Ġ?: Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin State . password Error ?. apply Ġ{ Ġll _ pwd . error Ġ= ĠgetString ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin State . username Error ?. apply Ġ{ Ġll _ username . error Ġ= ĠgetString ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġll _ username . isError Enabled Ġ= Ġlogin State . username Error Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġll _ pwd . isError Enabled Ġ= Ġlogin State . password Error Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin . isEnabled Ġ= Ġlogin State . is Data Valid ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// 2 . Ġ- ä¸ª LiveData çĶ¨äºİ ç½ĳç»ľ çĻ»å½ķ åĲİ çķĮ éĿ¢çļĦ æĽ´æĸ° ĊĠĠĠĠĠĠĠ ĠviewModel . login Result . observe ( this @ Login Fragment , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogin Result Ġ= Ġit Ġ?: Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Login Progress bar ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Success () Ġ-> Ġremember User () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . isError () Ġ-> Ġshow Login Failed ( login Result . message !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġet _ username . after TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Data Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġet _ pwd . after TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Data Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġck _ pwd . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ-> Ġet _ pwd . transformation Method Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHide Returns Transformation Method . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġet _ pwd . transformation Method Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPassword Transformation Method . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġet _ pwd . setOn Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Info . IME _ ACTION _ DONE Ġ-> Ġlogin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogin . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtv _ register . setOnClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. startActivity < Register Activity >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremember User () Ġ{ ĊĠĠĠĠĠĠĠ Ġusername Ġ= Ġet _ username . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġif Ġ( ck _ remember . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®° ä½ı çĻ»å½ķ å¯Ĩçłģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġet _ pwd . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontext ?. startActivity < MainActivity >() ĊĠĠĠĠĠĠĠ Ġ// è·³è½¬ æĪĲåĬŁ åĲİ ï¼Į finish ĠActivity ĊĠĠĠĠĠĠĠ Ġactivity ?. finish () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġlogin () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Login Progress bar ( true ) ĊĠĠĠĠĠĠĠ ĠviewModel . login ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet _ username . text . toString (). trim (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet _ pwd . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlogin Data Changed () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . login Data Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet _ username . text . toString (). trim (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet _ pwd . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġshow Login Failed ( error Msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġerror Msg , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Login Progress bar ( show : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress bar . visibility Ġ= ĠView . IN VISIBLE ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ