package Ġcom . dic el ab . wh op up py . util Ċ Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġcom . google . android . gms . auth . api . phone . Sms Retriever Ċ import Ġcom . google . android . gms . common . api . Common StatusCode s Ċ import Ġcom . google . android . gms . common . api . Status Ċ import Ġcom . or h ano but . logger . Logger Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ class ĠS ms Receiver Ġprivate Ġconstructor () Ġ: ĠLifecycle Observer Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġactivity : ĠWeak Reference < Fragment Activity >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġresult CallBack : Ġ(( Result < String >) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsms Broad Cast Receiver : ĠBroadcast Receiver ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġregister ( activity : ĠFragment Activity , Ġresult CallBack : Ġ( Result < String >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . activity Ġ= ĠWeak Reference ( activity ) ĊĠĠĠĠĠĠĠ Ġthis . result CallBack Ġ= Ġresult CallBack ĊĠĠĠĠĠĠĠ Ġstart SMS Retriever () ĊĠĠĠĠĠĠĠ Ġactivity . lifecycle . add Observer ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) ĊĠĠĠ Ġprivate Ġfun Ġregister SMS Broad Cast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Broad Cast Receiver () ĊĠĠĠĠĠĠĠ Ġval Ġintent Filter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( SMS _ RE TR IE VED _ ACTION ) ĊĠĠĠĠĠĠĠ Ġactivity ?. get ()?. register Receiver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsms Broad Cast Receiver , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent Filter , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSMS _ PERMISSION , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ PAUSE ) ĊĠĠĠ Ġprivate Ġfun Ġun Register Sms Broad Cast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sms Broad Cast Receiver Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. get ()?. unregister Receiver ( sms Broad Cast Receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsms Broad Cast Receiver Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠ Ġprivate Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġresult CallBack Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsms Broad Cast Receiver Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Broad Cast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġsms Broad Cast Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Sms Retriever . SMS _ RE TR IE VED _ ACTION Ġ== Ġintent ?. action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextras Ġ= Ġintent . extras ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġextras ?. get ( Sms Retriever . EXTRA _ STATUS ) Ġas ĠStatus ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( status . statusCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon StatusCode s . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġextras . get ( Sms Retriever . EXTRA _ SMS _ MESSAGE ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . d (" SMS Broad Cast Receiver Ġmessage Ġ: Ġ$ message Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult CallBack ?. invoke ( Result . success ( message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon StatusCode s . TIMEOUT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Error (" Sms Receiver ĠTime Ġout ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart SMS Retriever () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Activity Active ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠS ms Retriever . getClient ( activity !!. get () !! ) ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġclient . start Sms Retriever () ĊĠĠĠĠĠĠĠ Ġtask . add On Success Listener Ġ{} ĊĠĠĠĠĠĠĠ Ġtask . add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Error (" Sms Retriever Ġinitialize Ġfailed ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Error ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Activity Active ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult CallBack ?. invoke ( Result . failure ( IllegalStateException ( message ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Activity Active (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ!( activity ?. get () Ġ== Ġnull Ġ|| Ġactivity !!. get () !!. lifecycle . currentState Ġ== ĠLifecycle . State . DESTROY ED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Sms Receiver " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSMS _ PERMISSION Ġ= Ġ" com . google . android . gms . auth . api . phone . permission . SEND " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSMS _ RE TR IE VED _ ACTION Ġ= Ġ" com . google . android . gms . auth . api . phone . SMS _ RE TR IE VED " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġregister ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity : ĠFragment Activity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult CallBack : Ġ( Result < String >) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ): ĠS ms Receiver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsms Receiver Ġ= ĠS ms Receiver () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsms Receiver . register ( activity , Ġresult CallBack ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsms Receiver ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget App Signature Code ( context : ĠContext ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignatures Ġ= Ġcontext . getApp Signatures () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignatures . size Ġ> Ġ 0 Ġ-> Ġsignatures [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ