package Ġscience . cred o . mobile detector Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . multi dex . Multi Dex Ċ import Ġcom . inst ac art . library . true time . True Time Ċ import Ġorg . ac ra . AC RA Ċ import Ġorg . ac ra . annotation . Ac ra Core Ċ import Ġorg . ac ra . annotation . Ac ra Http Sender Ċ import Ġorg . ac ra . sender . Http Sender Ċ import Ġorg . green robot . event bus . EventBus Ċ import Ġorg . green robot . event bus . Subscribe Ċ import Ġorg . green robot . event bus . Thread Mode Ċ import Ġorg . jetbrains . ank o . do Async Ċ import Ġscience . cred o . mobile detector . database . Configuration Wrapper Ċ import Ġscience . cred o . mobile detector . events . Detector State Event Ċ import Ġscience . cred o . mobile detector . info . Camera Settings Ċ import Ġscience . cred o . mobile detector . info . Configuration Info Ċ import Ġscience . cred o . mobile detector . services . Hardware Check Service Ċ import Ġscience . cred o . mobile detector . services . Location Check Service Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ Ċ @ Ac ra Core ( build Config Class Ġ= ĠBuild Config :: class ) Ċ @ Ac ra Http Sender ( uri Ġ= Ġ" https :// api . cred o . science / ac ra / report ", ĊĠĠĠĠĠĠĠ Ġhttp Method Ġ= ĠHttp Sender . Method . POST ) Ċ class ĠC redo Application Ġ: ĠApplication () Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠDetector Mode ( val Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOFF ( 0 ), ĠCHECK ( 1 ), ĠCAL IB RATION ( 2 ), ĠDET E CTION ( 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcamera Settings : ĠCamera Settings ? Ġ= Ġnull ĊĠĠĠ Ġval Ġdetector Running Ġ= ĠAtomic Boolean ( false ) ĊĠĠĠ Ġvar Ġdetector Mode : ĠDetector Mode Ġ= ĠDetector Mode . OFF ĊĠĠĠ Ġvar Ġdetector State : ĠDetector State Event Ġ= ĠDetector State Event ( false ) ĊĊĠĠĠ Ġprotected Ġoverride Ġfun Ġattach Base Context ( base : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . attach Base Context ( base ) ĊĠĠĠĠĠĠĠ ĠMulti Dex . install ( this ) ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġfollowing Ġline Ġtriggers Ġthe Ġinitialization Ġof ĠA CR A ĊĠĠĠĠĠĠĠ ĠA CR A . init ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). register ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! Configuration Wrapper ( this ). auto Run ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfiguration Info ( this ). is Detection On Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Configuration Info ( this ). is Detection On ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġturn On Detection () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrue Time . build (). initialize (); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġthis . package Manager ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġmanager . get Package Info ( this . packageName , ĠPackage Manager . GET _ ACTIV ITIES ) ĊĠĠĠĠĠĠĠ Ġversion Code Ġ= Ġinfo . version Code ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġturn On Detection ( mode : ĠDetector Mode Ġ= ĠDetector Mode . DE TE CTION ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( detector Running . compare AndSet ( false , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetector Mode Ġ= ĠDetector Mode . CHECK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mode Ġ== ĠDetector Mode . CHECK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Service ( Intent ( this , ĠHardware Check Service :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Service ( Intent ( this , ĠLocation Check Service :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( mode Ġ== ĠDetector Mode . DE TE CTION Ġ|| Ġmode Ġ== ĠDetector Mode . CAL IB RATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Service ( Intent ( this , ĠDetector Service :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġturn Off Detection () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Service ( Intent ( this , ĠDetector Service :: class . java )) ĊĠĠĠĠĠĠĠ Ġdetector Running . set ( false ) ĊĠĠĠĠĠĠĠ Ġdetector Mode Ġ= ĠDetector Mode . OFF ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe ( thread Mode Ġ= ĠThread Mode . MAIN ) ĊĠĠĠ Ġfun Ġon Detector StateChange ( detector State Event : ĠDetector State Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdetector State Ġ= Ġdetector State Event ĊĠĠĠĠĠĠĠ Ġdetector Running . set ( detector State Event . running ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġversion Code : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Em ulator (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( Build . F ING ER PRINT . startsWith (" generic ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . F ING ER PRINT . startsWith (" unknown ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . MODEL . contains (" google _ sdk ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . MODEL . contains (" Em ulator ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . MODEL . contains (" Android ĠSDK Ġbuilt Ġfor Ġx 8 6 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . MAN U FACT UR ER . contains (" Gen ym otion ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . B RAND . startsWith (" generic ") Ġ&& ĠBuild . DEVICE . startsWith (" generic ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ" google _ sdk " Ġ== ĠBuild . PRODUCT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ