package Ġcom . example . android . news update . activity Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġcom . example . android . news update . R Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Account Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Client Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Options Ċ import Ġcom . google . android . gms . common . api . ApiException Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . Google Auth Provider Ċ import Ġkotlinx . android . synt hetic . main . activity _ intro .* Ċ import Ġmodel . User Ċ Ċ class ĠIntro Activity Ġ: ĠBase Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth : ĠFirebase Auth ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgoogle SignIn Client : ĠGoogle SignIn Client ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRC _ SIGN _ IN Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" GOOGLE _ SIGN _ IN _ TAG " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ intro ) ĊĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĊĠĠĠĠĠĠĠ ĠIntro _ sign Up _ text . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , SignUp :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbtn _ sign _ in _ intro . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In User () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgoogle SignIn Options Ġ= ĠGoogle SignIn Options . Builder ( Google SignIn Options . DEFAULT _ SIGN _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. requestId Token ( getString (( R . string . default _ web _ client _ id ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Email () Ġ Ġ// we Ġonly Ġneed Ġemail Ġfrom Ġgoogle Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġgoogle SignIn Client Ġ= ĠGoogle SignIn . getClient ( this , google SignIn Options ) ĊĊĊ ĊĠĠĠĠĠĠ Ġ// Ġcheck User () ĊĊĠĠĠĠĠĠĠ Ġ// click Ġbtn Ġto Ġcreate Ġgoogle ĠSign In ĊĠĠĠĠĠĠĠ Ġbtn _ google _ signIn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," onCreate : Ġbegin ĠGoogle ĠSign ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġgoogle SignIn Client . signIn Intent ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent Ġ, ĠRC _ SIGN _ IN ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}// onCreate ĊĊĠĠ Ġ/* Ġprivate Ġfun Ġcheck User () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// check Ġif ĠUser Ġis Ġlogged Ġin Ġor Ġnot ĊĠĠĠĠĠĠĠ Ġval Ġfirebase User Ġ= Ġauth . currentUser ĊĠĠĠĠĠĠĠ Ġif ( firebase User Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// User Ġis Ġalready Ġlogged In ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this @ Intro Activity , MainActivity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}*/ ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif ( request Code Ġ== ĠRC _ SIGN _ IN ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," on Activity Result : ĠGoogle ĠSign In ĠIntent ĠResult " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Task Ġ= ĠGoogle SignIn . get Signed In Account From Intent ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġaccount Task . getResult ( ApiException :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Auth With Google Account ( account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" firebase Auth With Google :" Ġ+ Ġaccount . id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// failed Ġgoogle ĠSign In ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Google Ġsign Ġin Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfirebase Auth With Google Account ( account : ĠGoogle SignIn Account ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG ," Firebase Auth Ġwith Ġgoogle Account ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠGoogle Auth Provider . getC redential ( account !!. id Token , Ġnull ) ĊĠĠĠĠĠĠĠ Ġauth . signIn With Credential ( credential ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener ( this ) Ġ{ Ġauth Result Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSign Ġin Ġsuccess , Ġupdate ĠUI Ġwith Ġthe Ġsigned - in Ġuser 's Ġinformation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" signIn With Credential : success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġauth . currentUser ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// get ĠUser Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuid Ġ= Ġuser !!. uid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġuser !!. email ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," firebase Auth With Google Account : ĠEmail : Ġ$ email ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," firebase Auth With Google Account : ĠU Id : Ġ$ uid ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// check Ġif Ġuser Ġis Ġnew Ġor Ġexisting ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( auth Result . additional UserInfo !!. isNew User ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," firebase Auth With Google Account : ĠAccount ĠCreated ..... \ n $ email ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Intro Activity Ġ, Ġ" Account Ġcreated ...\ n $ email ", Toast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," firebase Auth With Google Account : ĠExisting Ġuser ..... \ n $ email ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Intro Activity Ġ, Ġ" LoggedIn ...\ n $ email ", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// start Ġ Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this @ Intro Activity , MainActivity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ it -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG ," firebase Auth With Google Account : ĠLog gin ĠFailed Ġdue Ġto Ġ${ it . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Intro Activity Ġ, Ġ" LoggedIn Ġfailed ...\ n ${ it . message }", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign In User (){ ĊĠĠĠĠĠĠĠ Ġval Ġemail : ĠString Ġ= Ġet _ email _ signIn . text . toString (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpassword : ĠString Ġ= Ġet _ password _ signIn . text . toString (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( validate Form ( email , Ġpassword )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Progress Dialog (" Please Ġwait .. ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth . signIn With Email And Password ( email , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener ( this ){ Ġ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( task . is Successful ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Progress Dialog () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= Ġauth . currentUser ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , MainActivity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this ," check Ġyour Ġinternet Ġconnection ", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Form ( Ġemail : ĠString , Ġpassword : String ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Utils . isEmpty ( email ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Sn ackBar (" Please Ġenter Ġa Ġemail ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Utils . isEmpty ( password ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Sn ackBar (" Please Ġenter Ġa ĠPassword ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġsign In Success ( logged In User : ĠUser ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Progress Dialog () ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠMainActivity :: class . java )) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĊĠĠĠ Ġ} ĊĊ Ċ }