package Ġcom . ones ign al . in fluence . data Ċ Ċ import Ġcom . ones ign al . OS Logger Ċ import Ġcom . ones ign al . O ST ime Ċ import Ġcom . ones ign al . in fluence . OS In fluence Constants Ċ import Ġcom . ones ign al . in fluence . domain . OS In fluence Ċ import Ġcom . ones ign al . in fluence . domain . OS In fluence Channel Ċ import Ġcom . ones ign al . in fluence . domain . OS In fluence Type Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ Ċ abstract Ġclass ĠOS Channel Tracker Ġinternal Ġconstructor ( protected Ġvar Ġdata Repository : ĠOS In fluence Data Repository , Ġvar Ġlogger : ĠOS Logger , Ġprivate Ġvar Ġtime Provider : ĠO ST ime ) Ġ{ ĊĠĠĠ Ġvar Ġinfluence Type : ĠOS In fluence Type ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġindirect Ids : ĠJSONArray ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġdirect Id : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġabstract Ġval Ġid Tag : ĠString ĊĠĠĠ Ġabstract Ġval Ġchannel Type : ĠOS In fluence Channel ĊĊĠĠĠ Ġ@ get : Throws ( JSONException :: class ) ĊĠĠĠ Ġabstract Ġval Ġlast Channel Objects : ĠJSONArray ĊĠĠĠ Ġabstract Ġval Ġchannel Limit : ĠInt ĊĠĠĠ Ġabstract Ġval Ġindirect At tribution Window : ĠInt ĊĠĠĠ Ġabstract Ġfun ĠgetLast Channel Objects Received By New Id ( id : ĠString ?): ĠJSONArray ĊĠĠĠ Ġabstract Ġfun Ġsave Channel Objects ( channel Objects : ĠJSONArray ) ĊĠĠĠ Ġabstract Ġfun Ġinit In flu enced Type From Cache () ĊĠĠĠ Ġabstract Ġfun Ġcache State () ĊĠĠĠ Ġabstract Ġfun Ġadd Session Data ( jsonObject : ĠJSONObject , Ġinfluence : ĠOS In fluence ) ĊĊĠĠĠ Ġprivate Ġval Ġis Direct Session Enabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdata Repository . is Direct In fluence Enabled ĊĊĠĠĠ Ġprivate Ġval Ġis Indirect Session Enabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdata Repository . is Indirect In fluence Enabled ĊĊĠĠĠ Ġprivate Ġval Ġis Un attribut ed Session Enabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdata Repository . is Un attribut ed In fluence Enabled ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcurrent Ġsession Ġbased Ġon Ġstate Ġ+ Ġif Ġoutcomes Ġfeatures Ġare Ġenabled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcurrent Session In fluence : ĠOS In fluence ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession In fluence Ġ= ĠOS In fluence ( channel Type , ĠOS In fluence Type . DISABLED , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChannel Ġweren 't Ġinit Ġyet Ġbecause Ġapplication Ġis Ġstarting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( in fluence Type Ġ== Ġnull ) Ġinit In flu enced Type From Cache () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent In fluence Type Ġ= Ġinfluence Type Ġ?: ĠOS In fluence Type . DISABLED ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current In fluence Type . is Direct ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Direct Session Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession In fluence . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġids Ġ= ĠJSONArray (). put ( this @ OS Channel Tracker . direct Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfluence Type Ġ= ĠOS In fluence Type . DIRECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current In fluence Type . is Indirect ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Indirect Session Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession In fluence . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġids Ġ= Ġthis @ OS Channel Tracker . indirect Ids ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfluence Type Ġ= ĠOS In fluence Type . IN DIRECT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Un attribut ed Session Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession In fluence . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfluence Type Ġ= ĠOS In fluence Type . UN ATTRIBUT ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsession In fluence ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġreceived Ġids Ġthat Ġmay Ġinfluence Ġactions ĊĠĠĠĠ Ġ* Ġ@ return Ġids Ġthat Ġhappen Ġbetween Ġat tribution Ġwindow ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġlast Received Ids : ĠJSONArray ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġids Ġ= ĠJSONArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Channel Object Received Ġ= Ġlast Channel Objects ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" One Signal ĠChannel Tracker ĠgetLast Received Ids Ġlast Channel Object Received : Ġ$ last Channel Object Received ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġat tribution Window Ġ= Ġindirect At tribution Window Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= Ġtime Provider . currentTimeMillis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlast Channel Object Received . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= Ġlast Channel Object Received . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠjsonObject . getLong ( OS In fluence Constants . TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdifference Ġ= ĠcurrentTime Ġ- Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( difference Ġ<= Ġat tribution Window ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠjsonObject . getString ( id Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġids . put ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Generating Ġtracker ĠgetLast Received Ids ĠJSONObject Ġ", Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġids ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset And Init In fluence () Ġ{ ĊĠĠĠĠĠĠĠ Ġdirect Id Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġindirect Ids Ġ= Ġlast Received Ids ĊĠĠĠĠĠĠĠ Ġinfluence Type Ġ= Ġif Ġ( indirect Ids ?. length () Ġ?: Ġ 0 Ġ> Ġ 0 ) ĠOS In fluence Type . IN DIRECT Ġelse ĠOS In fluence Type . UN ATTRIBUT ED ĊĠĠĠĠĠĠĠ Ġcache State () ĊĠĠĠĠĠĠĠ Ġlogger . debug (" One Signal ĠOS Channel Tracker Ġreset And Init In fluence : Ġ$ id Tag Ġfinish Ġwith Ġinfluence Type : Ġ$ in fluence Type ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSave Ġstate Ġof Ġlast Ġids Ġreceived ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave Last Id ( id : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug (" One Signal ĠOS Channel Tracker Ġfor : Ġ$ id Tag Ġsave Last Id : Ġ$ id ") ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== Ġnull Ġ|| Ġid . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Channel Objects Received Ġ= ĠgetLast Channel Objects Received By New Id ( id ) ĊĠĠĠĠĠĠĠ Ġlogger . debug (" One Signal ĠOS Channel Tracker Ġfor : Ġ$ id Tag Ġsave Last Id Ġwith Ġlast Channel Objects Received : Ġ$ last Channel Objects Received ") ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Provider . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJSONObject () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( id Tag , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( OS In fluence Constants . TIME , ĠcurrentTime Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ Ġnew In fluence Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Channel Objects Received . put ( new In fluence Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Generating Ġtracker Ġnew In fluence Id ĠJSONObject Ġ", Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġdon 't Ġhave Ġnew Ġdata , Ġstop Ġlogic ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġchannel Object To Save Ġ= Ġlast Channel Objects Received ĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġsave Ġthe Ġlast Ġids Ġwithout Ġsur pass ing Ġthe Ġlimit ĊĠĠĠĠĠĠĠ Ġ// ĠAlways Ġkeep Ġthe Ġmax Ġquantity Ġof Ġids Ġpossible ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġat tribution Ġwindow Ġincreases , Ġold Ġids Ġmight Ġinfluence ĊĠĠĠĠĠĠĠ Ġif Ġ( last Channel Objects Received . length () Ġ> Ġchannel Limit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Difference Ġ= Ġlast Channel Objects Received . length () Ġ- Ġchannel Limit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġmin Ġsdk Ġis Ġgreater Ġthan ĠK IT K AT Ġwe Ġcan Ġrefactor Ġthis Ġlogic Ġto Ġremove Object Ġfrom ĠJSONArray ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Object To Save Ġ= ĠJSONArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlength Difference Ġuntil Ġlast Channel Objects Received . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Object To Save . put ( last Channel Objects Received [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Generating Ġtracker Ġlast Channel Objects Received Ġget ĠJSONObject Ġ", Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . debug (" One Signal ĠOS Channel Tracker Ġfor : Ġ$ id Tag Ġwith Ġchannel Object To Save : Ġ$ channel Object To Save ") ĊĠĠĠĠĠĠĠ Ġsave Channel Objects ( channel Object To Save ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" OS Channel Tracker {" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag =" Ġ+ Ġid Tag Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġinfluence Type =" Ġ+ Ġinfluence Type Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġindirect Ids =" Ġ+ Ġindirect Ids Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġdirect Id =" Ġ+ Ġdirect Id Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' }' ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull Ġ|| Ġjava Class Ġ!= Ġother . java Class ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġtracker Ġ= Ġother Ġas ĠOS Channel Tracker ĊĠĠĠĠĠĠĠ Ġreturn Ġinfluence Type Ġ=== Ġtracker . in fluence Type Ġ&& Ġtracker . id Tag Ġ== Ġid Tag ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġinfluence Type . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġid Tag . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ }