package Ġscience . cred o . mobile detector . detection Ċ Ċ import Ġandroid . content . Context Ċ import Ġorg . green robot . event bus . EventBus Ċ import Ġorg . jetbrains . ank o . do Async Ċ import Ġscience . cred o . mobile detector . database . Detection State Wrapper Ċ import Ġscience . cred o . mobile detector . events . Stats Event Ċ import Ġscience . cred o . mobile detector . info . Identity Info Ċ import Ġscience . cred o . mobile detector . network . Server Interface Ċ import Ġscience . cred o . mobile detector . network . messages . Ping Request Ċ import Ġscience . cred o . mobile detector . network . messages . build Ċ Ċ class ĠDetection Stats Manager Ġ{ ĊĠĠĠ Ġprivate Ġval Ġstats For Screen Ġ= ĠDetection Stats () Ġ// Ġcle ans Ġafter Ġstart Ġdetection s , Ġcle ans Ġpixel Ġb rights Ġstats Ġonly ĊĠĠĠ Ġprivate Ġval Ġstats For Server Ġ= ĠDetection Stats () Ġ// Ġcle ans Ġafter Ġping ĊĠĠĠ Ġprivate Ġval Ġstats For Total Ġ= ĠDetection Stats () Ġ// Ġnever Ġcle ans ĊĊĠĠĠ Ġprivate Ġvar Ġwidth Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġheight Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġstart Detection Timestamp Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġfor Ġupdate Ġstats Ġfor Ġpixels Ġb rights . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġupdate Stats ( max : ĠInt , Ġaverage : ĠDouble , Ġzero es : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstats For Screen . update Stats ( max , Ġaverage , Ġzero es ) ĊĠĠĠĠĠĠĠ Ġ// stats For Server Ġand Ġstats For Total Ġis Ġnot Ġupdated Ġbecause Ġit Ġwill Ġbe Ġupdated Ġin Ġ Ġframe Performed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġactive Detect ( detection On : Boolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstats For Screen . active Detect ( detection On ) ĊĠĠĠĠĠĠĠ Ġstats For Server . active Detect ( detection On ) ĊĠĠĠĠĠĠĠ Ġstats For Total . active Detect ( detection On ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġfor Ġupdate Ġcount Ġof Ġall Ġframes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġframe Ach ieved ( width Ġ: ĠInt , Ġheight Ġ: ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġthis . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġstats For Screen . frame Ach ieved () ĊĠĠĠĠĠĠĠ Ġstats For Server . frame Ach ieved () ĊĠĠĠĠĠĠĠ Ġstats For Total . frame Ach ieved () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġfor Ġupdate Ġcount Ġand Ġpixels Ġb rights Ġstats Ġfor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġframe Performed ( max : ĠInt , Ġaverage : ĠDouble , Ġzero es : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstats For Screen . frame Performed () ĊĠĠĠĠĠĠĠ Ġstats For Server . frame Performed () ĊĠĠĠĠĠĠĠ Ġstats For Total . frame Performed () ĊĊĠĠĠĠĠĠĠ Ġ// stats For Screen Ġ- Ġnot Ġupdated Ġbecause Ġis Ġjust Ġupdated Ġin Ġupdate Stats ĊĠĠĠĠĠĠĠ Ġstats For Server . update Stats ( max , Ġaverage , Ġzero es ) ĊĠĠĠĠĠĠĠ Ġstats For Total . update Stats ( max , Ġaverage , Ġzero es ) ĊĊĠĠĠĠĠĠĠ Ġstats For Screen . active Detect ( true ) ĊĠĠĠĠĠĠĠ Ġstats For Server . active Detect ( true ) ĊĠĠĠĠĠĠĠ Ġstats For Total . active Detect ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġhit Registered () Ġ{ ĊĠĠĠĠĠĠĠ Ġstats For Screen . hit Registered () ĊĠĠĠĠĠĠĠ Ġstats For Server . hit Registered () ĊĠĠĠĠĠĠĠ Ġstats For Total . hit Registered () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPublish Ġstats Ġfor Ġother Ġmodules Ġwhen Ġits Ġtime . ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġ- Ġcurrent ĠAndroid 's Ġcontext ĊĠĠĠĠ Ġ* Ġ@ param Ġforce Ġ- Ġno Ġcheck Ġtime Ġcondition Ġbefore Ġpublish ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġflush ( context : ĠContext , Ġforce Ġ: ĠBoolean ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġtime Ġto Ġpublish Ġfor Ġscreen Ġcondition ĊĠĠĠĠĠĠĠ Ġval Ġscreen Condition Ġ= Ġcheck Next Time Period ( stats For Screen . last Flush Timestamp , Ġ 1 0 0 0 L ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġtime Ġto Ġpublish Ġfor Ġserver Ġcondition Ġ( send ĠPing Ġmessage ) ĊĠĠĠĠĠĠĠ Ġval Ġserver Condition Ġ= Ġcheck Next Time Period ( stats For Server . last Flush Timestamp , Ġ 6 0 0 0 0 0 L ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġtime Ġto Ġstore Ġtotal Ġstats Ġin Ġphone Ġmemory Ġ( prevent Ġto Ġdamage Ġflash Ġmemory ) Ġcondition ĊĠĠĠĠĠĠĠ Ġval Ġtotal Condition Ġ= Ġcheck Next Time Period ( stats For Total . last Flush Timestamp , Ġ 6 0 0 0 0 L ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( force Ġ|| Ġscreen Condition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Event Ġ= ĠStats Event ( width , Ġheight , Ġstart Detection Timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats For Screen . flush ( stats Event , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). post ( stats Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( force Ġ|| Ġserver Condition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Event Ġ= ĠStats Event ( width , Ġheight , Ġstart Detection Timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats For Server . flush ( stats Event , Ġ Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Info Ġ: ĠIdentity Info . Identity Data Ġ= ĠIdentity Info . getDefault ( context ). get Identity Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠServer Interface . getDefault ( context ). ping ( build ( System . currentTimeMillis (), Ġdevice Info , Ġstats Event )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠDetection State Wrapper . get Latest Session ( context ). merge ( stats Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( force Ġ|| Ġtotal Condition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Event Ġ= ĠStats Event ( width , Ġheight , Ġstart Detection Timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstats For Total . flush ( stats Event , Ġ Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDetection State Wrapper . getTotal ( context ). merge ( stats Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcheck Next Time Period ( last Ġ: ĠLong , Ġperiod Ġ: ĠLong ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlast Ġ+ Ġperiod Ġ< ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ