package Ġcom . hover . st ax . in app _ banner Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . hover . sdk . permissions . Permission Helper Ċ import Ġcom . hover . st ax . utils . Date Utils Ċ import Ġcom . hover . st ax . utils . Utils Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ class ĠBanner Utils ( val Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠFIRST _ WEEK Ġ= Ġ 1 ; ĊĠĠĠ Ġprivate Ġval ĠSE COND _ WEEK Ġ= Ġ 2 ; ĊĠĠĠ Ġprivate Ġval ĠTH IRD _ WEEK Ġ= Ġ 3 ĊĠĠĠ Ġprivate Ġval ĠFO UR TH _ WEEK Ġ= Ġ 4 ; ĊĊĠĠĠ Ġprivate Ġval ĠTAG : ĠString Ġ= Ġ" St ax Banner " ĊĠĠĠ Ġprivate Ġval ĠIMP : ĠString Ġ= Ġ" St ax Banner Imp ress ions " ĊĠĠĠ Ġprivate Ġval ĠLAST _ G IST _ IMP _ DATE : ĠString Ġ= Ġ" St ax Banner G ist Last Shown " ĊĠĠĠ Ġprivate Ġval ĠLAST _ UP V OTE _ IMP _ DATE : ĠString Ġ= Ġ" St ax Banner Up vote Last Shown " ĊĠĠĠ Ġprivate Ġval ĠLAST _ RE SEARCH _ IMP _ DATE : ĠString Ġ= Ġ" St ax Banner Research Last Shown " ĊĠĠĠ Ġprivate Ġval ĠPER M _ CLICK ED Ġ= Ġ" Perm Banner Clicked "; ĊĠĠĠ Ġprivate Ġval ĠRE SEARCH _ CLICK ED Ġ= Ġ" Research Banner Clicked "; ĊĠĠĠ Ġprivate Ġval ĠGENER AL _ LAST _ IMP _ DATE Ġ= Ġ" Any Banner Last Imp Date " ĊĊĠĠĠ Ġprivate Ġfun Ġset Last Banner ( banner Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUtils . save Int ( TAG , Ġbanner Id , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġbanner Id _ in _ cache Ġ= Ġbanner Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlast Banner (): ĠInt Ġ= ĠUtils . getInt ( TAG , Ġcontext ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Imp ression (): ĠInt Ġ= ĠUtils . getInt ( IMP , Ġcontext ) ĊĠĠĠ Ġprivate Ġfun Ġdecrement Imp ression () Ġ= ĠUtils . save Int ( IMP , Ġget Imp ression () Ġ- Ġ 1 , Ġcontext ) ĊĊĠĠĠ Ġprivate Ġfun Ġrenew Imp ression ( num : ĠInt ) Ġ= ĠUtils . save Int ( IMP , Ġnum , Ġcontext ) ĊĊĠĠĠ Ġprivate Ġfun Ġcampaign Running (): ĠBoolean Ġ= Ġget Imp ression () Ġ> Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun Ġlast G ist Imp ression Date () Ġ= ĠUtils . getLong ( LAST _ G IST _ IMP _ DATE , Ġcontext ) ĊĠĠĠ Ġprivate Ġfun Ġset Last G ist Imp ression Date ( value : ĠLong ) Ġ= ĠUtils . save Long ( LAST _ G IST _ IMP _ DATE , Ġvalue , Ġcontext ) ĊĠĠĠ Ġprivate Ġfun Ġlast Up vote Imp ression Date () Ġ= ĠUtils . getLong ( LAST _ UP V OTE _ IMP _ DATE , Ġcontext ) ĊĠĠĠ Ġprivate Ġfun Ġset Last Up vote Imp ression Date ( value : ĠLong ) Ġ= ĠUtils . save Long ( LAST _ UP V OTE _ IMP _ DATE , Ġvalue , Ġcontext ) ĊĠĠĠ Ġprivate Ġfun Ġlast Research Imp ression Date () Ġ= ĠUtils . getLong ( LAST _ RE SEARCH _ IMP _ DATE , Ġcontext ) ĊĠĠĠ Ġprivate Ġfun Ġset Last Research Imp ression Date ( value : ĠLong ) Ġ= ĠUtils . save Long ( LAST _ RE SEARCH _ IMP _ DATE , Ġvalue , Ġcontext ) ĊĠĠĠ Ġprivate Ġfun Ġhas Clicked Research Banner (): ĠBoolean Ġ= Ġ! Utils . getBoolean ( RE SEARCH _ CLICK ED , Ġcontext ) ĊĠĠĠ Ġprivate Ġfun Ġupdate Research Banner Pref () Ġ= ĠUtils . save Boolean ( RE SEARCH _ CLICK ED , Ġtrue , Ġcontext ) ĊĊĊĠĠĠ Ġprivate Ġfun Ġinvalidate Permission Campaign () Ġ= ĠUtils . save Boolean ( PERM _ CLICK ED , Ġtrue , Ġcontext ) ĊĠĠĠ Ġprivate Ġfun Ġis Permission Campaign Valid () Ġ= Ġ! Utils . getBoolean ( PERM _ CLICK ED , Ġcontext ) Ġ&& Ġare Campaign s Unlock ed () ĊĠĠĠ Ġprivate Ġfun Ġare Campaign s Unlock ed (): ĠBoolean Ġ= ĠUtils . getInt ( APP _ SESSION S , Ġcontext ) Ġ>= Ġ 3 ĊĊĠĠĠ Ġprivate Ġfun Ġset General Last Imp ression Date () Ġ= ĠUtils . save Long ( GENERAL _ LAST _ IMP _ DATE , ĠDate Utils . today (), Ġcontext ) ĊĠĠĠ Ġprivate Ġfun Ġgeneral Last Imp ression Date () Ġ= ĠUtils . getLong ( GENERAL _ LAST _ IMP _ DATE , Ġcontext ) ĊĊĠĠĠ Ġprivate Ġfun Ġwithin Duration ( main Date : ĠDate , Ġdate Start : ĠDate , Ġdate End : ĠDate ) Ġ= Ġmain Date Ġin Ġdate Start .. date End ĊĊĠĠĠ Ġprivate Ġfun Ġrun ( banner Id : ĠInt ): ĠBanner ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrun ( banner Id , Ġis New Campaign Ġ= Ġfalse , Ġupdate Imp ression Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun ( banner Id : ĠInt , Ġis New Campaign : ĠBoolean , Ġupdate Imp ression : ĠBoolean ): ĠBanner ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbanner : ĠBanner ? Ġ= Ġnull ; ĊĠĠĠĠĠĠĠ Ġwith ( Banner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( banner Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION Ġ-> Ġbanner Ġ= Ġif Ġ( is Permission Campaign Valid ()) Ġpermissions () Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRO UND _ UP _ NE WS Ġ-> Ġbanner Ġ= Ġround up News () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG IST Ġ-> Ġbanner Ġ= Ġgist () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUP V OTE Ġ-> Ġbanner Ġ= Ġup vote () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbanner ?. let Ġ{ Ġif Ġ( update Imp ression ) Ġupdate Imp ression Meta ( it , Ġbanner Id , Ġis New Campaign ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbanner ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Imp ression Meta ( banner : ĠBanner , Ġbanner Id : ĠInt , Ġis New Campaign : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Date Utils . today ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( banner Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBanner . G IST Ġ-> Ġset Last G ist Imp ression Date ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBanner . UP V OTE Ġ-> Ġset Last Up vote Imp ression Date ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBanner . RE SEARCH Ġ-> Ġset Last Research Imp ression Date ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Last Banner ( banner Id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( isNew Campaign ) Ġrenew Imp ression ( banner . imp ress ions Ġ- Ġ 1 ) Ġelse Ġdecrement Imp ression () ĊĠĠĠĠĠĠĠ Ġset General Last Imp ression Date () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenforce Campaign Limit ( banner Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġis New Campaign (): ĠBoolean Ġ= Ġbanner Id Ġ!= Ġlast Banner () ĊĠĠĠĠĠĠĠ Ġfun Ġhas Any Campaign Made Today (): ĠBoolean Ġ= ĠDate Utils . today Date () Ġ== ĠDate Utils . getDate ( general Last Imp ression Date ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( isNew Campaign () Ġ&& Ġhas Any Campaign Made Today ()) Ġ 0 Ġelse Ġbanner Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpermission Qual ifies (): ĠBoolean Ġ= Ġ!( Permission Helper ( context ). has Basic Per ms () Ġ&& ĠPermission Helper ( context ). has Hard Per ms ()) ĊĠĠĠ Ġprivate Ġfun Ġround Up News Qual ifies (): ĠBoolean Ġ= ĠDate Utils . today Date () Ġ== ĠDate Utils . getDate ( Calendar . TH UR SD AY , ĠFIRST _ WEEK ) ĊĊĠĠĠ Ġprivate Ġfun Ġgist Qual ifies (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Date Utils ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( within Duration ( today Date (), Ġbeginning Of The Month (), Ġget Date ( SECOND _ WEEK ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! within Duration ( getDate ( last G ist Imp ression Date ()), Ġbeginning Of The Month (), Ġget Date ( SECOND _ WEEK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! within Duration ( getDate ( last G ist Imp ression Date ()), Ġget Date ( SECOND _ WEEK ), Ġget Date ( FO UR TH _ WEEK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġup vote Qual ifies (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( Date Utils ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwithin Duration ( today Date (), Ġbeginning Of The Month (), Ġget Date ( FIRST _ WEEK )) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! within Duration ( getDate ( last Up vote Imp ression Date ()), Ġbeginning Of The Month (), Ġget Date ( FIRST _ WEEK )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwithin Duration ( today Date (), Ġget Date ( FIRST _ WEEK ), Ġget Date ( SECOND _ WEEK )) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! within Duration ( getDate ( last Up vote Imp ression Date ()), Ġget Date ( FIRST _ WEEK ), Ġget Date ( SECOND _ WEEK )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwithin Duration ( today Date (), Ġget Date ( SECOND _ WEEK ), Ġget Date ( TH IRD _ WEEK )) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! within Duration ( getDate ( last Up vote Imp ression Date ()), Ġget Date ( SECOND _ WEEK ), Ġget Date ( TH IRD _ WEEK )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ! within Duration ( getDate ( last Up vote Imp ression Date ()), Ġget Date ( TH IRD _ WEEK ), Ġget Date ( FO UR TH _ WEEK )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresearch Qual ifies ( has Transaction Last Month : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Transaction Last Month ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Date Utils ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġhas Imp ression Since ( ear liest Date : ĠDate ): ĠBoolean Ġ= Ġwithin Duration ( getDate ( last Up vote Imp ression Date ()), Ġear liest Date , Ġtoday Date ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( has Clicked Research Banner ()) Ġ! has Imp ression Since ( two Months Ago ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ! has Imp ression Since ( beginning Of The Month ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Qualified Banner ( has Transaction Last Month : ĠBoolean ): ĠBanner ? Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . i (" Banner Ġcalled Ġhere Ġwith ĠM AU : Ġ$ has Transaction Last Month ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! are Campaign s Unlock ed ()) Ġreturn Ġrun ( 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( banner Id _ in _ cache Ġ> Ġ 0 ) Ġreturn Ġrun ( banner Id _ in _ cache , Ġis New Campaign Ġ= Ġfalse , Ġupdate Imp ression Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġif Ġ( campaign Running ()) Ġreturn Ġrun ( last Banner (), Ġis New Campaign Ġ= Ġfalse , Ġupdate Imp ression Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġbanner Id Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Qual ifies () Ġ&& Ġis Permission Campaign Valid () Ġ-> Ġbanner Id Ġ= ĠBanner . PERMISSION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġround Up News Qual ifies () Ġ-> Ġbanner Id Ġ= ĠBanner . ROUND _ UP _ NE WS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgist Qual ifies () Ġ-> Ġbanner Id Ġ= ĠBanner . G IST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġup vote Qual ifies () Ġ-> Ġbanner Id Ġ= ĠBanner . UP V OTE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresearch Qual ifies ( has Transaction Last Month ) Ġ-> Ġbanner Id Ġ= ĠBanner . RE SEARCH ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbanner Id Ġ= Ġenforce Campaign Limit ( banner Id ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrun ( banner Id , Ġis New Campaign Ġ= Ġtrue , Ġupdate Imp ression Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose Campaign ( banner Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( banner Id Ġ== ĠBanner . PERMISSION ) Ġinvalidate Permission Campaign () ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( banner Id Ġ== ĠBanner . RE SEARCH ) Ġupdate Research Banner Pref () ĊĊĠĠĠĠĠĠĠ Ġif ( get Imp ression () Ġ< Ġ 2 ) Ġrenew Imp ression ( get Imp ression () Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġbanner Id _ in _ cache Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbanner Id _ in _ cache : ĠInt Ġby ĠDeleg ates . observable ( 0 ) Ġ{ Ġ_, Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAPP _ SESSION S Ġ= Ġ" App Sessions " ĊĠĠĠ Ġ} Ċ } ĊĊ