package Ġcom . example . template bottom nav menu Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Ċ 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 . Firebase User Ċ import Ġcom . google . firebase . auth . Google Auth Provider Ċ import Ġcom . google . firebase . auth . k tx . auth Ċ import Ġcom . google . firebase . k tx . Firebase Ċ Ċ class ĠGoogle SignIn Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠGoogle SignIn Activity :: class . java . simple Name ĊĠĠĠ Ġprivate Ġval ĠRC _ SIGN _ IN Ġ= Ġ 1 2 3 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgoogle SignIn Client : ĠGoogle SignIn Client ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth : ĠFirebase Auth ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠprogressBar : ĠProgress Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogin : ĠButton ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ sign _ in ) ĊĠĠĠĠĠĠĠ Ġinitialize () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ[ START Ġconfig _ signin ] ĊĠĠĠĠĠĠĠ Ġ// ĠConfigure ĠGoogle ĠSign ĠIn ĊĠĠĠĠĠĠĠ Ġval Ġg so Ġ= ĠGoogle SignIn Options . Builder ( Google SignIn Options . DEFAULT _ SIGN _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. requestId Token ( getString ( R . string . default _ web _ client _ id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Email () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġgoogle SignIn Client Ġ= ĠGoogle SignIn . getClient ( this , g so ) ĊĠĠĠĠĠĠĠ Ġ// Ġ[ END Ġconfig _ signin ] ĊĊĠĠĠĠĠĠĠ Ġaction Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize (){ ĊĠĠĠĠĠĠĠ ĠprogressBar Ġ= ĠfindViewById ( R . id . progress _ circular ) ĊĠĠĠĠĠĠĠ Ġlogin Ġ= ĠfindViewById ( R . id . login ) ĊĠĠĠĠĠĠĠ Ġ// Ġ[ START Ġinitialize _ auth ] ĊĠĠĠĠĠĠĠ Ġ// ĠInitialize ĠFirebase ĠAuth ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase . auth Ġ// k tx ĊĠĠĠĠĠĠĠ Ġ// auth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠĠĠĠĠ Ġ// Ġ[ END Ġinitialize _ auth ] ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. hide () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġaction Listener (){ ĊĠĠĠĠĠĠĠ Ġlogin . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsign In Google () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign In Google (){ ĊĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġval Ġsign In Intent : ĠIntent Ġ= Ġgoogle SignIn Client . signIn Intent ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( signIn Intent , ĠRC _ SIGN _ IN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġuser Ġis Ġsigned Ġin Ġ( non - null ) Ġand Ġupdate ĠUI Ġaccordingly . ĊĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= Ġauth . currentUser ĊĠĠĠĠĠĠĠ Ġupdate UI ( currentUser ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠResult Ġreturned Ġfrom Ġlaunch ing Ġthe ĠIntent Ġfrom ĠGoogle SignIn Api . get SignIn Intent (... ); ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠRC _ SIGN _ IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠGoogle SignIn . get Signed In Account From Intent ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGoogle ĠSign ĠIn Ġwas Ġsuccessful , Ġauthenticate Ġwith ĠFirebase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġtask . getResult ( ApiException :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" firebase Auth With Google :" Ġ+ Ġaccount . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Auth With Google ( account . id Token !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGoogle ĠSign ĠIn Ġfailed , Ġupdate ĠUI Ġappropriately ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Google Ġsign Ġin Ġfailed ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfirebase Auth With Google ( id Token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠGoogle Auth Provider . getC redential ( id Token , Ġnull ) ĊĠĠĠĠĠĠĠ Ġauth . signIn With Credential ( credential ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener ( this ) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSign Ġin Ġsuccess , Ġupdate ĠUI Ġwith Ġthe Ġsigned - in Ġuser 's Ġinformation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" signIn With Credential : success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġauth . currentUser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UI ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġsign Ġin Ġfails , Ġdisplay Ġa Ġmessage Ġto Ġthe Ġuser . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" signIn With Credential : failure ", Ġtask . exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġview Ġ= Ġbinding . main Layout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Snackbar . make ( view , Ġ" Authentication ĠFailed .", ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Authentication ĠFailed .", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UI ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate UI ( user : ĠFirebase User ? ){ ĊĠĠĠĠĠĠĠ Ġif Ġ( user Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this @ Google SignIn Activity , MainActivity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġintent Go To MainActivity Ġ= ĠIntent ( this , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// startActivity ( intent Go To MainActivity ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE Ġ} ĊĠĠĠ Ġ} Ċ }