package Ġcom . example . kn uc se app . ui Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . kn uc se app . R Ċ import Ġcom . example . kn uc se app . databinding . Activity SignUp Binding Ċ import Ġcom . example . kn uc se app . ui . auth . Auth Listener Ċ import Ġcom . example . kn uc se app . ui . auth . Auth ViewModel Ċ import Ġcom . example . kn uc se app . ui . auth . Auth ViewModel Factory Ċ import Ġcom . example . kn uc se app . data . repository . Auth Repository Ċ import Ġcom . example . kn uc se app . ui . util .* Ċ Ċ class ĠSign Up Activity Ġ: ĠAppCompatActivity (), ĠAuth Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity SignUp Binding ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Ġ: ĠAuth ViewModel ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠAuth ViewModel Factory ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ sign _ up ) ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= ĠNetwork Connection ( application Context ) ĊĠĠĠĠĠĠĠ Ġconnection . observe ( this ){ Ġis Connected Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isConnected ) ĠNetwork Status . status Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠNetwork Status . status Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinit ViewModel () ĊĠĠĠĠĠĠĠ Ġset Toolbar () ĊĠĠĠĠĠĠĠ Ġtext Watcher () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ViewModel (){ ĊĠĠĠĠĠĠĠ ĠviewModel Factory Ġ= ĠAuth ViewModel Factory ( Auth Repository ()) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this , viewModel Factory ). get ( Auth ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ ĠviewModel . auth SignUp Listener Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . view model Ġ= ĠviewModel ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ ĠviewModel . getResponse . observe ( this ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set SignIn Loading False () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( it . response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Email Confirm . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . email verify Text . isEnabled = true ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . email verify Text . is Focus able = true ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . verify Post Response . observe ( this ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set SignIn Loading False () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . success ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" ìĿ¸ ì¦ Ŀ ĠìĦ± ê³µ ! Ġ\ n ìĿ´ ìĸ´ ìĦľ Ġí ļĮ ìĽĲ Ġê°Ģ ìŀħ ìĿĦ Ġì§Ħ íĸī íķ´ ì£¼ ìĦ¸ìļĶ .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . sign Up Response Code Ġ= Ġit . response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Button State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse { Ġtoast ( it . error . message ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . sign Up Response . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set SignIn Loading False () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" íļĮ ìĽĲ Ġê°Ģ ìŀħ ĠìĻ Ħ ë£Į ! Ġ\ n ê°Ģ ìŀħ íķľ Ġìłķë³´ ë¡ľ Ġë¡ľ ê·¸ ìĿ¸ íķ´ ì£¼ ìĦ¸ìļĶ .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( it . error . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . sign Up Loading . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it ) Ġbinding . signup ProgressBar . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġbinding . signup ProgressBar . hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Button State (){ ĊĠĠĠĠĠĠĠ Ġbinding . email Text . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . email verify Text . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . btn Email Verify . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . btn Email Confirm . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . btn Signup . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . pw Text . request Focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Toolbar (){ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Show Title Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġitem . itemId ĊĠĠĠĠĠĠĠ Ġwhen Ġ( id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtext Watcher () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsentence 1 Ġ= Ġ" íķ Ħ ìĪĺ ìŀħ ëł¥ Ġíķ Ń ëª© Ġìŀħ ëĭĪëĭ¤ ." ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ìĿ´ ë© Ķ ìĿ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Text . add TextChanged Listener ( object Ġ: ĠText Watcher { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( binding . email Text . text !!. isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . email Layout . error Ġ= Ġsentence 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . email Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ë¹Ħ ë° Ģ ë²Ī íĺ¸ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpw Text . add TextChanged Listener ( object Ġ: ĠText Watcher { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( binding . pw Text . text !!. isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pw Layout . error Ġ= Ġsentence 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pw Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ë¹Ħ ë²Ī Ġìŀ¬ íĻ ķ ìĿ¸ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġck pw Text . add TextChanged Listener ( object Ġ: ĠText Watcher { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( binding . ck pw Text . text !!. isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ck pw Layout . error Ġ= Ġsentence 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif (!( binding . ck pw Text . text . toString () !!. equals ( binding . pw Text . text . toString ()))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ck pw Layout . error Ġ= Ġ" ìĿ¼ ì¹ĺ íķĺì§Ģ ĠìķĬ ìĬµëĭĪëĭ¤ ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ck pw Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// íķĻ ë²Ī ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstd Id Text . add TextChanged Listener ( object Ġ: ĠText Watcher { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( binding . std Id Text . text !!. isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . std Id Layout . error Ġ= Ġsentence 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . std Id Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ìĿ´ ë¦Ħ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Text . add TextChanged Listener ( object Ġ: ĠText Watcher { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( binding . name Text . text !!. isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . name Layout . error Ġ= Ġsentence 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . name Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ëĭ ī ëĦ ¤ ìŀĦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnickname Text . add TextChanged Listener ( object Ġ: ĠText Watcher { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( binding . nickname Text . text !!. isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . nickname Layout . error Ġ= Ġsentence 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . nickname Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Started () Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġon Failure ( message : ĠString , Ġtype Ġ: ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( type ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġbinding . pw Text . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġbinding . ck pw Text . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġbinding . name Text . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġbinding . nickname Text . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġbinding . std Id Text . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 6 Ġ-> Ġbinding . major Radio Group . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠ 7 Ġ-> Ġbinding . gender Radio Group . request Focus () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtoast ( message ) ĊĠĠĠ Ġ} Ċ }