package Ġcom . analytics . blo tout Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġcom . analytics . blo tout . model .* Ċ import Ġcom . analytics . blo tout . network . Host Configuration Ċ import Ġcom . analytics . blo tout . repository . Event Repository Ċ import Ġcom . analytics . blo tout . repository . impl . Shared Preference Secure Vault Impl Ċ import Ġcom . analytics . blo tout . util . Constant Ċ import Ġcom . analytics . blo tout . util . Errors Ċ import Ġcom . analytics . blo tout . util . serialize ToMap Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġjava . lang . Exception Ċ Ċ open Ġclass ĠB lo tout Analytics Internal Ġ: ĠB lo tout Analytics Interface Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Analytics Internal " ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġinit ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠĠĠĠĠ Ġblo tout Analytics Configuration : ĠB lo tout Analytics Configuration , ĊĠĠĠĠĠĠĠ Ġcompletion Handler : ĠCompletion Handler ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Default ). launch Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecure Vault Ġ= ĠShared Preference Secure Vault Impl ( application . get SharedPreferences (" vault ", ĠContext . MODE _ PRIVATE ), Ġ" crypto ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhost Configuration Ġ= ĠHost Configuration ( baseUrl Ġ= Ġblo tout Analytics Configuration . end Point Url , Ġbase Key Ġ= Ġblo tout Analytics Configuration . blo tout SDK Key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠDependency Injector Impl . init ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Ġ= Ġapplication , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecure Storage Service Ġ= Ġsecure Vault , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhost Configuration Ġ= Ġhost Configuration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( blo tout Analytics Configuration . validate Request ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . ERROR _ KEY _ NOT _ PROPER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion Handler . onError ( code = ErrorCode s . ERROR _ CODE _ SDK _ KEY _ NOT _ PROPER , Ġmsg Ġ= Ġ" SDK Ġkey Ġis Ġinvalid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErrors . ERROR _ URL _ NOT _ PROPER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion Handler . onError ( code = ErrorCode s . ERROR _ CODE _ END _ POINT _ URL _ NOT _ PROPER , Ġmsg Ġ= Ġ" End Ġpoint Ġurl Ġis Ġinvalid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠDependency Injector Impl . getInstance (). get Manifest Repository () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Manifest Configuration () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( result ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDependency Injector Impl . getInstance (). initialize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion Handler . on Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion Handler . onError ( code = result . error Data . code , Ġmsg Ġ= Ġresult . error Data . msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġenable ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDependency Injector Impl . getInstance (). get Secure Storage Service () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. store Boolean ( Constant . IS _ SDK _ ENABLE , Ġenabled ) ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , e . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġcapture ( eventName : ĠString , Ġevent Info : ĠHashMap < String , ĠAny > ){ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Default ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Repository Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Repository ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDependency Injector Impl . getInstance (). get Secure Storage Service () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġevent Info . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Repository . prepare Cod ified Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠeventName Ġ= ĠeventName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Info Ġ= Ġevent Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġe . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġcapture Personal ( ĊĠĠĠĠĠĠĠ ĠeventName : ĠString , ĊĠĠĠĠĠĠĠ Ġevent Info : ĠHashMap < String , ĠAny >, ĊĠĠĠĠĠĠĠ Ġis PH I : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Default ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Repository Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Repository ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDependency Injector Impl . getInstance (). get Secure Storage Service () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġevents Repository . prepare Personal Event ( eventName , Ġevent Info , Ġis PH I ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġe . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġmap ID ( map ID Data : ĠMap ID Data , Ġwith Information : ĠHashMap < String , ĠAny > ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Default ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ_ with Information Ġ= Ġwith Information Ġ?: Ġhash Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ with Information [ Constant . BO _ EVENT _ MAP _ ID ] Ġ= Ġmap ID Data . external ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ with Information [ Constant . BO _ EVENT _ MAP _ Provider ] Ġ= Ġmap ID Data . provider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Repository Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Repository ( Dependency Injector Impl . getInstance (). get Secure Storage Service ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Repository . prepare Cod ified Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠeventName Ġ= ĠConstant . BO _ EVENT _ MAP _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Info Ġ= Ġ_ with Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , e . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget UserId (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDependency Injector Impl . getInstance (). get Secure Storage Service () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch String ( Constant . BO _ ANAL YT ICS _ USER _ UNIQUE _ KEY ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , e . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġtransaction ( transaction Data : ĠTransaction Data , Ġwith Information : ĠHashMap < String , ĠAny > ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Default ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ_ with Information Ġ= Ġwith Information Ġ?: Ġhash Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ with Information . put All ( transaction Data . serialize ToMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Repository Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Repository ( Dependency Injector Impl . getInstance (). get Secure Storage Service ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Repository . prepare Cod ified Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠeventName Ġ= ĠConstant . BO _ EVENT _ TRANSACTION _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Info Ġ= Ġ_ with Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , e . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġitem ( item Data : ĠItem , Ġwith Information : ĠHashMap < String , ĠAny > ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Default ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ_ with Information Ġ= Ġwith Information Ġ?: Ġhash Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ with Information . put All ( item Data . serialize ToMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Repository Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Repository ( Dependency Injector Impl . getInstance (). get Secure Storage Service ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Repository . prepare Cod ified Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠeventName Ġ= ĠConstant . BO _ EVENT _ TRANSACTION _ ITEM _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Info Ġ= Ġ_ with Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , e . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġperson a ( persona Data : ĠPerson a Ġ, Ġwith Information : ĠHashMap < String , ĠAny > ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Default ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ_ with Information Ġ= Ġwith Information Ġ?: Ġhash Map Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ with Information . put All ( persona Data . serialize ToMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Repository Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Repository ( Dependency Injector Impl . getInstance (). get Secure Storage Service ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Repository . prepare Cod ified Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠeventName Ġ= ĠConstant . BO _ EVENT _ PERSON A _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Info Ġ= Ġ_ with Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , e . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }