/* Ċ Ġ* Ġ ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* Ġ ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠWeb tre kk ĠGmbH Ċ Ġ* Ċ Ġ* Ġ ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġ Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġ Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġ Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġ Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġ Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* Ġ ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġ Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* Ġ ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* Ġ ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* Ġ ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNON ĠIN FR INGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* Ġ ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* Ġ ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* Ġ ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* Ġ ĠSOFTWARE . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġweb tre kk . android . sdk . domain . external Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġweb tre kk . android . sdk . api . RequestType Ċ import Ġweb tre kk . android . sdk . api . Url Params Ċ import Ġweb tre kk . android . sdk . data . entity . Track Request Ċ import Ġweb tre kk . android . sdk . data . model . FormField Ċ import Ġweb tre kk . android . sdk . domain . External Interactor Ċ import Ġweb tre kk . android . sdk . domain . internal . Cache Track Request With Custom Params Ċ import Ġweb tre kk . android . sdk . extension . is Track able Ċ import Ġweb tre kk . android . sdk . extension . not Tracked View Ċ import Ġweb tre kk . android . sdk . extension . order List Ċ import Ġweb tre kk . android . sdk . extension . parse View Ċ import Ġweb tre kk . android . sdk . extension . to FormField Ċ import Ġweb tre kk . android . sdk . extension . toInt Ċ import Ġweb tre kk . android . sdk . extension . to Request Ċ import Ġweb tre kk . android . sdk . integration . Int elligence Event Ċ import Ġweb tre kk . android . sdk . integration . M app Int elligence Listener Ċ import Ġweb tre kk . android . sdk . module . App Module Ċ import Ġweb tre kk . android . sdk . util . Coroutine Dispatch ers Ċ import Ġweb tre kk . android . sdk . util . coroutine ExceptionHandler Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ /** Ċ Ġ* ĠTrack Ġcustom Ġevent Ġuse Ġcase . ĠThe Ġtrack Ġcustom Ġevent Ġwill Ġappend Ġthe Ġ' ct ' Ġparam Ġautomatically Ġto Ġthe Ġcustom Ġparams . Ċ Ġ*/ Ċ internal Ġclass ĠTrack Custom Form ( ĊĠĠĠ Ġcoroutine Context : ĠCor outine Context , ĊĠĠĠ Ġprivate Ġval Ġcache Track Request With Custom Params : ĠCache Track Request With Custom Params Ċ ) Ġ: ĠExternal Interactor < Track Custom Form . Params > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ job Ġ= ĠJob () ĊĠĠĠ Ġoverride Ġval Ġscope Ġ= ĊĠĠĠĠĠĠĠ ĠCor outine Scope (_ job Ġ+ Ġcoroutine Context ) Ġ// ĠStarting Ġa Ġnew Ġjob Ġwith Ġcontext Ġof Ġthe Ġparent . ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ logger ] Ġthe Ġinjected Ġlogger Ġfrom ĠWeb tre kk . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġby Ġlazy Ġ{ ĠApp Module . logger Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( invoke Params : ĠParams , Ġcoroutine Dispatch ers : ĠCor outine Dispatch ers ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġopt Ġout Ġis Ġactive , Ġthen Ġreturn ĊĠĠĠĠĠĠĠ ĠIntelligence Event . send Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . context , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM app Int elligence Listener . FORM , Ġinvoke Params . track Request . name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( invoke Params . is Opt Out ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġscope . launch ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Dispatch ers . io Dispatcher Ġ+ Ġcoroutine ExceptionHandler ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġempty Map < String , ĠString >(). to Mutable Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams [ RequestType . FORM . value ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . form Name Ġ+ Ġ" |" Ġ+ Ġinvoke Params . confirm Button . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams [ Url Params . FORM _ FIELD ] Ġ= Ġcreate Field ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . view Group , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . tracking Ids , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . rename Fields , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . change Fields Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . anonymous , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . fields Order , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . anonymous Specific Fields , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . full Content Specific Fields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCache Ġthe Ġtrack Ġrequest Ġwith Ġits Ġcustom Ġpar af ms . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Track Request With Custom Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Track Request With Custom Params . Params ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke Params . track Request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ Ġlogger . debug (" Cached Ġform Ġrequest : Ġ$ it ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Failure Ġ{ Ġlogger . error (" Error Ġwhile Ġcaching Ġform Ġrequest : Ġ$ it ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Field ( ĊĠĠĠĠĠĠĠ Ġview Group : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġtracking Ids : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġrename Fields : ĠMap < Int , ĠString >, ĊĠĠĠĠĠĠĠ Ġchange Fields Value : ĠMap < Int , ĠString >, ĊĠĠĠĠĠĠĠ Ġanonymous : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġfields Order : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġanonymous Specific Fields : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġfull Content Specific Fields : ĠList < Int > ĊĠĠĠ Ġ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġarray : ĠMutable List < View > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġview Group . parse View ( array ) ĊĠĠĠĠĠĠĠ Ġarray Ġ= Ġarray . not Tracked View ( tracking Ids ). to Mutable List () ĊĠĠĠĠĠĠĠ Ġvar Ġlist FormField Ġ= Ġmutable ListOf < FormField >() ĊĠĠĠĠĠĠĠ Ġarray . forEach Ġ{ Ġview : ĠView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . is Track able ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠString ? Ġ= Ġrename Fields [ view . id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue : ĠString ? Ġ= Ġchange Fields Value [ view . id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġform View Ġ= Ġview . to FormField ( name , Ġanonymous , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anonymous Specific Fields . contains ( view . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform View . anonymous Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( full Content Specific Fields . contains ( view . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġform View . anonymous Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist FormField . add ( form View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlist FormField Ġ= Ġlist FormField . order List ( fields Order ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist FormField . to Request () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġdata Ġclass Ġencaps ulating Ġthe Ġspecific Ġparams Ġrelated Ġto Ġthis Ġuse Ġcase . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtrack Request Ġthe Ġtrack Ġrequest Ġthat Ġis Ġcreated Ġand Ġwill Ġbe Ġcached Ġin Ġthe Ġdata Ġbase . ĊĠĠĠĠ Ġ* Ġ@ param Ġis Opt Out Ġthe Ġopt Ġout Ġvalue . ĊĠĠĠĠ Ġ* Ġ@ param Ġview Group Ġview Group Ġfor Ġthe Ġanalysis ĊĠĠĠĠ Ġ* Ġ@ param Ġform Name Ġform Ġname Ġcan Ġbe Ġactivity Ġname Ġor Ġchanged ĊĠĠĠĠ Ġ* Ġ@ param Ġtracking Ids Ġonly Ġtrack Ġspecific Ġelements Ġof Ġthe Ġview ĊĠĠĠĠ Ġ* Ġ@ param Ġrename Fields Ġrename Ġspecific Ġfields ĊĠĠĠĠ Ġ* Ġ@ param Ġconfirm Button Ġclicked Ġconfirm Ġor Ġcancel Ġbutton Ġfor Ġthe Ġform ĊĠĠĠĠ Ġ* Ġ@ param Ġanonymous Ġhide Ġcontent ĊĠĠĠĠ Ġ* Ġ@ param Ġchange Fields Value Ġin Ġsome Ġcase Ġis Ġgood Ġto Ġchange Ġvalue Ġof Ġthe Ġspecific Ġfields ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠParams ( ĊĠĠĠĠĠĠĠ Ġval Ġtrack Request : ĠTrack Request , ĊĠĠĠĠĠĠĠ Ġval Ġis Opt Out : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġview Group : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġval Ġform Name : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġtracking Ids : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġval Ġrename Fields : ĠMap < Int , ĠString >, ĊĠĠĠĠĠĠĠ Ġval Ġconfirm Button : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġanonymous : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġchange Fields Value : ĠMap < Int , ĠString >, ĊĠĠĠĠĠĠĠ Ġval Ġfields Order : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġval Ġanonymous Specific Fields : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġval Ġfull Content Specific Fields : ĠList < Int >, ĊĠĠĠĠĠĠĠ Ġval Ġcontext : ĠContext ? Ġ= Ġnull ĊĠĠĠ Ġ) Ċ } Ċ