package Ġcom . de ver ick . upt on ews . ui . fragments Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Patterns Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . de ver ick . upt on ews . MainActivity Ċ import Ġcom . de ver ick . upt on ews . R Ċ import Ġcom . de ver ick . upt on ews . databinding . Fragment Sign in Binding Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ Ċ class ĠSign in Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Sign in Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth : ĠFirebase Auth ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Sign in Binding . inflate ( in flater ) ĊĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . continue Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin With Email () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlogin With Email () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġbinding . textInput Email . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġbinding . textInput Password . text . toString () ĊĊĠĠĠĠĠĠĠ Ġval ĠisValid Ġ= Ġvalidate ( email , Ġpassword ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth . signIn With Email And Password ( email , Ġpassword ). add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. finish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . main Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" User Ġdoes Ġnot Ġexists ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . main Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sign Ġin Ġfailed ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate ( email : ĠString , Ġpassword : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠisValid Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . textInput Email Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġbinding . textInput Password Layout . error Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġvalid Email Ġ= ĠPattern s . EMAIL _ ADDRESS . matcher ( email ). matches () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! valid Email ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisValid Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textInput Email Layout . error Ġ= Ġresources . getString ( R . string . invalid _ email ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġvalid Password Ġ= Ġpassword . length Ġ>= Ġ 6 ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! valid Password ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisValid Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textInput Password Layout . error Ġ= Ġresources . getString ( R . string . invalid _ password ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠisValid ĊĠĠĠ Ġ} Ċ }