package Ġcom . example . fit 5 0 4 6 pain di ary Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . view binding . View Binding Ċ import Ġcom . example . fit 5 0 4 6 pain di ary . databinding . Activity SignUp Binding Ċ import Ġcom . google . android . gms . tasks . Task Ċ import Ġcom . google . firebase . auth . Auth Result Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġjava . lang . Exception Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠSign Up Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity SignUp Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth Ġ: Firebase Auth ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ Ġ= ĠActivity SignUp Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġbinding . confirm . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// binding . password Edit . setError ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// binding . account Edit . setError ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġbinding . account Edit . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġbinding . password Edit . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( email Ġ!= Ġ"" Ġ&& Ġpassword Ġ!= Ġ"" Ġ&& Ġandroid . util . Patterns . EMAIL _ ADDRESS . matcher ( email ). matches () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠPassword _ validation ( password )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth . createUser With Email And Password ( email , password ). add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask : ĠTask < Auth Result > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this ," success ! .", Toast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this ," Fail Ġto Ġsign Ġup .", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this ," Please Ġenter Ġemail Ġand Ġpassword Ġcorrectly .", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! Password _ validation ( password )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . password Edit . setError (" Password Ġat Ġleast Ġ 6 Ġwords Ġincluding Ġ 1 ĠUpper case , Ġ 1 ĠNumber Ġand Ġ 1 ĠSymbol ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! android . util . Patterns . EMAIL _ ADDRESS . matcher ( email ). matches ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . account Edit . setError (" Please Ġenter Ġthe Ġcorrect ĠEmail Ġaddress .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEx isted Email ( email ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . cancel . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠPassword _ validation ( password : ĠString ): Boolean { ĊĠĠĠĠĠĠĠ Ġval ĠPASSWORD _ PATTERN Ġ= Ġ"^ (? = .* [ 0 - 9 ]) (? = .* [ A - Z ]) (? = .* [@ #$ %^ & += ! ]) (? = \\ S +$ ). { 6 , }$ " ĊĠĠĠĠĠĠĠ Ġval Ġpattern : ĠPattern Ġ= ĠPattern . compile ( PASSWORD _ PATTERN ) ĊĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= Ġpattern . matcher ( password ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmatcher . matches () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠEx isted Email ( email Ġ: ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġauth . fetch SignIn Methods For Email ( email ). add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsign In Methods Ġ= Ġresult . signIn Methods !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( signIn Methods . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . account Edit . setError ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . account Edit . setError (" This ĠEmail Ġis Ġalready Ġexist .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ