package Ġorg . h yn . tit an . utils Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Clipboard Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . util . Log Ċ import Ġcom . github . sal om on br ys . kot son . fromJson Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . JsonArray Ċ import Ġcom . google . gson . Json Syntax Exception Ċ import Ġcom . h yn . tit an . tools . App Print Interface Ċ import Ġcom . h yn . tit an . tools . App Print Tools Ċ import Ġio . flutter . embedding . engine . plugins . Flutter Plugin Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġorg . h yn . tit an . wallet . type msg . Crypto Functions Ċ import Ġorg . h yn . tit an . wallet . type msg . Json Rpc Request Ċ import Ġorg . h yn . tit an . wallet . type msg . Message Utils Ċ import Ġorg . h yn . tit an . wallet . type msg . Provider Typed Data Ċ import Ġjava . io . ByteArray OutputStream Ċ Ċ // import Ġio . flutter . plugin . common . Plugin Registry Ċ // import Ġcom . h yn . tit an . tools . App Print Interface Ċ // import Ġcom . h yn . tit an . tools . App Print Tools Ċ Ċ class ĠApp Tools Plugin Ġ: ĠFlutter Plugin Ġ{ ĊĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġoverride Ġfun Ġon MethodCall ( call : ĠMethod Call , Ġresult : ĠMethod Channel . Result ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġmethod Channel Ġ: Method Channel ĊĠĠĠĠĠĠĠ Ġfun Ġregister With ( plugin Registry : ĠPlugin Registry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Channel Ġ= ĠMethod Channel ( plugin Registry . regist rar For (" org . h yn . tit an . utils . App Tools Plugin "). messenger (), Ġ" org . h yn . tit an / call _ channel ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠApp Print Tools . app Print Interface Ġ= Ġobject Ġ: ĠApp Print Interface { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprint Log ( log Msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Channel . invoke Method (" print Log ", log Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdee plink Start ( data Ġ: ĠUri ? ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( data Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhost Ġ= Ġdata . host Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif (" contract " Ġ== Ġhost ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparams Ġ= Ġdata . path Segments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( params . size Ġ== Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcontent Map : Mutable Map < String , String > Ġ= Ġmutable Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . query Parameter Names . map Indexed Ġ{ Ġindex , Ġkey Str Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Map . put ( key Str , Ġdata . getQuery Parameter ( key Str ) Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmap Value Ġ= Ġmap Of (" type " Ġto Ġhost ," sub Type " Ġto Ġparams [ 0 ]," content " Ġto Ġcontent Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Channel . invoke Method (" p 2 f Dee plink ", map Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* var Ġcontract Id Ġ= Ġdata . getQuery Parameter (" contract Id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey Ġ= Ġdata . getQuery Parameter (" key ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmap Value Ġ= Ġmap Of (" type " Ġto Ġhost ," sub Type " Ġto Ġparams [ 0 ]," content " Ġto Ġmap Of (" contract Id " Ġto Ġcontract Id ," key " Ġto Ġkey )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Channel . invoke Method (" url Launcher ", map Value ) */ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor (){ ĊĠĠĠĠĠĠĠ ĠApp Print Tools . app Print Interface Ġ= Ġobject Ġ: ĠApp Print Interface Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprint Log ( log Msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Channel ?. invoke Method (" print Log ", log Msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmethod Channel : ĠMethod Channel ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġs Channel Name Ġ= Ġ" org . h yn . tit an / call _ channel " ĊĠĠĠ Ġprivate Ġvar Ġcontext : ĠContext ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġdeep Link Start ( data Ġ: ĠUri ? ){ ĊĠĠĠĠĠĠĠ Ġif ( data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġhost Ġ= Ġdata . host ĊĠĠĠĠĠĠĠ Ġvar Ġparams Ġ= Ġdata . path Segments ĊĠĠĠĠĠĠĠ Ġif ( params . size Ġ== Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcontent Map : Mutable Map < String , String > Ġ= Ġmutable Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . query Parameter Names . map Indexed Ġ{ Ġindex , Ġkey Str Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Map . put ( key Str , Ġdata . getQuery Parameter ( key Str ) Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmap Value Ġ= Ġmap Of (" type " Ġto Ġhost ," sub Type " Ġto Ġparams [ 0 ]," content " Ġto Ġcontent Map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Channel ?. invoke Method (" p 2 f Dee plink ", map Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Clipboard Data () Ġ: ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ ç³»ç»Ł åī ª è´ ´ æĿ¿ æľįåĬ¡ ĊĠĠĠĠĠĠĠ Ġvar Ġclipboard Manager Ġ= Ġcontext !!. getSystem Service ( Context . CLIP BOARD _ SERVICE ) Ġas ĠClip board Manager ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġclipboard Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ åī ª è´ ´ æĿ¿ çļĦ åī ª è´ ´ æķ°æį® éĽĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġclip Data Ġ= Ġclipboard Manager . primary Clip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġclip Data Ġ&& Ġclip Data . item Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġä»İ æķ°æį® éĽĨ ä¸Ń èİ·åıĸ ï¼Ī ç² ĺ è´ ´ ï¼ī ç¬¬ä¸Ģ æĿ¡ æĸĩæľ¬ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġitem Ġ= Ġclip Data . getItem At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitem ?. text ?. toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* for ( i Ġin Ġ 0 Ġuntil Ġclip Data . item Count ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġitem Ġ= Ġclip Data . getItem At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( item ?. text ?. contains (" tit an :// contract / detail ") Ġ== Ġtrue ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshare User Ġ= Ġitem . text . split (" key =" )[ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclipboard Manager . text Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmap Value Ġ= Ġmap Of (" type " Ġto Ġ" save "," sub Type " Ġto Ġ" share User "," content " Ġto Ġmap Of (" share User Value " Ġto Ġshare User )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Channel ?. invoke Method (" url Launcher ", map Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset MethodCall Handler ( context : ĠContext , Ġcall : ĠMethod Call , Ġresult : ĠMethod Channel . Result ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( call . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" clipboard Data " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġclip Data Ġ= Ġget Clipboard Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( clip Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" f 2 p Dee plink " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġintent Ġ= Ġ( context Ġas ĠActivity ). intent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeep Link Start ( intent . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" sign Typed Message " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdata Map Ġ= Ġcall . argument < Map < String , ĠAny >> (" data ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcrypto Functions Ġ= ĠCrypto Functions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgson Tool : ĠGson Ġ= ĠGson Builder (). enable Complex Map Key Serialization (). create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġjson Str Ġ= Ġgson Tool . toJson ( data Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĹ§ çļĦ typed message çŃ¾åĲį æĸ¹æ³ķ ï¼Į åŁºæľ¬ ä¸į çĶ¨ ï¼Į åıª ä½ľä¸º åħ¼ å®¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġraw Data : ĠArray < Provider Typed Data > Ġ= Ġgson Tool . fromJson ( json Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwrite Buffer Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Buffer . write ( crypto Functions . ke cc ak 2 5 6 ( Message Utils . encode Params ( raw Data ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Buffer . write ( crypto Functions . ke cc ak 2 5 6 ( Message Utils . encode Values ( raw Data ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ("$ json Str ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception Ġ: ĠJson Syntax Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĸ°çļĦ typed message çŃ¾åĲį æĸ¹æ³ķ ï¼Į åŁºæľ¬ çĶ¨ è¿Ļä¸ª ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġjson Str Ġ= Ġgson Tool . toJson ( data Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrequest : ĠJson Rpc Request < JsonArray > Ġ= Ġgson Tool . fromJson ( json Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( request . params Ġ!= Ġnull Ġ&& Ġrequest . params . size () Ġ>= Ġ 2 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstructured Data Ġ= Ġcrypto Functions . get Structured Data ( request . params [ 1 ]. toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( structured Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Engine ( binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmethod Channel Ġ= ĠMethod Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . flutter Engine . dart Executor . binary Messenger , Ġs Channel Name ) ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġbinding . application Context ĊĠĠĠĠĠĠĠ Ġmethod Channel ?. set MethodCall Handler Ġ{ Ġcall , Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset MethodCall Handler ( context !! , call , Ġresult ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Engine ( binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmethod Channel ?. set MethodCall Handler ( null ) ĊĠĠĠĠĠĠĠ Ġmethod Channel Ġ= Ġnull ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠInvalid Json Rpc Params Exception ( val ĠrequestId : ĠLong ) Ġ: ĠException (" Invalid ĠJSON ĠRPC ĠRequest ")