package Ġcom . mu ham me des ad com ert . e commerce app . ui . login Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . widget . do After TextChanged Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . k tx . auth Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġcom . google . firebase . firestore . k tx . firestore Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġcom . mu ham me des ad com ert . e commerce app . MainActivity Ċ import Ġcom . mu ham me des ad com ert . e commerce app . R Ċ import Ġcom . mu ham me des ad com ert . e commerce app . Store Activity Ċ import Ġcom . mu ham me des ad com ert . e commerce app . databinding . Activity Login Binding Ċ Ċ class ĠLogin Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Login Binding ĊĠĠĠ Ġprivate Ġvar Ġfire store : ĠFirebase Fire store Ġ= ĠFirebase . firestore ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth : ĠFirebase Auth ĊĠĠĠ Ġprivate Ġvar Ġaccount Type Ġ= Ġ" Customer " ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Login Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsign In SignUp Ġ= Ġbinding . signIn SignUp ĊĠĠĠĠĠĠĠ Ġval Ġcheckbox Ġ= Ġbinding . checkbox ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġbinding . username ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġbinding . password ĊĊĠĠĠĠĠĠĠ Ġbinding . button SignIn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsign In SignUp . text Ġ= ĠgetString ( R . string . sign _ in ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . store Name Input . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . button SignUp . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsign In SignUp . text Ġ= ĠgetString ( R . string . sign _ up ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheckbox . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Selected Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . store Name Input . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . store Name Input . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsign In SignUp . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . button SignIn . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign Up () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġusername . do After TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Email Valid ( username . text . toString ()) Ġ&& Ġis Password Valid ( password . text . toString ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In SignUp . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground . set Tint ( getColor ( R . color . primary Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In SignUp . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground . set Tint ( getColor ( R . color . button Disabled )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpassword . do After TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Email Valid ( username . text . toString ()) Ġ&& Ġis Password Valid ( password . text . toString ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In SignUp . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground . set Tint ( getColor ( R . color . primary Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In SignUp . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground . set Tint ( getColor ( R . color . button Disabled )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġuser Ġis Ġsigned Ġin Ġ( non - null ) Ġand Ġupdate ĠUI Ġaccordingly . ĊĠĠĠĠĠĠĠ Ġif Ġ( Firebase . auth . currentUser Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Starter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġactivity Starter () Ġ{ ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase . auth ĊĠĠĠĠĠĠĠ Ġfire store . collection (" Users "). document ( auth . uid !! ). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . get (" account Type ") Ġ== Ġ" Store ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( application Context , ĠStore Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it . get (" account Type ") Ġ== Ġ" Customer ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( application Context , ĠMainActivity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġit . localized Message , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign In () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . loading . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase . auth ĊĊĠĠĠĠĠĠĠ Ġauth . signIn With Email And Password ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . username . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . password . text . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Starter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġit . localized Message , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . loading . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase . auth ĊĊĠĠĠĠĠĠĠ Ġauth . createUser With Email And Password ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . username . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . password . text . toString () ĊĠĠĠĠĠĠĠ Ġ). add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSuccess ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Map Ġ= Ġhash Map Of < String , ĠAny >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( binding . checkbox . isChecked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Type Ġ= Ġ" Store " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Map [" store Name "] Ġ= Ġbinding . store Name . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid : ĠString Ġ= Ġauth . uid . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Map [" account Type "] Ġ= Ġaccount Type ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfire store . collection (" Users "). document ( uuid ). set ( post Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Starter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . localized Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĠĠ Ġ// ĠFail ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġit . localized Message , ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Email Valid ( e Mail : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġandroid . util . Patterns . EMAIL _ ADDRESS . matcher ( e Mail ). matches () ĊĊĠĠĠ Ġprivate Ġfun Ġis Password Valid ( password : ĠString ) Ġ= Ġpassword . length Ġ> Ġ 5 Ċ }