/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 Ġst f alcon . com Ċ Ġ* Ċ Ġ* ĠĠĠ Ġ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 Ġcom . st f alcon . new _ u aro ads _ android . features . record . managers Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . location . Location Ċ import Ġcom . google . android . gms . location . Location Request Ċ import Ġcom . pat lo ew . rx location . Rx Location Ċ import Ġio . reactivex . Observable Ċ import Ġjavax . inject . Inject Ċ Ċ /* Ċ Ġ* ĠCreated Ġby ĠAnt on ĠBe v za Ġon Ġ 4 / 2 4 / 1 7 . Ċ Ġ*/ Ċ internal Ġclass ĠLocation Manager Ġ@ Inject Ġconstructor ( val Ġcontext : ĠContext ) Ġ{ ĊĊĠĠĠ Ġ// Location ĊĠĠĠ Ġprivate Ġval ĠMAX _ DETECT ING _ SPEED : ĠLong Ġ= Ġ 1 5 0 Ġ// Ġkm / h ĊĊĠĠĠ Ġprivate Ġval Ġlocation Request : ĠLocation Request Ġ= ĠLocation Request . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Location Request . PRIORITY _ HIGH _ AC CUR ACY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interval ( 3 0 0 0 ) ĊĊĠĠĠ Ġinternal Ġfun Ġget Filtered Location Flow (): ĠObservable < Location > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Pure Location Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. buffer ( 2 , Ġ 1 )// current Ġand Ġprevious Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Point Time Ġ= Ġit [ 0 ]. time Ġ/ Ġ 1 0 0 0 Ġ// in Ġsec ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Point Time Ġ= Ġit [ 1 ]. time Ġ/ Ġ 1 0 0 0 Ġ// in Ġsec ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Time Ġ= Ġnext Point Time Ġ- Ġfirst Point Time Ġ// Ġin Ġsec ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Distance Ġ= Ġit [ 0 ]. distance To ( it [ 1 ]) Ġ// Ġin Ġm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspeed Ġ= Ġ( d Distance Ġ/ Ġd Time Ġ* Ġ 3 . 6 ). toFloat () Ġ// in Ġkm / h ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ 1 ]. speed Ġ= Ġspeed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoint IsValid ( speed , Ġd Distance , Ġit [ 1 ]. accuracy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit [ 1 ] Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Pure Location Flow (): ĠObservable < Location > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRx Location ( context ). location () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. updates ( location Request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ!= Ġnull Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpoint IsValid ( speed : ĠFloat , Ġpoint Distance : ĠFloat , Ġaccuracy : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġspeed Ġ< ĠMAX _ DETECT ING _ SPEED Ġ&& Ġpoint Distance Ġ< Ġ 1 5 0 Ġ&& Ġpoint Distance Ġ> Ġaccuracy Ġ/ Ġ 2 f ĊĠĠĠ Ġ} Ċ Ċ }