package Ġcom . hu awei . auth services uper dem oo . google Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . AppCompat Button Ċ 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 . hu awei . ag connect . auth . AG Connect Auth Ċ import Ġcom . hu awei . ag connect . auth . Google Auth Provider Ċ import Ġcom . hu awei . ag connect . auth . Google Game Auth Provider Ċ import Ġcom . hu awei . auth services uper dem oo . GOOGLE _ PLAY _ GAME _ REQUEST _ SIGN IN Ċ import Ġcom . hu awei . auth services uper dem oo . GOOGLE _ REQUEST _ SIGN IN Ċ import Ġcom . hu awei . auth services uper dem oo . R ĊĊ Ċ class ĠGoogle Sign Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġjava Class . simple Name ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogin With Google Btn Ġ: ĠAppCompat Button ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogin With Google Game Btn Ġ: ĠAppCompat Button ĊĊĠĠĠ Ġprivate Ġvar Ġu Id : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Google SignIn Client : ĠGoogle SignIn Client ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Google Game SignIn Client : ĠGoogle SignIn Client ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ google ) ĊĊĠĠĠĠĠĠĠ Ġlogin With Google Btn Ġ= ĠfindViewById ( R . id . login With Google Btn ) ĊĠĠĠĠĠĠĠ Ġlogin With Google Game Btn Ġ= ĠfindViewById ( R . id . login With Google Game Btn ) ĊĊĠĠĠĠĠĠĠ Ġinit Google Sign () ĊĠĠĠĠĠĠĠ Ġinit Google Game Sign () ĊĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġlaunch ( activity : ĠAppCompatActivity ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠGoogle Sign Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View (){ ĊĊĠĠĠĠĠĠĠ Ġlogin With Google Btn . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Login With Google ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogin With Google Game Btn . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Login With Google Play Game ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Google Sign () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġg so Builder : ĠGoogle SignIn Options . Builder Ġ= ĠGoogle SignIn Options . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGoogle SignIn Options . DEFAULT _ SIGN _ IN ) ĊĠĠĠĠĠĠĠ Ġg so Builder . requestId Token ( getString ( R . string . google _ app _ id )) ĊĠĠĠĠĠĠĠ Ġval Ġsign In Options Ġ= Ġg so Builder . request Profile (). build () ĊĊĠĠĠĠĠĠĠ Ġm Google SignIn Client Ġ= ĠGoogle SignIn . getClient ( this , Ġsign In Options ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Google Game Sign () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġg so Builder : ĠGoogle SignIn Options . Builder Ġ= ĠGoogle SignIn Options . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGoogle SignIn Options . DEFAULT _ G AMES _ SIGN _ IN ) ĊĠĠĠĠĠĠĠ Ġg so Builder . requestId Token ( getString ( R . string . google _ app _ id )) ĊĠĠĠĠĠĠĠ Ġval Ġsign In Options Ġ= Ġg so Builder . request Profile (). build () ĊĊĠĠĠĠĠĠĠ Ġm Google Game SignIn Client Ġ= ĠGoogle SignIn . getClient ( this , Ġsign In Options ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Login With Google ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast Signed In Account : ĠGoogle SignIn Account ? Ġ= ĠGoogle SignIn . getLast Signed In Account ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( last Signed In Account Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Google SignIn Client !!. sign Out (). add On Complete Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In With Google ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsign In With Google ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Login With Google Play Game ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast Signed In Account : ĠGoogle SignIn Account ? Ġ= ĠGoogle SignIn . getLast Signed In Account ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( last Signed In Account Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Google Game SignIn Client !!. sign Out (). add On Complete Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In With Google Play Game ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsign In With Google Play Game ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign In With Google ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsign In Intent Ġ= Ġm Google SignIn Client !!. signIn Intent ĊĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( signIn Intent , ĠGOOGLE _ REQUEST _ SIGN IN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign In With Google Play Game ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsign In Intent Ġ= Ġm Google Game SignIn Client !!. signIn Intent ĊĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( signIn Intent , ĠGOOGLE _ PLAY _ GAME _ REQUEST _ SIGN IN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Google SignIn Result ( data : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Task : Ġcom . google . android . gms . tasks . Task < Google SignIn Account >? Ġ= ĠGoogle SignIn . get Signed In Account From Intent ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġaccount Task ?. getResult ( ApiException :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Token Ġ= Ġaccount . id Token ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Token Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin With Google ( id Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Google Game SignIn Result ( data : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Task : Ġcom . google . android . gms . tasks . Task < Google SignIn Account >? Ġ= ĠGoogle SignIn . get Signed In Account From Intent ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġaccount Task ?. getResult ( ApiException :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Auth Code Ġ= Ġaccount . server Auth Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( server Auth Code Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin With Google Game ( server Auth Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠApiException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlogin With Google ( id Token : ĠString ){ ĊĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠGoogle Auth Provider . credential With Token ( id Token ) ĊĠĠĠĠĠĠĠ ĠAG Connect Auth . getInstance (). signIn ( credential ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġsign In Result Ġ-> Ġ// ĠonSuccess ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġsign In Result . user ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġuser . uid , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Id Ġ= Ġuser . uid ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Fail ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlogin With Google Game ( server Auth Code : ĠString ){ ĊĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠGoogle Game Auth Provider . credential With Token ( server Auth Code ) ĊĠĠĠĠĠĠĠ ĠAG Connect Auth . getInstance (). signIn ( credential ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġsign In Result Ġ-> Ġ// ĠonSuccess ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġsign In Result . user ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġuser . uid , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Id Ġ= Ġuser . uid ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon Fail ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ ĠresultCode : ĠInt , ĊĠĠĠĠĠĠĠ Ġdata : ĠIntent ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠGOOGLE _ REQUEST _ SIGN IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Google SignIn Result ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else Ġif Ġ( request Code Ġ== ĠGOOGLE _ PLAY _ GAME _ REQUEST _ SIGN IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Google Game SignIn Result ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ