package Ġcom . sk w crd . flutter _ n fc Ċ Ċ import Ġjava . lang . Exception Ċ import Ġjava . io . IOException Ċ Ċ // import Ġandroid . app . Activity Ċ Ċ import Ġandroid . n fc . Tag Ċ import Ġandroid . n fc . N def Record Ċ import Ġandroid . n fc . N def Message Ċ Ċ import Ġandroid . n fc . tech . N def Ċ import Ġandroid . n fc . tech . N fc A Ċ import Ġandroid . n fc . tech . N fc B Ċ import Ġandroid . n fc . tech . N fc F Ċ import Ġandroid . n fc . tech . N fc V Ċ import Ġandroid . n fc . tech . Iso Dep Ċ import Ġandroid . n fc . tech . M if are Classic Ċ import Ġandroid . n fc . tech . M if are U ltr al ight Ċ import Ġandroid . n fc . tech . Tag Tech nology Ċ Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ Ċ class ĠTag Manager /* ( private Ġval Ġactivity : ĠActivity ) */ Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtags : ĠMutable Map < String , ĠTag > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġvar Ġconnected Tech : ĠTag Tech nology ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget N def Message Map ( message : ĠN def Message ?): ĠMap < String , ĠAny ?> ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Ġmessage Ġ== Ġnull Ġ) Ġ{ Ġreturn Ġnull Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" records " Ġto Ġmessage . records . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" identifier " Ġto Ġit . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġit . type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" typeName Format " Ġto Ġit . tn f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" payload " Ġto Ġit . payload ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget N def Message ( data : ĠMap < String , ĠAny ?> ): ĠN def Message Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= Ġ( data [" records "] Ġas ĠList < *> ). filter Is Instance < Map < String , ĠAny ? >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠN def Message ( records . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN def Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it [" typeName Format "] Ġas ĠInt ). to Short (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [" type "] Ġas ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [" identifier "] Ġas ? ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [" payload "] Ġas ĠByteArray ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Tag Map ( tag : ĠTag ): ĠMap < String , ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandle Ġ= Ġtag . id . toString () ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmutable Map Of < String , ĠAny ?> () ĊĠĠĠĠĠĠĠ Ġval Ġtech List Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠ Ġtags [ handle ] Ġ= Ġtag ĊĊĠĠĠĠĠĠĠ Ġdata [" handle "] Ġ= Ġhandle ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( Ġtech Ġin Ġtag . tech List Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġtech . split (". "). last () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtech List . add ( type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ type ] Ġ= Ġwhen Ġ( tech ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN fc A :: class . java . name Ġ-> ĠN fc A . get ( tag ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" identifier " Ġto Ġtag . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" at qa " Ġto Ġit . at qa , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" max Trans ceive Length " Ġto Ġit . max Trans ceive Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sak " Ġto Ġit . sak , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timeout " Ġto Ġit . timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN fc B :: class . java . name Ġ-> ĠN fc B . get ( tag ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" identifier " Ġto Ġtag . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" application Data " Ġto Ġit . application Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" max Trans ceive Length " Ġto Ġit . max Trans ceive Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" protocol Info " Ġto Ġit . protocol Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN fc F :: class . java . name Ġ-> ĠN fc F . get ( tag ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" identifier " Ġto Ġtag . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" manufacturer " Ġto Ġit . manufacturer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" max Trans ceive Length " Ġto Ġit . max Trans ceive Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" system Code " Ġto Ġit . system Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timeout " Ġto Ġit . timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN fc V :: class . java . name Ġ-> ĠN fc V . get ( tag ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" identifier " Ġto Ġtag . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ds f Id " Ġto Ġit . ds f Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" response Flags " Ġto Ġit . response Flags , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" max Trans ceive Length " Ġto Ġit . max Trans ceive Length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI so Dep :: class . java . name Ġ-> ĠI so Dep . get ( tag ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" identifier " Ġto Ġtag . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hi Layer Response " Ġto Ġit . hi Layer Response , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" h istorical Bytes " Ġto Ġit . h istorical Bytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Extended Length Ap du Supported " Ġto Ġit . is Extended Length Ap du Supported , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" max Trans ceive Length " Ġto Ġit . max Trans ceive Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timeout " Ġto Ġit . timeout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM if are Classic :: class . java . name Ġ-> ĠM if are Classic . get ( tag ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" identifier " Ġto Ġtag . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" block Count " Ġto Ġit . block Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" max Trans ceive Length " Ġto Ġit . max Trans ceive Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sector Count " Ġto Ġit . sector Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" size " Ġto Ġit . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timeout " Ġto Ġit . timeout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġit . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM if are U ltr al ight :: class . java . name Ġ-> ĠM if are U ltr al ight . get ( tag ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" identifier " Ġto Ġtag . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" max Trans ceive Length " Ġto Ġit . max Trans ceive Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" timeout " Ġto Ġit . timeout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġit . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN def :: class . java . name Ġ-> ĠN def . get ( tag ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" identifier " Ġto Ġtag . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" is Writable " Ġto Ġit . is Writable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" maxSize " Ġto Ġit . maxSize , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" can Make ReadOnly " Ġto Ġit . can Make ReadOnly (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cached Message " Ġto Ġget N def Message Map ( it . cached N def Message ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġit . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠN def Format able Ġor ĠN fc Barcode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" identifier " Ġto Ġtag . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdata [" tech List "] Ġ= Ġtech List ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġ< T : ĠTag Tech nology > Ġtag Handler ( ĊĠĠĠĠĠĠĠ Ġcall : ĠMethod Call , ĊĠĠĠĠĠĠĠ Ġresult : ĠResult , ĊĠĠĠĠĠĠĠ Ġget Method : Ġ( Tag ) Ġ-> ĠT ?, ĊĠĠĠĠĠĠĠ Ġcallback : Ġ( T ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġtags [ call . argument < String >(" handle ") !! ] Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" invalid _ parameter ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Tag Ġis Ġnot Ġfound ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtech Ġ= Ġget Method ( tag ) Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" invalid _ parameter ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Tech Ġis Ġnot Ġsupported ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforce Connect ( tech ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( tech ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" io _ exception ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . localized Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdispose Tag ( call : ĠMethod Call , Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġtags . remove ( call . argument < String >(" handle ") !! ) Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtech Ġ= Ġconnected Tech Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Ġ( tech . tag Ġ== Ġtag ) Ġ&& Ġtech . isConnected Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ġtech . close () Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ Ġ/* Ġno Ġop Ġ*/ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconnected Tech Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġresult . success ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġtags . clear () ĊĠĠĠĠĠĠĠ Ġconnected Tech Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġforce Connect ( tech : ĠTag Tech nology ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnected Tech ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Ġ( it . tag Ġ== Ġtech . tag ) Ġ&& Ġ( it :: class . java . name Ġ== Ġtech :: class . java . name ) Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ Ġtech . close () Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ Ġ/* Ġno Ġop Ġ*/ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtech . connect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnected Tech Ġ= Ġtech ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtech . connect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnected Tech Ġ= Ġtech ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }