package Ġnet . squ anch y . signin Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Bottom Sheet Behavior Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . View Ċ import Ġandroidx . view . isVisible Ċ import Ġcom . google . android . gms . auth . api . Auth Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Account Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Options Ċ import Ġcom . google . android . gms . common . api . Google ApiClient Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Dis pos ables Ċ import Ġkotlinx . android . synt hetic . main . activity _ signin .* Ċ import Ġnet . squ anch y . R Ċ import Ġnet . squ anch y . analytics . Analytics Ċ import Ġnet . squ anch y . google . Google ClientId Ċ import Ġnet . squ anch y . support . config . Dialog Layout Parameters Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠSign In Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġservice : ĠSign In Service ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġanalytics : ĠAnalytics ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgoogle ApiClient : ĠGoogle ApiClient ĊĊĠĠĠ Ġprivate Ġvar Ġsubscription Ġ= ĠDis pos ables . dis posed () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġensure SignIn Origin IsSet () ĊĊĠĠĠĠĠĠĠ Ġgoogle ApiClient Ġ= Ġconnect To Google Apis () ĊĊĠĠĠĠĠĠĠ Ġwith ( signIn Component ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Ġ= Ġservice () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Ġ= Ġanalytics () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ signin ) ĊĊĠĠĠĠĠĠĠ Ġsign In Button . setOnClickListener Ġ{ Ġsign In () Ġ} ĊĠĠĠĠĠĠĠ Ġtouch Outside . setOnClickListener Ġ{ Ġfinish () Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Bottom Sheet Callback On ( bottom Sheet ) ĊĊĠĠĠĠĠĠĠ Ġsetup Window Parameters () ĊĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ C ANCE LED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġensure SignIn Origin IsSet () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! intent . extras . containsKey ( EXTRA _ SIGN _ IN _ ORIGIN )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Sign Ġin Ġorigin Ġextra Ġrequired Ġbut Ġnot Ġset ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconnect To Google Apis (): ĠGoogle ApiClient Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsign In Options Ġ= ĠGoogle SignIn Options . Builder ( Google SignIn Options . DEFAULT _ SIGN _ IN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. requestId Token ( getString ( R . string . default _ web _ client _ id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Email () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠGoogle ApiClient . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Auto Manage ( this , ĠGoogle ClientId . SIGN _ IN _ ACTIVITY . clientId ()) Ġ{ Ġshow SignIn Failed Error () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Api ( Auth . GOOGLE _ SIGN _ IN _ API , Ġsign In Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Bottom Sheet Callback On ( bottom Sheet : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . from ( bottom Sheet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Bottom Sheet Callback ( bottom Sheet Callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbottom Sheet Callback : ĠBottom Sheet Behavior . Bottom Sheet Callback ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġobject Ġ: ĠBottom Sheet Behavior . Bottom Sheet Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon StateChanged ( bottom Sheet : ĠView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠBottom Sheet Behavior . STATE _ HIDDEN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Slide ( bottom Sheet : ĠView , Ġslide Offset : ĠFloat ) Ġ= ĠUnit Ġ// ĠNo Ġop ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Window Parameters () Ġ{ ĊĠĠĠĠĠĠĠ ĠDialog Layout Parameters . wrap Height ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply To ( window ) ĊĠĠĠĠĠĠĠ Ġwindow . set Gravity ( Gravity . FILL _ HORIZONTAL Ġor ĠGr avity . BOTTOM ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġ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 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠAuth . Google SignIn Api . get SignIn Result From Intent ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull Ġ&& Ġresult . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġresult . signIn Account !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Auth With Google ( account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow SignIn Failed Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfirebase Auth With Google ( account : ĠGoogle SignIn Account ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Progress () ĊĊĠĠĠĠĠĠĠ Ġsubscription Ġ= Ġservice . signIn With Google ( account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics . track User LoggedIn From ( get SignIn Origin ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( RESULT _ OK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber :: e ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget SignIn Origin () Ġ= Ġintent . get Serializable Extra ( EXTRA _ SIGN _ IN _ ORIGIN ) Ġas ĠSign In Origin ĊĊĠĠĠ Ġprivate Ġfun Ġshow Progress () Ġ{ ĊĠĠĠĠĠĠĠ Ġsign In Content . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġsign In Content . alpha Ġ= ĠAL PH A _ DISABLED ĊĠĠĠĠĠĠĠ Ġprogress View . isVisible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow SignIn Failed Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Progress () ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( signIn Content , ĠR . string . sign _ in _ error _ please _ retry , ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Progress () Ġ{ ĊĠĠĠĠĠĠĠ Ġsign In Content . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsign In Content . alpha Ġ= ĠAL PH A _ ENABLED ĊĠĠĠĠĠĠĠ Ġprogress View . isVisible Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign In () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsign In Intent Ġ= ĠAuth . Google SignIn Api . get SignIn Intent ( google ApiClient ) ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( signIn Intent , ĠRC _ SIGN _ IN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠĠĠĠĠ Ġsubscription . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRC _ SIGN _ IN Ġ= Ġ 9 0 0 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAL PH A _ DISABLED Ġ= Ġ. 5 4 f ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAL PH A _ ENABLED Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEX TRA _ SIGN _ IN _ ORIGIN Ġ= Ġ" sign _ in _ origin " ĊĠĠĠ Ġ} Ċ } Ċ