package Ġme . k mm iller . the duck yp od cast . login Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . firebase . auth . Firebase Auth Invalid Credentials Exception Ċ import Ġcom . google . firebase . auth . Firebase Auth Invalid User Exception Ċ import Ġme . k mm iller . base ui . hide Keyboard Ċ import Ġme . k mm iller . the duck yp od cast . Build Config Ċ import Ġme . k mm iller . the duck yp od cast . R Ċ import Ġme . k mm iller . the duck yp od cast . base . Base Activity Ċ import Ġme . k mm iller . the duck yp od cast . base . Base Fragment Ċ import Ġme . k mm iller . the duck yp od cast . databinding . Login Fragment Binding Ċ import Ġme . k mm iller . the duck yp od cast . utils . on TextChanged Listener Ċ Ċ class ĠLogin Fragment Ġ: ĠBase Fragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠLogin Fragment Binding ĊĊĠĠĠ Ġoverride Ġfun Ġget Title (): ĠString Ġ= ĠgetString ( R . string . login ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠLogin Fragment Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Ui Listeners () ĊĊĠĠĠĠĠĠĠ Ġif ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . email . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . password . setText ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Ui Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . login Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Login () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . email . setOn Editor ActionListener Ġ{ Ġ_, Ġaction , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( action Ġ== ĠEditor Info . IME _ ACTION _ NEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHit ting Ġnext Ġshould Ġgo Ġstraight Ġto Ġpassword Ġedit Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . password . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Editor ActionListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . email . on TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . login Error . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . password . setOn Editor ActionListener Ġ{ Ġ_, Ġaction , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( action Ġ== ĠEditor Info . IME _ ACTION _ DONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHit ting Ġdone Ġshould Ġdo Ġlogin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Login () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Editor ActionListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . password . on TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . login Error . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . forgot Password . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġbinding . email . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Fragment ( Forgot Password Fragment . getInstance ( email ), Ġtrue , Ġtrue , ĠF orgot Password Fragment . TAG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . sign Up . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Fragment ( SignUp Fragment (), Ġtrue , Ġtrue , ĠSign Up Fragment . TAG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Login () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Context (). hide Keyboard () ĊĊĠĠĠĠĠĠĠ Ġshow Progress ( getString ( R . string . logging _ in )) ĊĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġbinding . email . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġbinding . password . text . toString () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . login Error . text Ġ= ĠgetString ( R . string . email _ empty _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . login Error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . login Error . text Ġ= ĠgetString ( R . string . password _ empty _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . login Error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġauth ?. signIn With Email And Password ( email , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ) Ġ( activity Ġas ? ĠLogin Activity )?. log In ( get Progress ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Progress () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Error ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it Ġis ĠFirebase Auth Invalid User Exception Ġ|| Ġit Ġis ĠFirebase Auth Invalid Credentials Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . login Error . text Ġ= ĠgetString ( R . string . login _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . login Error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" login _ fragment " ĊĠĠĠ Ġ} Ċ }