package Ġcom . e ey an . my ment y . presentation . auth . register Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Patterns Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . Navigation Ċ import Ġcom . e ey an . my ment y . R Ċ import Ġcom . e ey an . my ment y . common . loader . Loading Util Ċ import Ġcom . e ey an . my ment y . databinding . Auth Register Binding Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġdagger . h ilt . EntryPoint Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ @ Android EntryPoint Ċ class ĠRegister Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġ// binding Ġobject ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠAuth Register Binding ĊĊĠĠĠ Ġ// view Ġmodel ĊĠĠĠ Ġprivate Ġval ĠviewModel : Register VM Ġby Ġview Models () ĊĊĠĠĠ Ġ// context ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Ctx : Fragment Activity ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , container : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠAuth Register Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġm Ctx Ġ= Ġrequire Activity () ĊĊĠĠĠĠĠĠĠ Ġinit Observer s () ĊĠĠĠĠĠĠĠ Ġbinding . btn Register . setOnClickListener Ġ{ Ġregister User () Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . txt Go To Login . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( it ). navigate ( R . id . action _ register _ to _ login ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// init Ġob servers ĊĠĠĠ Ġprivate Ġfun Ġinit Observer s (){ ĊĠĠĠĠĠĠĠ ĠviewModel . registration State . observe ( view Lifecycle Owner , Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . message ?. let Ġ{ Ġinfo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , Ġinfo , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! it . isLoading ) ĠLoading Util . hide Dialog () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . data ?. let Ġ{ Ġis Registered Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is Registered ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Sn ack (" Successfully Ġcreated Ġaccount ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave UserData () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( binding . root ). navigate ( R . id . action _ register _ to _ main Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ctx . finish () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Sn ack ( it . message !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// register Ġuser ĊĠĠĠ Ġprivate Ġfun Ġregister User (){ ĊĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġbinding . ed t Email . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġpass Ġ= Ġbinding . ed t Password . text . toString () ĊĊĠĠĠĠĠĠĠ Ġif ( is UserData Valid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . register User ( email , Ġpass ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Util . show Dialog ( require Activity (), false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// save Ġuser Ġdata ĊĠĠĠ Ġprivate Ġfun Ġsave UserData (){ ĊĊĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġbinding . ed t Email . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġbinding . ed t Username . text . toString () ĊĊĠĠĠĠĠĠĠ ĠviewModel . save UserData ( email , Ġusername ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// display Ġmessage ĊĠĠĠ Ġprivate Ġfun Ġdisplay Sn ack ( message : String ){ ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , Ġmessage , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// validate Ġregistration Ġdata ĊĠĠĠ Ġprivate Ġfun Ġis UserData Valid () Ġ: ĠBoolean { ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ed t Username . text . toString (). length Ġ< Ġ 5 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Sn ack (" Username Ġshould Ġbe Ġat Ġleast Ġ 5 Ġcharacters ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ed t Password . text . toString (). length Ġ< Ġ 6 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Sn ack (" Password Ġshould Ġbe Ġat Ġleast Ġ 6 Ġcharacters ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ed t Password . text . toString () Ġ!= Ġbinding . ed t Repeat Pass . text . toString () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Sn ack (" Password s Ġdo Ġnot Ġmatch ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! Patterns . EMAIL _ ADDRESS . matcher ( binding . ed t Email . text . toString ()). matches () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Sn ack (" You Ġneed Ġa Ġvalid Ġemail ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊ Ċ } ĊĊĊĊĊĊĊĊ ĊĊĊ