// Ġ( c ) Ġ 2 0 2 0 - 2 0 2 1 ĠD ian ĠI li ev Ġ( T unt or ius ) Ċ // ĠThis Ġcode Ġis Ġlicensed Ġunder ĠMIT Ġlicense Ġ( see ĠLICENSE . md Ġfor Ġdetails ) Ċ Ċ package Ġcom . t unt ori . m ight ier amp Ċ Ċ import Ġandroidx . annotation . NonNull Ċ import Ġio . flutter . embedding . android . Flutter Activity Ċ import Ġio . flutter . embedding . engine . Flutter Engine Ċ import Ġio . flutter . plugins . Generated Plugin Regist r ant Ċ import Ġio . flutter . embedding . engine . plugins . shim . Sh im Plugin Registry Ċ Ċ import Ġio . flutter . view . Flutter Main Ċ 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 Ġandroid . content . Intent Ċ import Ġandroid . app . Activity Ċ import Ġandroid . net . Uri Ċ Ċ import Ġjava . io . Buffered Writer Ċ import Ġjava . io . OutputStream Ċ import Ġjava . io . OutputStream Writer Ċ Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . io . Data OutputStream Ċ Ċ import Ġjava . nio . Short Buffer Ċ Ċ class ĠMainActivity : ĠFlutter Activity () Ġ{ ĊĠĠĠĠĊĠĠĠ Ġinternal Ġvar ĠWRITE _ REQUEST _ CODE Ġ= Ġ 7 7 7 7 7 Ġ// unique Ġrequest Ġcode ĊĠĠĠ Ġinternal Ġvar ĠOPEN _ REQUEST _ CODE Ġ= Ġ 2 2 2 2 2 ĊĠĠĠ Ġinternal Ġvar ĠOPEN _ REQUEST _ CODE _ BYTE ARRAY Ġ= Ġ 3 3 3 3 3 ĊĠĠĠ Ġinternal Ġvar Ġ_ result : ĠResult ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġ_ data : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġ_ data Ba : ĠByteArray ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġsave ByteArray : Boolean Ġ= Ġfalse ĠĊĊĠĠĠ Ġprivate Ġval ĠCHAN NEL Ġ= Ġ" m ight y _ plug / decoder " ĊĠĠĠ Ġvar Ġdecoder Ġ= ĠMedia Decoder (); ĊĊĠĠĠ Ġoverride Ġfun Ġconfigure Flutter Engine (@ NonNull Ġflutter Engine : ĠFlutter Engine ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGenerated Plugin Regist r ant . register With ( flutter Engine ); ĊĊĠĠĠĠĠĠĠ Ġconfigure Decoder API ( flutter Engine ); ĊĠĠĠĠĠĠĠ Ġconfigure File Save API ( flutter Engine ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfigure Decoder API (@ NonNull Ġflutter Engine : ĠFlutter Engine ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠMethod Channel ( flutter Engine . get Dart Executor (). get Binary Messenger (), ĠCHAN NEL ) ĊĠĠĠĠĠĠĠ Ġ. set MethodCall Handler Ġ{ Ġmethod Call , Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġarguments Ġ= Ġmethod Call . arguments < Map < String , ĠString >>(); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method Call . method Ġ== Ġ" open ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecoder . open ( arguments [" path "], Ġthis ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( null ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( method Call . method Ġ== Ġ" next ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( decoder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbuffer Ġ= Ġdecoder . read Short Data (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( buffer ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error (" decoder _ un available ", Ġ" you Ġmust Ġopen Ġa Ġfile Ġfirst ", Ġnull ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( method Call . method Ġ== Ġ" close ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( decoder Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecoder . release (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( null ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( method Call . method Ġ== Ġ" duration ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( decoder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdur Ġ= Ġdecoder . get Duration (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( dur ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error (" decoder _ un available ", Ġ" you Ġmust Ġopen Ġa Ġfile Ġfirst ", Ġnull ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( method Call . method Ġ== Ġ" sample Rate ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( decoder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsr Ġ= Ġdecoder . get Sample Rate (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( sr ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . error (" decoder _ un available ", Ġ" you Ġmust Ġopen Ġa Ġfile Ġfirst ", Ġnull ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfigure File Save API (@ NonNull Ġflutter Engine : ĠFlutter Engine ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠMethod Channel ( flutter Engine . get Dart Executor (). get Binary Messenger (), Ġ" com . ms v code . file sa ver / files ") ĊĠĠĠĠĠĠĠ Ġ. set MethodCall Handler Ġ{ Ġcall , Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNote : Ġthis Ġmethod Ġis Ġinvoked Ġon Ġthe Ġmain Ġthread . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( call . method Ġ== Ġ" save File ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ result Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave ByteArray Ġ= Ġcall . argument < Boolean ?> (" byteArray ") Ġ?: Ġfalse ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( save ByteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data Ba Ġ= call . argument < ByteArray >(" data ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data Ġ= Ġcall . argument < String >(" data "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmime : String ? Ġ= Ġcall . argument < String ?> (" mime "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġname : String ? Ġ= Ġcall . argument < String ?> (" name "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mime != null Ġ&& Ġname != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate File ( mime , Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( call . method Ġ== Ġ" open File ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ result Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmime : String ? Ġ= Ġcall . argument < String ?> (" mime "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠbyteArray : Boolean ? Ġ= Ġcall . argument < Boolean ?> (" byte _ array "); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mime != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen File ( mime , ĠbyteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . not Implemented () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate File ( mime Type : ĠString , ĠfileName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ CREATE _ DOCUMENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFilter Ġto Ġonly Ġshow Ġresults Ġthat Ġcan Ġbe Ġ" opened ", Ġsuch Ġas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġa Ġfile Ġ( as Ġopposed Ġto Ġa Ġlist Ġof Ġcontacts Ġor Ġtime zones ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Category ( Intent . CATEGORY _ OP ENABLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġfile Ġwith Ġthe Ġrequested ĠMIME Ġtype . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠmimeType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Intent . EXTRA _ TITLE , ĠfileName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠWRITE _ REQUEST _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// replace Ġwith ĠACTION _ GET _ CONTENT Ġfor Ġjust Ġa Ġtemporary Ġaccess ĊĠĠĠ Ġ// the Ġother Ġis ĠACTION _ OPEN _ DOCUMENT ĊĠĠĠ Ġprivate Ġfun Ġopen File ( mime Type : ĠString , ĠbyteArray : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ GET _ CONTENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFilter Ġto Ġonly Ġshow Ġresults Ġthat Ġcan Ġbe Ġ" opened ", Ġsuch Ġas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġa Ġfile Ġ( as Ġopposed Ġto Ġa Ġlist Ġof Ġcontacts Ġor Ġtime zones ). ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Category ( Intent . CATEGORY _ OP ENABLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġfile Ġwith Ġthe Ġrequested ĠMIME Ġtype . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠmimeType ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( byteArray Ġ!= Ġnull Ġ&& ĠbyteArray Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠOPEN _ REQUEST _ CODE _ BYTE ARRAY ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠOPEN _ REQUEST _ CODE ) ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĊĠĠĠ Ġ// ĠCheck Ġwhich Ġrequest Ġwe 're Ġrespon ding Ġto ĊĠĠĠ Ġif Ġ( request Code Ġ== ĠWRITE _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġthe Ġrequest Ġwas Ġsuccessful ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull Ġ&& Ġdata . getData () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// now Ġwrite Ġthe Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite In File ( data . getData () Ġas ĠUri ) Ġ// data . getData () Ġis ĠUri ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ result ?. error (" NO ĠDATA ", Ġ" No Ġdata ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ_ result ?. error (" C ANCE LED ", Ġ" User Ġcancelled ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( request Code Ġ== ĠOPEN _ REQUEST _ CODE Ġ|| ĠĊĠĠĠĠĠĠĠ Ġrequest Code Ġ== ĠOPEN _ REQUEST _ CODE _ BYTE ARRAY ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull Ġ&& Ġdata . getData () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// now Ġwrite Ġthe Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠOPEN _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠreadFile ( data . getData () Ġas ĠUri , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠreadFile ( data . getData () Ġas ĠUri , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ result ?. error (" NO ĠDATA ", Ġ" No Ġdata ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ result ?. error (" C ANCE LED ", Ġ" User Ġcancelled ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġwrite In File ( uri : ĠUri ) Ġ{ ĊĠĠĠ Ġval ĠoutputStream : ĠOutputStream ? ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠoutputStream Ġ= ĠgetContent Resolver (). open OutputStream ( uri ) ĊĠĠĠĠĠ Ġif Ġ( output Stream != null ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( save ByteArray Ġ&& Ġ_ data Ba != null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġds Ġ= ĠData OutputStream ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġds . write (_ data Ba !! , Ġ 0 , Ġ_ data Ba ?. count () Ġ?: Ġ 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġds . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġds . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbw Ġ= ĠBuffered Writer ( OutputStream Writer ( output Stream )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbw . write (_ data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbw . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbw . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ_ result ?. success (" SUCCESS "); ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ_ result ?. error (" ERROR ", Ġ" Unable Ġto Ġwrite ", Ġnull ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : Exception ){ ĊĠĠĠĠĠ Ġ_ result ?. error (" ERROR ", Ġ" Unable Ġto Ġwrite ", Ġnull ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠreadFile ( uri : ĠUri , Ġdata Array : ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġval ĠinputStream : ĠInputStream ? ĊĠĠĠĠĠ Ġval Ġinput StreamReader : ĠInputStreamReader ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream Ġ= ĠgetContent Resolver (). open InputStream ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput StreamReader Ġ= ĠInputStreamReader ( inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! data Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbr Ġ= ĠBufferedReader ( input StreamReader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Content Ġ= Ġbr . use Ġ{ Ġinput StreamReader . read Text () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbr . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ result ?. success ( file Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inputStream != null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠinputStream . read Bytes (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ result ?. success ( array ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Exception ){ ĊĠĠĠĠĠ Ġ_ result ?. error (" ERROR ", Ġ" Unable Ġto Ġread ", Ġnull ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ