package Ġcom . free let ics . rx smart lock Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Sender Ċ import Ġcom . google . android . gms . auth . api . Auth Ċ import Ġcom . google . android . gms . auth . api . credentials . Credential Ċ import Ġcom . google . android . gms . auth . api . credentials . Credential Picker Config Ċ import Ġcom . google . android . gms . auth . api . credentials . Credential Request Ċ import Ġcom . google . android . gms . auth . api . credentials . Credential Request Result Ċ import Ġcom . google . android . gms . auth . api . credentials . Hint Request Ċ import Ġcom . google . android . gms . common . api . Common StatusCode s Ċ import Ġcom . google . android . gms . common . api . Google ApiClient Ċ import Ġcom . google . android . gms . common . api . Status Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Comp letable Emitter Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . Single Emitter Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġtim ber . log . Tim ber Ċ Ċ internal Ġclass ĠSmart Lock Component Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġactivity Result Subject Ġ= ĠPublish Subject . create < Activity Result >() ĊĊĠĠĠ Ġprivate Ġvar Ġis Dialog Shown Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġretrieve Credential Request ( google ApiClient : ĠGoogle ApiClient ?): ĠSingle < Credential > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create < Credential > Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" In Ġretrieve Credential Request ...") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredential Request Ġ= ĠCredential Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Password Login Supported ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth . Credentials Api . request ( google ApiClient , Ġcredential Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Result Callback Ġ{ Ġcredential Request Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Credentials Retrieve Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle ApiClient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredential Request Result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. do OnError Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Credentials Retrieve Callback ( ĊĠĠĠĠĠĠĠ Ġgoogle ApiClient : ĠGoogle ApiClient ?, ĊĠĠĠĠĠĠĠ Ġcredential Request Result : ĠCredential Request Result , ĊĠĠĠĠĠĠĠ Ġemitter : ĠSingle Emitter < Credential > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġcredential Request Result . status ĊĠĠĠĠĠĠĠ Ġif Ġ( status . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Credentials Request ( credential Request Result . credential , Ġemitter ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( status . statusCode Ġ== ĠCommon StatusCode s . SIGN _ IN _ REQUIRED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . SIGN _ IN _ REQUIRED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Credentials Ġretrieve , Ġsign Ġin Ġrequired . ĠNo Ġcredentials Ġsaved ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( error ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Credentials Ġretrieve Ġstatus : Ġ% s , Ġmessage : Ġ% s , Ġsuccess : Ġ% b ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . toString (), Ġstatus . status Message , Ġstatus . is Success ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status . has Resolution () Ġ&& Ġ! is Dialog Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġactivity Result Subject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . request Code Ġ== ĠREQUEST _ CODE _ RESOL VE _ REQUEST Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġhandle Fetch Credentials Result ( it , Ġemitter ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . set Disposable ( dis posable ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġgoogle ApiClient ?. context Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . start Resolution For Result ( activity , ĠREQUEST _ CODE _ RESOL VE _ REQUEST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dialog Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIntent Sender . Send Intent Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . START _ RESOL UTION _ FOR _ RESULT _ FAILED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Retrieve Ġcredential , Ġstart Resolution For Result Ġfailed ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPossible Ġreasons Ġfor Ġthis : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ* Ġ" Network Ġerror " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ* Ġ" No Ġel igible Ġaccounts Ġcan Ġbe Ġfound " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ* Ġ" At Ġleast Ġone Ġaccount Ġon Ġthe Ġdevice Ġis Ġin Ġbad Ġstate " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . NO _ RESOL UTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Retrieve Ġcredential , Ġno Ġresolution . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Message : Ġ${ credential Request Result . status . status Message }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonSuccess Credentials Request ( ĊĠĠĠĠĠĠĠ Ġcredential : ĠCredential , ĊĠĠĠĠĠĠĠ Ġemitter : ĠSingle Emitter < Credential > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Credentials Ġretrieved Ġfor Ġ% s ", Ġcredential . id ) ĊĠĠĠĠĠĠĠ Ġemitter . on Success ( credential ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Fetch Credentials Result ( ĊĠĠĠĠĠĠĠ Ġactivity Result : ĠActivity Result , ĊĠĠĠĠĠĠĠ Ġemitter : ĠSingle Emitter < Credential > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Result . result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġactivity Result . result Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Credentials Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Result . result Data . get Parcelable Extra < Credential >( Credential . EXTRA _ KEY ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Credentials Request ( selected Credentials , Ġemitter ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . FETCH ING _ CRED ENTIAL S _ FAILED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Fetching Ġcredentials Ġfailed : Ġ${ activity Result . request Code }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Credentials Request ( ĊĠĠĠĠĠĠĠ Ġgoogle ApiClient : ĠGoogle ApiClient ?, ĊĠĠĠĠĠĠĠ Ġcredentials To Save : ĠCredential ĊĠĠĠ Ġ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . create Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" In Ġsave ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġcredentials To Save . id ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth . Credentials Api ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. save ( google ApiClient , Ġcredentials To Save ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Result Callback Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Save Credentials Callback ( google ApiClient , Ġresult , Ġusername , Ġemitter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. do OnError Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Save Credentials Callback ( ĊĠĠĠĠĠĠĠ Ġgoogle ApiClient : ĠGoogle ApiClient ?, ĊĠĠĠĠĠĠĠ Ġresult : ĠStatus , ĊĠĠĠĠĠĠĠ Ġusername : ĠString , ĊĠĠĠĠĠĠĠ Ġemitter : ĠComp letable Emitter ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġresult . status ĊĠĠĠĠĠĠĠ Ġif Ġ( status . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Save Credentials ( emitter ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( status . has Resolution () Ġ&& Ġ! is Dialog Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Credentials Ġfor Ġ$ username Ġhas Ġstatus : Ġ$ status ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġactivity Result Subject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . request Code Ġ== ĠREQUEST _ CODE _ RESOL VE _ SAVE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Save Credentials Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . result Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . set Disposable ( dis posable ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġgoogle ApiClient ?. context Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . start Resolution For Result ( activity , ĠREQUEST _ CODE _ RESOL VE _ SAVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dialog Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIntent Sender . Send Intent Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . START _ RESOL UTION _ FOR _ RESULT _ FAILED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Save Ġcredential Ġstart Resolution For Result Ġfailed ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . FAILED _ TO _ SAVE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Credentials Ġcannot Ġbe Ġsaved Ġfor Ġ$ username " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Save Credentials Result ( result Code : ĠInt , Ġemitter : ĠComp letable Emitter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Save Credentials ( emitter ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . FAILED _ TO _ SAVE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Saving Ġcredentials Ġfailed : Ġ$ result Code " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonSuccess Save Credentials ( emitter : ĠComp letable Emitter ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Credentials Ġsaved Ġsuccessfully ") ĊĠĠĠĠĠĠĠ Ġemitter . onComplete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġretrieve SignIn Hints Request ( google ApiClient : ĠGoogle ApiClient ?): ĠSingle < Hint > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . create Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" In Ġretrieve SignIn Hints Request ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhint Request Ġ= ĠHint Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Hint Picker Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCredential Picker Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Cancel Button ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set EmailAddress Identifier Supported ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠAuth . Credentials Api . get Hint Picker Intent ( google ApiClient , Ġhint Request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Dialog Shown ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġactivity Result Subject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . request Code Ġ== ĠREQUEST _ CODE _ RESOL VE _ HINT S Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Fetch Hints Result ( it , Ġemitter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . set Disposable ( dis posable ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġgoogle ApiClient ?. context Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . start Intent Sender For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . intent Sender , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ RESOL VE _ HINT S , Ġnull , Ġ 0 , Ġ 0 , Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dialog Shown Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIntent Sender . Send Intent Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . FAILED _ TO _ SHOW _ HINT _ P ICK ER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Could Ġnot Ġstart Ġhint Ġpicker ĠIntent ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Fetch Hints Result ( ĊĠĠĠĠĠĠĠ Ġactivity Result : ĠActivity Result , ĊĠĠĠĠĠĠĠ Ġemitter : ĠSingle Emitter < Hint > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Result . result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġactivity Result . result Data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Result . result Data . get Parcelable Extra < Credential >( Credential . EXTRA _ KEY ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Hints Ġretrieved Ġfor Ġ% s ", Ġcredential . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . on Success ( Hint ( credential )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . RE TR IE V ING _ HINT S _ FAILED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Retrie ving Ġhints Ġfailed : Ġ${ activity Result . result Code }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Credentials Request ( ĊĠĠĠĠĠĠĠ Ġgoogle ApiClient : ĠGoogle ApiClient ?, ĊĠĠĠĠĠĠĠ Ġcredential ToDelete : ĠCredential ĊĠĠĠ Ġ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . create Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" In Ġdelete Credentials Request ...") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth . Credentials Api . delete ( google ApiClient , Ġcredential ToDelete ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Result Callback Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCredential Ġmay Ġbe Ġdeleted Ġvia Ġanother Ġdevice / app . ĠSo Ġthere Ġis Ġa ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpossibility Ġthat Ġstatus Ġis Ġnot Ġsuccess ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Credential Ġdeleted Ġsuccessfully ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . DE LET ING _ CRED ENTIAL S _ FAILED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Deleting Ġcredentials Ġfailed : Ġ${ status . statusCode }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisable Auto SignIn Request ( google ApiClient : ĠGoogle ApiClient ?): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . create Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" In Ġdisable Auto SignIn Request ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth . Credentials Api . disable Auto SignIn ( google ApiClient ). set Result Callback Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Auto Ġsign Ġdisabled Ġsuccessfully ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= ĠSmart Lock Exception . FAILED _ DISABLE _ AUTO _ SIGN _ IN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Auto Ġsign Ġdisable Ġfailed : Ġ${ status . statusCode }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdeliver Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġresult Data : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Result Subject . onNext ( Activity Result ( request Code , ĠresultCode , Ġresult Data )) ĊĠĠĠĠĠĠĠ Ġis Dialog Shown Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSmart Ġlock Ġoperation Ġerror . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠSmart Lock Exception ( ĊĠĠĠĠĠĠĠ Ġval Ġreason : ĠInt , ĊĠĠĠĠĠĠĠ Ġmessage : ĠString , ĊĠĠĠĠĠĠĠ Ġthrowable : ĠThrowable ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: ĠException ( message , Ġthrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠSIGN _ IN _ REQUIRED Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠSTART _ RESOL UTION _ FOR _ RESULT _ FAILED Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠNO _ RESOL UTION Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠFETCH ING _ CRED ENTIAL S _ FAILED Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠFAILED _ TO _ SAVE Ġ= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠFAILED _ TO _ SHOW _ HINT _ P ICK ER Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠRET R IE V ING _ HINT S _ FAILED Ġ= Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠDE LET ING _ CRED ENTIAL S _ FAILED Ġ= Ġ 7 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠFAILED _ DISABLE _ AUTO _ SIGN _ IN Ġ= Ġ 8 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ