package Ġcom . j im z jy . router controller . tools . fragments ĊĊ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . support . design . widget . TextInput EditText Ċ import Ġandroid . support . design . widget . TextInput Layout Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroid . tele phony . Sms Manager Ċ import Ġandroid . text . Html Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ Ċ import Ġcom . j im z jy . router controller . R Ċ import Ġcom . j im z jy . router controller . common . utils .* Ċ import Ġcom . j im z jy . router controller . tools . Tools Presenter Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Fragment ] Ġsubclass . Ċ Ġ* Ċ Ġ*/ Ċ const Ġval ĠS END _ SMS _ OK Ġ= Ġ" Send ĠSMS : ĠOK \ n " Ċ const Ġval ĠNORMAL _ TEXT Ġ= Ġ" normal " Ċ const Ġval ĠRED _ TEXT Ġ= Ġ"# E 5 7 3 7 3 " Ċ const Ġval ĠGREEN _ TEXT Ġ= Ġ"# 4 DB 6 AC " Ċ Ċ class ĠSh an X un Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Sms Reader : ĠS ms Reader ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Tools Presenter : ĠTools Presenter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Number Password ET : ĠText Input EditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Number Password Layout : ĠText Input Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Password ET : ĠText Input EditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Commit Button : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Command ET : ĠText Input EditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Display Text : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Auto Text : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Manual Text : ĠTextView ĊĠĠĠ Ġprivate Ġvar Ġm Text Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġm Password Config Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġm Command Restart Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġmis Auto Mode Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġmis Permission Get Ġ= Ġfalse ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( tools Presenter : ĠTools Presenter ?) Ġ= ĠSh an X un Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . m Tools Presenter Ġ= Ġtools Presenter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . fragment _ sh an _ x un , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġm Number Password ET Ġ= Ġview . findViewById ( R . id . tools _ sx _ passwd _ number _ edit ) ĊĠĠĠĠĠĠĠ Ġm Password ET Ġ= Ġview . findViewById ( R . id . tools _ sx _ passwd _ edit ) ĊĠĠĠĠĠĠĠ Ġm Commit Button Ġ= Ġview . findViewById ( R . id . tools _ sx _ commit _ button ) ĊĠĠĠĠĠĠĠ Ġm Command ET Ġ= Ġview . findViewById ( R . id . tools _ sx _ restart _ command ) ĊĠĠĠĠĠĠĠ Ġm Display Text Ġ= Ġview . findViewById ( R . id . tools _ sx _ display _ text ) ĊĠĠĠĠĠĠĠ Ġm Auto Text Ġ= Ġview . findViewById ( R . id . tools _ sx _ auto _ text ) ĊĠĠĠĠĠĠĠ Ġm Manual Text Ġ= Ġview . findViewById ( R . id . tools _ sx _ manual _ text ) ĊĠĠĠĠĠĠĠ Ġm Number Password Layout Ġ= Ġview . findViewById ( R . id . tools _ sx _ passwd _ number _ layout ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnumber Password Command Ġ= Ġm Tools Presenter ?. getNumber Password () Ġ?: ĠarrayOf ("", Ġ"", Ġ"") ĊĠĠĠĠĠĠĠ Ġm Number Password ET . setText ( number Password Command [ 0 ]) ĊĠĠĠĠĠĠĠ Ġm Password ET . setText ( number Password Command [ 1 ]) ĊĠĠĠĠĠĠĠ Ġm Command ET . setText ( number Password Command [ 2 ]) ĊĊĠĠĠĠĠĠĠ Ġcheck Permission () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . LO L LI POP _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġm Display Text . text . toString () Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . set _ phone _ number _ to _ default ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Display Text . text Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Number Password ET . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Listener () ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () Ċ // ĠĠĠĠĠĠĠ Ġinit Sms Receiver () Ċ // ĠĠĠĠĠĠĠ Ġregister Sms Receiver () ĊĠĠĠĠĠĠĠ Ġif Ġ( mis Permission Get ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Sms Observer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Sms Observer () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () Ċ // ĠĠĠĠĠĠĠ Ġun Register Sms Receiver () ĊĠĠĠĠĠĠĠ Ġun Register Sms Observer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġm Tools Presenter Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= ĠarrayOf ( Manifest . permission . READ _ PHONE _ STATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . SEND _ SMS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ SMS ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġpermissions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( it , Ġp ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmis Permission Get Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text ( resources . getString ( R . string . no _ permission ), ĠRED _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmis Permission Get Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Commit Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Display Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mis Permission Get ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Tools Presenter ?. isConnected () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Password Config Ġ= Ġm Password ET . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Command Restart Ġ= Ġm Command ET . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Password Config . isNotEmpty () Ġ&& Ġm Command Restart . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mis Auto Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġm Number Password ET . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Sms ( number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Sms ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġm Number Password ET . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( password . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Commit Config ( password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text ( resources . getString ( R . string . empty _ password ), ĠRED _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text ( resources . getString ( R . string . commit _ error ), ĠRED _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Tools Presenter ?. set Number Password ( m Number Password ET . text . toString (), Ġm Password Config , Ġm Command Restart ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text ( resources . getString ( R . string . not _ connect ), ĠRED _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text ( resources . getString ( R . string . no _ permission ), ĠRED _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Auto Text . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! mis Auto Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Mode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmis Auto Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Manual Text . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mis Auto Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Mode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmis Auto Mode Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Sms ( number : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP _ MR 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Send Sms ( number , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsms Manager Ġ= ĠS ms Manager . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsms Manager . send Text Message ( ADDRESS _ NUMBER _ 0 , Ġnull , ĠSMS _ CONTENT , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text ( SEND _ SMS _ OK , ĠGREEN _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text ( resources . getString ( R . string . no _ permission _ for _ sms ), ĠRED _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Send Sms ( number : ĠString , Ġsent Intent : ĠPending Intent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsms Sender Ġ= ĠS ms Sender ( context !! , Ġnumber ) ĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= ĠS END _ SMS _ OK ĊĠĠĠĠĠĠĠ Ġvar Ġexception Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubscription Id Ġ= Ġsms Sender . get Subscription Id () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsms Sender . send Sms ( subscriptionId , Ġsent Intent ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠS ms Utils Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e . message ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNO _ SUB SCRIPTION _ ID _ FOUND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġresources . getString ( R . string . wrong _ phone _ number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNO _ PERMISSION _ TO _ READ _ PHONE _ STATE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġresources . getString ( R . string . no _ permission _ phone _ state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNO _ PERMISSION _ FOR _ SMS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġresources . getString ( R . string . no _ permission _ for _ sms ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text ( text , ĠRED _ TEXT ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text ( text , ĠGREEN _ TEXT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Sms Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Sms Reader ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. content Resolver ?. register Content Observer ( Uri . parse ( SMS _ URI ), Ġtrue , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġun Register Sms Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Sms Reader ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. content Resolver ?. unregister Content Observer ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Display Text ( text : ĠString , Ġcolor : ĠString Ġ= ĠNORMAL _ TEXT , Ġdisplay : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Text Ġ+= Ġwhen ( color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNORMAL _ TEXT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< p >$ text </ p >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< p >< font Ġcolor =\" $ color \"> $ text </ font ></ p >" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( display ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Display Text . text Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHtml . from Html ( m Text , ĠHtml . FROM _ HTML _ MODE _ COMP ACT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHtml . from Html ( m Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Display Text () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġm Display Text . text Ġ= Ġm Text ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Commit Config ( code : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Display Text (" Password : Ġ$ code ", ĠGREEN _ TEXT ) ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig Map Ġ= Ġhash Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġm Password Config . split ("; "). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Map [ it ] Ġ= Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhandle Ġ= ĠHandler () ĊĠĠĠĠĠĠĠ ĠThread ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoutput Ġ= Ġempty Array < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Tools Presenter ?. isConnected () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Tools Presenter ?. set Config ( config Map , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ= Ġm Tools Presenter ?. execute Command ( m Command Restart ) Ġ?: ĠarrayOf ("", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( output [ 1 ]. isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text (" Commit ĠPassword : ĠOK ", ĠGREEN _ TEXT , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text (" Complete ! Ġ", ĠGREEN _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Display Text (" Commit ĠPassword : Ġ${ output [ 1 ] }", ĠRED _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Sms Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠHandler () ĊĠĠĠĠĠĠĠ Ġm Sms Reader Ġ= ĠS ms Reader ( context !! , Ġhandler ). setMessage Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Commit Config ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mis Auto Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Number Password ET . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// m Number Password ET ?. set Hint ( R . string . phone _ number _ hint _ manual ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Number Password Layout . hint Ġ= Ġresources . getString ( R . string . phone _ number _ hint _ manual ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Auto Text . background Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Manual Text . background Ġ= ĠContext Compat . get Drawable ( context !! , ĠR . drawable . round _ corner _ background ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Number Password ET . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// m Number Password ET ?. set Hint ( R . string . phone _ number _ hint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Number Password Layout . hint Ġ= Ġresources . getString ( R . string . phone _ number _ hint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Manual Text . background Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Auto Text . background Ġ= ĠContext Compat . get Drawable ( context !! , ĠR . drawable . round _ corner _ background ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ