/* Ċ Ġ* ĠCopyright Ġ 2 0 1 2 Ġ- Ġ 2 0 2 1 ĠAnt on ĠT anan ae v Ġ( ant on @ trac car . org ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġorg . trac car . client Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . os . Power Manager Ċ import Ġandroid . os . Power Manager . Wake Lock Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . util . Log Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . preference . Preference Manager Ċ Ċ class ĠTracking Service Ġ: ĠService () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġwake Lock : ĠW ake Lock ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġtracking Controller : ĠTracking Controller ? Ġ= Ġnull ĊĊĠĠĠ Ġclass ĠHide Notification Service Ġ: ĠService () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Foreground ( NOTIFICATION _ ID , Ġcreate Notification ( this )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Foreground ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Self Result ( start Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSTART _ NOT _ STICK Y ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Wake lock Timeout ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" service Ġcreate ") ĊĊĠĠĠĠĠĠĠ Ġsend Broadcast ( Intent ( ACTION _ STARTED )) ĊĠĠĠĠĠĠĠ ĠStatus Activity . addMessage ( getString ( R . string . status _ service _ create )) ĊĠĠĠĠĠĠĠ Ġstart Foreground ( NOTIFICATION _ ID , Ġcreate Notification ( this )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preference Manager . getDefault SharedPreferences ( this ). getBoolean ( Main Fragment . KEY _ WAKE LOCK , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpower Manager Ġ= Ġget System Service ( POWER _ SERVICE ) Ġas ĠPower Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwake Lock Ġ= Ġpower Manager . new Wake Lock ( Power Manager . PAR TIAL _ WAKE _ LOCK , Ġjava Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwake Lock ?. acquire () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracking Controller Ġ= ĠTracking Controller ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracking Controller ?. start () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . start Foreground Service ( this , ĠIntent ( this , ĠHide Notification Service :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . E CL AIR ) ĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ ĠW ake ful Broadcast Receiver . complete Wake ful Intent ( intent ) ĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ STICK Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" service Ġdestroy ") ĊĠĠĠĠĠĠĠ Ġsend Broadcast ( Intent ( ACTION _ STOP PED )) ĊĠĠĠĠĠĠĠ ĠStatus Activity . addMessage ( getString ( R . string . status _ service _ destroy )) ĊĠĠĠĠĠĠĠ Ġstop Foreground ( true ) ĊĠĠĠĠĠĠĠ Ġif Ġ( wake Lock ?. is Hel d Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwake Lock ?. release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtracking Controller ?. stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ STARTED Ġ= Ġ" org . trac car . action . SERVICE _ STARTED " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACTION _ STOP PED Ġ= Ġ" org . trac car . action . SERVICE _ STOP PED " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠTracking Service :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNOT IFICATION _ ID Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Unspecified Immutable Flag ") ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Notification ( context : ĠContext ): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠNotification Compat . Builder ( context , ĠMain Application . PRIMARY _ CHANNEL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( R . drawable . ic _ stat _ notify ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Notification Compat . PRIORITY _ LOW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Category ( Notification Compat . CATEGORY _ SERVICE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent : ĠIntent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Build Config . HIDDEN _ APP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠIntent ( context , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( context . getString ( R . string . settings _ status _ on _ summary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Ticker ( context . getString ( R . string . settings _ status _ on _ summary )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Ġ= ĠContext Compat . getColor ( context , ĠR . color . primary _ dark ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠIntent ( Settings . ACTION _ SETTINGS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setContent Intent ( Pending Intent . getActivity ( context , Ġ 0 , Ġintent , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ