package Ġcom . ara . flutter _ h ms _ scan _ kit Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . NonNull Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġcom . hu awei . h ms . hm ss c ank it . Scan Util Ċ import Ġcom . hu awei . h ms . hm ss c ank it . Writer Exception Ċ import Ġcom . hu awei . h ms . ml . scan . H ms Build Bitmap Option Ċ import Ġcom . hu awei . h ms . ml . scan . H ms Scan Ċ import Ġcom . hu awei . h ms . ml . scan . H ms Scan Analyzer Options Ċ import Ġio . flutter . embedding . engine . plugins . Flutter Plugin Ċ import Ġio . flutter . embedding . engine . plugins . activity . Activity Aware Ċ import Ġio . flutter . embedding . engine . plugins . activity . Activity Plugin Binding Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġio . flutter . plugin . common . Method Channel . MethodCall Handler Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . util .* ĊĊ Ċ /** ĠFlutter H ms Scan Kit Plugin Ġ*/ Ċ class ĠFlutter H ms Scan Kit Plugin Ġ: ĠFlutter Plugin , ĠMethod Call Handler , ĠActivity Aware Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= ĠFlutter H ms Scan Kit Plugin :: java Class . name ĊĠĠĠ Ġprivate Ġval ĠCAM ERA _ REQ _ CODE Ġ= Ġ 1 1 1 ĊĠĠĠ Ġprivate Ġval ĠREQUEST _ CODE _ SCAN Ġ= Ġ 0 X 0 1 ĊĊĠĠĠ Ġ/// ĠThe ĠMethod Channel Ġthat Ġwill Ġthe Ġcommunication Ġbetween ĠFlutter Ġand Ġnative ĠAndroid ĊĠĠĠ Ġ/// ĊĠĠĠ Ġ/// ĠThis Ġlocal Ġreference Ġserves Ġto Ġregister Ġthe Ġplugin Ġwith Ġthe ĠFlutter ĠEngine Ġand Ġunregister Ġit ĊĠĠĠ Ġ/// Ġwhen Ġthe ĠFlutter ĠEngine Ġis Ġdet ached Ġfrom Ġthe ĠActivity ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchannel : ĠMethod Channel ĊĊĠĠĠ Ġprivate Ġvar Ġresult : ĠResult ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Engine (@ NonNull Ġflutter Plugin Binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel Ġ= ĠMethod Channel ( flutter Plugin Binding . binary Messenger , Ġ" flutter _ h ms _ scan _ kit ") ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MethodCall (@ NonNull Ġcall : ĠMethod Call , Ġ@ NonNull Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . result Ġ= Ġresult ĊĠĠĠĠĠĠĠ Ġif Ġ( call . method Ġ== Ġ" get Platform Version ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success (" Android Ġ${ android . os . Build . VERSION . RELEASE }") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( call . method Ġ== Ġ" start Scan ") Ġ{// æī« çłģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( call . method Ġ== Ġ" generate Code ") Ġ{// çĶŁäº§ æĿ¡ çłģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent : ĠString ? Ġ= Ġcall . argument (" content ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠInt ? Ġ= Ġcall . argument (" type ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth : ĠInt ? Ġ= Ġcall . argument (" width ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight : ĠInt ? Ġ= Ġcall . argument (" height ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor : ĠString ? Ġ= Ġcall . argument (" color ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogo : ĠByteArray ? Ġ= Ġcall . argument (" logo ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Code ( content , Ġtype , Ġwidth , Ġheight , Ġcolor , Ġlogo ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . not Implemented () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Engine (@ NonNull Ġbinding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Activity ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġbinding . activity ĊĠĠĠĠĠĠĠ Ġon Request Permissions Result Listener ( binding ) ĊĠĠĠĠĠĠĠ Ġon Activity Result Listener ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Activity For Config Changes () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Re attached To Activity For Config Changes ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Activity () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApply Ġfor Ġpermissions . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrequest Permission () Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity !! , ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA , ĠManifest . permission . READ _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCAM ERA _ REQ _ CODE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Request Permissions Result Listener ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . add Request Permissions Result Listener Ġ{ Ġrequest Code : ĠInt , Ġpermissions : ĠArray < String ?> ?, Ġgrant Results : ĠInt Array ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( permissions Ġ== Ġnull Ġ|| Ġgrant Results Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Request Permissions Result Listener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ< Ġ 2 Ġ|| Ġgrant Results [ 0 ] Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED Ġ|| Ġgrant Results [ 1 ] Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Request Permissions Result Listener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Default ĠView ĠMode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠCAM ERA _ REQ _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScan Util . start Scan ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ SCAN , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH ms Scan Analyzer Options . Creator (). create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Activity Result Listener ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . add Activity Result Listener Ġ{ Ġrequest Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ!= ĠActivity . RESULT _ OK Ġ|| Ġdata Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ add Activity Result Listener Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Default ĠView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CODE _ SCAN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj : ĠH ms Scan ? Ġ= Ġdata . get Parcelable Extra ( Scan Util . RESULT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap : ĠMutable Map < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" scan Type "] Ġ= Ġobj . get Scan Type () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" scan Type Form "] Ġ= Ġobj . get Scan Type Form () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ æĿ¡ çłģ åİŁå§ĭ çļĦ åħ¨éĥ¨ çłģ åĢ¼ ä¿¡æģ¯ ãĢĤ åıªæľī å½ĵ æĿ¡ çłģ ç¼ĸçłģ æł¼å¼ı ä¸º UTF - 8 æĹ¶ æīį åı¯ä»¥ä½¿çĶ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj . get Original Value () Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" value "] Ġ= Ġobj . get Original Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĿŀ UTF - 8 æł¼å¼ı çļĦ æĿ¡ çłģ ä½¿çĶ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( obj . get Origin Value Byte () Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" value Byte "] Ġ= Ġobj . get Origin Value Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. success ( map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. success ( HashMap < Any , ĠAny >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġhandle Ġmethod Ġcall ", Ġe ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠçĶŁæĪĲ æĿ¡ çłģ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgenerate Code ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent : ĠString ? Ġ= Ġ"", Ġtype : ĠInt ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth : ĠInt ?, Ġheight : ĠInt ?, Ġcolor : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogo : ĠByteArray ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( content Ġ== Ġnull Ġ|| Ġcontent . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" è¯·è¾ĵåħ¥ çĶŁæĪĲ åĨħå®¹ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Generate Ġthe Ġbarcode . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠH ms Build Bitmap Option . Creator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Bitmap BackgroundColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( color Ġ!= Ġnull Ġ&& Ġcolor . length Ġ== Ġ 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcode Color : ĠInt Ġ= ĠColor . parse Color ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . set Bitmap Color ( code Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logo Ġ!= Ġnull Ġ&& Ġlogo . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . set QR Logo Bitmap ( byte 2 Bitmap ( logo )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠScan Util . build Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent , Ġtype Ġ?: ĠH ms Scan . QR CODE _ SCAN _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ?: Ġ 5 0 0 , Ġheight Ġ?: Ġ 5 0 0 , Ġoptions . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap : ĠMutable Map < String , ĠAny > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [" code "] Ġ= Ġbitmap 2 Byte ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. success ( map ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠWriter Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" åıĤæķ° éĶĻè¯¯ ", Ġe ); ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ" åıĤæķ° éĶĻè¯¯ ï¼ģ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġhandle Ġmethod Ġcall ", Ġe ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbitmap 2 Byte ( bitmap : ĠBitmap ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , Ġba os ) ĊĠĠĠĠĠĠĠ Ġbitmap . recycle () ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġba os . toByteArray (); ĊĠĠĠĠĠĠĠ Ġba os . close () ĊĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbyte 2 Bitmap ( bytes : ĠByteArray ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode ByteArray ( bytes , Ġ 0 , Ġbytes . size ) ĊĠĠĠ Ġ} Ċ } Ċ