package Ġcom . cn . b sc . fragments Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . CheckBox Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . cn . b sc . R Ċ import Ġcom . cn . b sc . databinding . Fragment Register Binding Ċ 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 . k tx . Firebase Ċ import Ġkotlinx . android . synt hetic . main . fragment _ main .* Ċ Ċ class ĠRegister Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Register Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth : ĠFirebase Auth ĊĠĠĠ Ġprivate Ġval Ġdb Ġ= ĠFirebase Fire store . getInstance () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, savedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . fragment _ register , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInitialize ĠFirebase ĠAuth ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase . auth ĊĊĠĠĠĠĠĠĠ Ġ// Ġgetting Ġdata Ġfrom Ġthe Ġtext Ġfields ĊĠĠĠĠĠĠĠ Ġval Ġtext Field Username Ġ= Ġbinding . root . findViewById < EditText >( R . id . et _ register _ email ) ĊĠĠĠĠĠĠĠ Ġval Ġtext Field Password Ġ= Ġbinding . root . findViewById < EditText >( R . id . et _ register _ password ) ĊĠĠĠĠĠĠĠ Ġval Ġtext FieldName Ġ= Ġbinding . root . findViewById < EditText >( R . id . et _ register _ name ) ĊĠĠĠĠĠĠĠ Ġval ĠcheckBox Ġ= Ġbinding . root . findViewById < CheckBox >( R . id . cb _ is Teacher ) ĊĠĠĠĠĠĠĠ Ġval Ġbutton Register Ġ= Ġbinding . root . findViewById < Button >( R . id . btn _ register ) ĊĊĠĠĠĠĠĠĠ Ġbutton Register . setOnClickListener (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= Ġauth . currentUser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentUser Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġsomeone Ġis Ġalready Ġsigned Ġin , Ġsign Ġthem Ġout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth . sign Out () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Email Ġ= Ġtext Field Username . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġtext Field Password . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġtext FieldName . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Teacher Ġ= ĠcheckBox . isChecked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlogging Ġin Ġusing Ġthe Ġdata Ġentered Ġin Ġthe Ġtext Ġfields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Email Ġ!= Ġ"" Ġ&& Ġpassword Ġ!= Ġ"" Ġ&& Ġname Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate User ( user Email , Ġpassword , Ġname , Ġis Teacher ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth . sign Out () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" Please Ġfill Ġall Ġthe Ġfields !", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠ Ġ} ĠĠĠĠĠ ĊĊĠĠĠ Ġprivate Ġfun Ġcreate User ( email : ĠString , Ġpassword : ĠString , Ġname : ĠString , Ġis Teacher : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġauth . createUser With Email And Password ( email , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener () Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSign Ġin Ġsuccess ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Database Entry ( email , Ġname , Ġis Teacher ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity ," User Ġsuccessfully Ġcreated !", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . dest _ user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġsign Ġin Ġfails , Ġdisplay Ġa Ġmessage Ġto Ġthe Ġuser . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity ," Error Ġregistering Ġuser !", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w (" Failed Ġto Ġcreate Ġnew Ġuser ", Ġ" Error Ġcreating Ġnew Ġuser ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Database Entry ( email : ĠString , Ġname : ĠString , Ġis Teacher : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserID Ġ= ĠFirebase Auth . getInstance (). currentUser !!. uid ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġnew Ġuser Ġentry Ġin Ġthe Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" userid " Ġto ĠuserID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" email " Ġto Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" score " Ġto Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" teacher " Ġto Ġis Teacher ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġadd Ġselected Ġdata Ġto Ġdatabase ĊĠĠĠĠĠĠĠ Ġdb . collection (" users "). document ( userID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĠLog . d (" Successfully Ġadded Ġto ĠDB ", Ġ" Document Snapshot Ġsuccessfully Ġwritten !") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> ĠLog . w (" Failed Ġadding Ġto ĠDB ", Ġ" Error Ġwriting Ġdocument ", Ġe ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĠĠĠĠ