package Ġuz . s ic nt . hor cr ux Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content .* Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Base 6 4 Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġuz . s ic nt . hor cr ux . Constants .* Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠHor cr ux ( private Ġval Ġcontext : ĠContext , Ġprivate Ġval ĠapiKey : ĠString ) Ġ: ĠActivity (), ĊĠĠĠ ĠDialog Interface . OnClickListener Ġ{ ĊĊĠĠĠ Ġval Ġtag : ĠString Ġ= Ġ" H OR CR UX " ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpk cs 7 : ĠString ĊĠĠĠ Ġprivate Ġvar Ġserial Number : ĠCharSequence ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsignature : ĠByteArray ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġsubject : ĠCharSequence ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġregex Ġ= Ġ", ?( \\\\ s )* ([ A - Za - z ]+ |[ 0 - 9 \\\\ . ]+ )= ([^ = , \\\\ ]* ), ?( \\\\ s )* " ĊĠĠĠ Ġprivate Ġvar Ġp : ĠPattern Ġ= ĠPattern . compile ( regex ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠĠĠĠĠ ĠCurrent Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġmass age ĠĠĠĠĠ ĠString Ġvalue Ġto Ġgenerate ĠPKCS 7 ĊĠĠĠĠ Ġ* Ġ@ param Ġserial Number ĠApp Ġserial Ġnumber Ġ( Optional ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate PKCS 7 ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠActivity , ĊĠĠĠĠĠĠĠ Ġmass age : ĠString , ĊĠĠĠĠĠĠĠ Ġserial Number : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġmass age . toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . set ClassName ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE _ IM ZO _ APP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE _ IM ZO _ ACTIVITY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ API _ KEY , ĠapiKey ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ SERIAL _ NUMBER , Ġserial Number ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ MESSAGE , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity For Result ( intent , ĠCREATE _ PKCS 7 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠCurrent Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġmass age ĠString Ġvalue Ġto Ġgenerate ĠPKCS 7 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate PKCS 7 ( context : ĠActivity , Ġmass age : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġserial Number Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġmass age . toByteArray () ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . set ClassName ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE _ IM ZO _ APP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE _ IM ZO _ ACTIVITY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ API _ KEY , ĠapiKey ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ SERIAL _ NUMBER , Ġserial Number ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ MESSAGE , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity For Result ( intent , ĠCREATE _ PKCS 7 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠCurrent Ġactivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġappend Pk cs 7 ( context : ĠActivity ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpk cs 7 : ĠByteArray Ġ= ĠBase 6 4 . decode ( get PKCS (), ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . set ClassName ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE _ IM ZO _ APP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE _ IM ZO _ ACTIVITY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ API _ KEY , ĠapiKey ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ SERIAL _ NUMBER , Ġget SerialNumber ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ APPEND _ PKCS 7 , Ġpk cs 7 ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity For Result ( intent , ĠAPP END _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠCurrent Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġpk cs 7 String ĠString Ġvalue Ġto Ġgenerate ĠPKCS 7 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġappend Pk cs 7 ( context : ĠActivity , Ġpk cs 7 String : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpk cs 7 : ĠByteArray Ġ= ĠBase 6 4 . decode ( pkcs 7 String , ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . set ClassName ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE _ IM ZO _ APP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE _ IM ZO _ ACTIVITY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ API _ KEY , ĠapiKey ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ SERIAL _ NUMBER , Ġget SerialNumber ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ APPEND _ PKCS 7 , Ġpk cs 7 ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity For Result ( intent , ĠAPP END _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠCurrent Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġpk cs 7 String ĠString Ġvalue Ġto Ġgenerate ĠPKCS 7 ĊĠĠĠĠ Ġ* Ġ@ param Ġserial Number ĠString Ġvalue Ġof Ġserial Number ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġappend Pk cs 7 ( context : ĠActivity , Ġpk cs 7 String : ĠString , Ġserial Number : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpk cs 7 : ĠByteArray Ġ= ĠBase 6 4 . decode ( pkcs 7 String , ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . set ClassName ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE _ IM ZO _ APP , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE _ IM ZO _ ACTIVITY ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ API _ KEY , ĠapiKey ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ SERIAL _ NUMBER , Ġserial Number ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ APPEND _ PKCS 7 , Ġpk cs 7 ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity For Result ( intent , ĠAPP END _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠCurrent Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Stamp ĠString Ġvalue Ġtimestamp ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġattach Pk cs 7 ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠActivity , ĊĠĠĠĠĠĠĠ Ġtime Stamp : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpk cs 7 : ĠByteArray Ġ= ĠBase 6 4 . decode ( get PKCS (), ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠ Ġval Ġt st : ĠByteArray Ġ= ĠBase 6 4 . decode ( time Stamp , ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . set ClassName ( E _ IM ZO _ APP , ĠE _ IM ZO _ ACTIVITY ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ API _ KEY , ĠapiKey ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ ATTACH _ SERIAL _ NUMBER , Ġget SerialNumber ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ ATTACH _ PKCS 7 , Ġpk cs 7 ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ ATTACH _ T ST , Ġt st ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity For Result ( intent , ĠATT ACH _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠCurrent Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġpk cs 7 String ĠString Ġvalue ĠPK SC 7 ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Stamp ĠString Ġvalue Ġtimestamp ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġattach Pk cs 7 ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠActivity , ĊĠĠĠĠĠĠĠ Ġpk cs 7 String : ĠString , ĊĠĠĠĠĠĠĠ Ġtime Stamp : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpk cs 7 : ĠByteArray Ġ= ĠBase 6 4 . decode ( pkcs 7 String , ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠ Ġval Ġt st : ĠByteArray Ġ= ĠBase 6 4 . decode ( time Stamp , ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . set ClassName ( E _ IM ZO _ APP , ĠE _ IM ZO _ ACTIVITY ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ API _ KEY , ĠapiKey ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ ATTACH _ SERIAL _ NUMBER , Ġget SerialNumber ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ ATTACH _ PKCS 7 , Ġpk cs 7 ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ ATTACH _ T ST , Ġt st ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity For Result ( intent , ĠATT ACH _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠCurrent Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġpk cs 7 String ĠString Ġvalue ĠPK SC 7 ĊĠĠĠĠ Ġ* Ġ@ param Ġserial Number ĠString Ġvalue Ġserial Ġnum be ĊĠĠĠĠ Ġ* Ġ@ param Ġtime Stamp ĠString Ġvalue Ġtimestamp ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġattach Pk cs 7 ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠActivity , ĊĠĠĠĠĠĠĠ Ġpk cs 7 String : ĠString , ĊĠĠĠĠĠĠĠ Ġserial Number : ĠString , ĊĠĠĠĠĠĠĠ Ġtime Stamp : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpk cs 7 : ĠByteArray Ġ= ĠBase 6 4 . decode ( pkcs 7 String , ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠ Ġval Ġt st : ĠByteArray Ġ= ĠBase 6 4 . decode ( time Stamp , ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . set ClassName ( E _ IM ZO _ APP , ĠE _ IM ZO _ ACTIVITY ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ API _ KEY , ĠapiKey ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ ATTACH _ SERIAL _ NUMBER , Ġserial Number ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ ATTACH _ PKCS 7 , Ġpk cs 7 ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PARAM _ ATTACH _ T ST , Ġt st ) ĊĠĠĠĠĠĠĠ Ġcontext . startActivity For Result ( intent , ĠATT ACH _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠParse ĠP FX Ġfile ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġparse P FX ( data : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġpk cs 7 Ġ= ĠBase 6 4 . encode ToString ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata !!. get ByteArray Extra ( EXTRA _ RESULT _ PKCS 7 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . NO _ WRAP ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġserial Number Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . get CharSequence Extra ( EXTRA _ RESULT _ SERIAL _ NUMBER ) ĊĠĠĠĠĠĠĠ Ġsignature Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . get ByteArray Extra ( EXTRA _ RESULT _ SIGNATURE ) ĊĠĠĠĠĠĠĠ Ġsubject Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . get CharSequence Extra ( EXTRA _ RESULT _ SUBJECT _ NAME ) ĊĊĠĠĠĠĠĠĠ Ġwrite String ( EXTRA _ RESULT _ PKCS 7 , Ġpk cs 7 ) ĊĠĠĠĠĠĠĠ Ġwrite String ( EXTRA _ RESULT _ SERIAL _ NUMBER , Ġserial Number Ġas ĠString ) ĊĠĠĠĠĠĠĠ Ġwrite String ( EXTRA _ RESULT _ SUBJECT _ NAME , Ġsubject Ġas ĠString ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠCheck Ġif Ġuser Ġis ĠLeg al ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Legal (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġread String ( EXTRA _ RESULT _ SUBJECT _ NAME ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsubject . contains ( Y UR _ TIN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠCheck Ġif Ġuser Ġis ĠIndividual ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Individual (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġread String ( EXTRA _ RESULT _ SUBJECT _ NAME ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ! subject . contains ( Y UR _ TIN ) Ġ&& Ġsubject . contains ( FI Z _ TIN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠUser Ġtin ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget T in (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= Ġread String ( EXTRA _ RESULT _ SUBJECT _ NAME ) ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġp . matcher ( subject Ġas ĠCharSequence ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( m . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m . group (). contains ( Y UR _ TIN )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy ur T in Ġ= Ġm . group (). split ("# "). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdecode Hex ( y ur T in [ 1 ]). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m . group (). contains ( FI Z _ TIN )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf iz T in Ġ= Ġm . group (). split (" =" ). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġf iz T in [ 1 ]. replace (",", Ġ""). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠPKCS 7 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget PKCS (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġread String ( EXTRA _ RESULT _ PKCS 7 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠSerial Ġnumber ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget SerialNumber (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġread String ( EXTRA _ RESULT _ SERIAL _ NUMBER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠSubject Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Subject Name (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġread String ( EXTRA _ RESULT _ SUBJECT _ NAME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠCheck Ġif ĠE - im zo Ġapp Ġinstalled ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis E Im zo Installed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpackage Manager Ġ= Ġcontext . package Manager ĊĠĠĠĠĠĠĠ Ġvar Ġfound Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Manager . get Package Info ( E _ IM ZO _ APP , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfound Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfound ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShow Ġinstallation Ġdialog ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow Install Dialog ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( activity , ĠR . style . exit Dialog ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . e im zo _ not _ install ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . yes , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . no , Ġthis ). create (). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġhex ĠString Ġvalue ĊĠĠĠĠ Ġ* Ġ@ return ĠDe coded Ġbyte Ġarray ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdecode Hex ( hex : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġhex Data Ġ= Ġhex . toCharArray () ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( count Ġ< Ġhex Data . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Digit Ġ= ĠCharacter . digit ( hex Data [ count ], Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Digit Ġ= ĠCharacter . digit ( hex Data [ count Ġ+ Ġ 1 ], Ġ 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecimal Ġ= Ġfirst Digit Ġ* Ġ 1 6 Ġ+ Ġlast Digit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( decimal . to Char ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSave Ġtemp Ġdata ĠĠ ĠFIXME ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġwrite String ( key : ĠString , Ġproperty : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġeditor : ĠSharedPreferences . Editor Ġ= Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠ Ġeditor . putString ( key , Ġproperty ) ĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRead Ġtemp Ġdata ĠĠ ĠFIXME ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġread String ( key : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshared Preferences Ġ= ĠPreference Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġshared Preferences . getString ( key , Ġ"") !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġbytes ĠBytes Ġto ĊĠĠĠĠ Ġ* Ġ@ return ĠString ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġto HexString ( bytes : ĠByteArray ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhex String Ġ= Ġjava . lang . StringBuilder () ĊĠĠĠĠĠĠĠ Ġif Ġ( bytes Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( a Byte Ġin Ġbytes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhex Ġ= ĠInteger . to HexString ( 0 xFF Ġand Ġa Byte . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hex . length Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhex String . append (' 0 ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhex String . append ( hex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhex String . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( dialog : ĠDialog Interface , Ġwhich : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( which ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . BUTTON _ POSITIVE Ġ-> Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" market :// details ? id =$ E _ IM ZO _ APP ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" https :// play . google . com / store / apps / details ? id =$ E _ IM ZO _ APP ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . BUTTON _ NEGATIVE Ġ-> Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }