package Ġcom . ones ign al . in fluence . data Ċ Ċ import Ġcom . ones ign al . OS Logger Ċ import Ġcom . ones ign al . OS SharedPreferences Ċ import Ġcom . ones ign al . O ST ime Ċ import Ġcom . ones ign al . One Signal . App Entry Action Ċ import Ġcom . ones ign al . One Signal Remote Params . In fluence Params Ċ 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 Ġorg . json . JSONObject Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ class ĠO ST rack er Factory ( preferences : ĠOS SharedPreferences , Ġlogger : ĠOS Logger , Ġtime Provider : ĠO ST ime ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtrack ers Ġ= ĠConcurrent HashMap < String , ĠOS Channel Tracker >() ĊĠĠĠ Ġprivate Ġval Ġdata Repository : ĠOS In fluence Data Repository Ġ= ĠOS In fluence Data Repository ( preferences ) ĊĊĠĠĠ Ġval Ġinflu ences : ĠList < OS In fluence > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtrack ers . values . map Ġ{ Ġit . current Session In fluence Ġ} ĊĊĠĠĠ Ġval Ġsession In flu ences : ĠList < OS In fluence > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtrack ers . values . filter Ġ{ Ġit . id Tag Ġ!= ĠOS In fluence Constants . IAM _ TAG Ġ}. map Ġ{ Ġit . current Session In fluence Ġ} ĊĊĠĠĠ Ġval Ġi AM Channel Tracker : ĠOS Channel Tracker ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtrack ers [ OS In fluence Constants . IAM _ TAG ] !! ĊĊĠĠĠ Ġval Ġnotification Channel Tracker : ĠOS Channel Tracker ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtrack ers [ OS In fluence Constants . NOTIFICATION _ TAG ] !! ĊĊĠĠĠ Ġval Ġchannels : ĠList < OS Channel Tracker > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannels : ĠMutable List < OS Channel Tracker > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Channel Tracker . let Ġ{ Ġchannels . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi AM Channel Tracker . let Ġ{ Ġchannels . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchannels ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtrack ers [ OS In fluence Constants . IAM _ TAG ] Ġ= ĠOS In App Message Tracker ( data Repository , Ġlogger , Ġtime Provider ) ĊĠĠĠĠĠĠĠ Ġtrack ers [ OS In fluence Constants . NOTIFICATION _ TAG ] Ġ= ĠOS Notification Tracker ( data Repository , Ġlogger , Ġtime Provider ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit From Cache () Ġ{ ĊĠĠĠĠĠĠĠ Ġtrack ers . values . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . init In flu enced Type From Cache () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave In fluence Params ( in fluence Params : ĠIn fluence Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Repository . save In fluence Params ( in fluence Params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Session Data ( jsonObject : ĠJSONObject , Ġinflu ences : ĠList < OS In fluence >) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflu ences . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . in fluence Channel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOS In fluence Channel . NOTIFICATION Ġ-> Ġnotification Channel Tracker . add Session Data ( jsonObject , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOS In fluence Channel . IAM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIAM Ġdoesn 't Ġinfluence Ġsession ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Channel By Entry Action ( entry Action : ĠApp Entry Action ): ĠOS Channel Tracker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( entry Action . is Notification Click ) Ġnotification Channel Tracker Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Channels To Reset By Entry Action ( entry Action : ĠApp Entry Action ): ĠList < OS Channel Tracker > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchannels : ĠMutable List < OS Channel Tracker > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ// ĠAvoid Ġreset Ġsession Ġif Ġapplication Ġis Ġclosed ĊĠĠĠĠĠĠĠ Ġif Ġ( entry Action . is App Close ) Ġreturn Ġchannels ĊĠĠĠĠĠĠĠ Ġ// ĠAvoid Ġreset Ġsession Ġif Ġapp Ġwas Ġfocused Ġdue Ġto Ġa Ġnotification Ġclick Ġ( direct Ġsession Ġrecently Ġset ) ĊĠĠĠĠĠĠĠ Ġval Ġnotification Channel Ġ= Ġif Ġ( entry Action . is App Open ) Ġnotification Channel Tracker Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġnotification Channel ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannels . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġi AM Channel Tracker . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannels . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġchannels ĊĠĠĠ Ġ} Ċ }