package Ġcom . mu . jan . spark chat . ui . activities Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . View Ċ import Ġcom . google . firebase . Firebase Exception Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . Phone Auth Credential Ċ import Ġcom . google . firebase . auth . Phone Auth Provider Ċ import Ġcom . mu . jan . spark chat . Spark Chat Ċ import Ġcom . mu . jan . spark chat . data . database . My Firebase Ċ import Ġcom . mu . jan . spark chat . databinding . Activity Login Binding Ċ import Ġcom . mu . jan . spark chat . helper . ui . Toast Ċ import Ġcom . mu . jan . spark chat . helper . auth . Phone Auth Ċ import Ġcom . mu . jan . spark chat . helper . ui . Job Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠLogin Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġ// view Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding Ġ: ĠActivity Login Binding ĊĠĠĠ Ġ// firebase Auth ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth Ġ: ĠFirebase Auth ĊĠĠĠ Ġ// Phone Auth Provider Ġcallbacks ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcallbacks Ġ: ĠPhone Auth Provider . On Verification StateChanged Callbacks ĊĠĠĠ Ġ// credential Ġas ĠO TP ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth Credential Ġ: ĠString ĊĊĠĠĠ Ġprivate Ġvar Ġis O tp Sent Ġ: ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Login Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġ// firebase Auth ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠĠĠĠĠ Ġ// attach Ġcallbacks ĊĠĠĠĠĠĠĠ Ġcallbacks Ġ= Ġobject Ġ: ĠPhone Auth Provider . On Verification StateChanged Callbacks () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Verification Completed ( p 0 : ĠPhone Auth Credential ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Sign Ġin Ġwith ĠFirebase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth . signIn With Credential ( p 0 ). add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . is Successful ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// save Ġuser Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Firebase . get (). save UserInfo (){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// load Ġuser ĠInfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpark Chat . get (). load UserInfo () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// startActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this @ Login Activity , MainActivity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . show ( this @ Login Activity ," failed Ġto Ġverify ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . show ( this @ Login Activity , it . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Verification Failed ( p 0 : ĠFirebase Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis O tp Sent Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// enable Ġbutton Ġand Ġchange Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . activity Login Btn . text Ġ= Ġ" Get ĠO TP " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// show Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . show ( this @ Login Activity , p 0 . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Code Sent ( p 0 : ĠString , Ġp 1 : ĠPhone Auth Provider . Force Res ending Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Code Sent ( p 0 , Ġp 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// code Ġhas Ġbeen Ġsent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Credential Ġ= Ġp 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis O tp Sent Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// visible ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . activity Login O tp Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// enable Ġbutton Ġand Ġchange Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . activity Login Btn . text Ġ= Ġ" Done " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// otp Ġedit Text ĊĠĠĠĠĠĠĠ Ġbinding . activity Login CountryCode . 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 . activity Login CountryCode . text . toString (). trim (). isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . activity Login CountryCode . setText ("+ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . activity Login CountryCode . setSelection ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ// login Ġbutton ĊĠĠĠĠĠĠĠ Ġbinding . activity Login Btn . setOnClickListener Ġ{ Ġhandle Auth () Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġverify O tp (){ ĊĠĠĠĠĠĠĠ Ġif ( binding . activity Login O tp . text . toString (). trim (). isNotEmpty () Ġ&& Ġthis :: auth Credential . isInitialized ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser O tp Ġ= Ġbinding . activity Login O tp . text . toString (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= ĠPhone Auth Provider . getC redential ( auth Credential , user O tp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// sign Ġin Ġwith Ġfirebase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth . signIn With Credential ( credentials ). add On Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . is Successful ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// save Ġuser Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMy Firebase . get (). save UserInfo (){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// load Ġuser ĠInfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpark Chat . get (). load UserInfo () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// startActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this @ Login Activity , MainActivity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . show ( this @ Login Activity ," failed Ġto Ġsign Ġin ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . show ( this @ Login Activity , it . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . show ( this @ Login Activity ," Fill ĠO tp ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġhandle Auth (){ ĊĠĠĠĠĠĠĠ Ġif ( binding . activity Login PhoneNumber . text . toString (). trim (). isNotEmpty () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . activity Login CountryCode . text . toString (). trim (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is O tp Sent ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// verify ĠO TP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify O tp () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// send ĠO TP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis O tp Sent Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Ġ= Ġ"${ binding . activity Login CountryCode . text . toString (). trim ()} ${ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . activity Login PhoneNumber . text . toString (). trim () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// disable Ġbutton Ġfor Ġa Ġwhile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// otp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhone Auth . start Phone Auth ( this @ Login Activity , callbacks , num ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . show ( this @ Login Activity ," Fill ĠPhone Ġnumber Ġand ĠCountry Ġcode ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġdisable Button (){ ĊĠĠĠĠĠĠĠ Ġbinding . activity Login Btn . isEnabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġenable Button (){ ĊĠĠĠĠĠĠĠ Ġbinding . activity Login Btn . isEnabled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġfinish Affinity () ĊĠĠĠ Ġ} Ċ }