package Ġcom . colab . path graph . location Ċ Ċ import Ġandroid . location . Location Ċ import Ġcom . colab . path graph . model . Point Ċ import Ġjava . util .* Ċ Ċ /* Ċ * ĠKeep s Ġtrack Ġof Ġpath , Ġdistance , Ġspeed , Ġtime Ċ * Ġ*/ Ċ class ĠPath Tracker Ġ: ĠI Path Log , ĠI Run Tracker { ĊĠĠĠ Ġprivate Ġval Ġpath Ġ= ĠLinkedList < Point >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfirst Location Ġ: ĠLocation ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprevious Location Ġ: ĠLocation ĊĠĠĠ Ġprivate Ġvar ĠstartTime Ġ: ĠLong Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġvar ĠendTime Ġ: ĠLong Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġvar Ġestimated Distance Ġ: ĠDouble Ġ= Ġ 0 . 0 Ġ// Ġmeters ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠM ILE S _ PER _ METER Ġ= Ġ 0 . 0 0 0 6 2 1 3 7 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIL LI SECONDS Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSE CON DS _ PER _ HOUR Ġ: ĠDouble Ġ= Ġ 3 6 0 0 . 0 Ġ// needs Ġto Ġbe Ġa Ġdouble Ġso Ġwe Ġdont Ġlose Ġinformation Ġwhen Ġdiv iding ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Logs (): ĠList < Point > Ġ{ ĊĠĠĠĠĠĠĠ ĠendTime Ġ= ĠSystem . currentTimeMillis () Ġ Ġ// stop Ġtime ĊĠĠĠĠĠĠĠ Ġreturn Ġpath ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlog Location ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( path . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Location Ġ= Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Location Ġ= Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= ĠSystem . currentTimeMillis () Ġ// start Ġtime ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpath . add ( Coordinate Util . get Point Distance ( location , Ġfirst Location )) ĊĠĠĠĠĠĠĠ Ġ// add Ġdistances Ġusing Ġprev Loc ĊĠĠĠĠĠĠĠ Ġestimated Distance Ġ+= Ġlocation . distance To ( previous Location ) ĊĠĠĠĠĠĠĠ Ġprevious Location Ġ= Ġlocation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠGet Ġestimate Ġspeed Ġm iles Ġper Ġhour ? ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Speed (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Speed ( getTime ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠIf Ġtime Ġcan Ġbe Ġpaused , Ġpass Ġin Ġthe Ġtime Ġto Ġget Ġa Ġmore Ġaccurate Ġspeed ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Speed ( time Seconds : ĠLong ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġ// calculate Ġspeed Ġby Ġusing Ġlong Ġtime Ġand Ġdistance ĊĠĠĠĠĠĠĠ Ġif ( time Seconds Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġget Distance () Ġ/ Ġ( time Seconds Ġ/ ĠSE CON DS _ PER _ HOUR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠGet Ġestimate Ġdistance Ġin Ġm iles ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Distance (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġestimated Distance Ġ* ĠM ILE S _ PER _ METER ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġ* ĠGet Ġduration Ġof Ġlogging Ġlocations Ġin Ġseconds ĊĠĠĠ Ġ* ĠStill Ġneed Ġto Ġconvert Ġlong Ġto Ġhh : mm : ss ĊĠĠĠ Ġ* ĊĠĠĠ Ġ* Ġnote : ĠThis Ġmethod Ġassumes Ġthat Ġwe Ġdon 't Ġstop Ġlogging Ġlocations . ĊĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetTime (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( endTime . compareTo ( 0 ) Ġ== Ġ 0 Ġ|| ĠstartTime . compareTo ( 0 ) Ġ== Ġ 0 ) Ġ// timer Ġnever Ġstarted Ġor Ġstopped ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġ( endTime Ġ- ĠstartTime ) Ġ/ ĠMIL LI SECONDS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġre calculate Distance ( points : ĠList < Point >) Ġ{ ĊĠĠĠĠĠĠĠ Ġestimated Distance Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġfor ( index Ġin Ġpoints . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġestimated Distance Ġ+= Ġpoints [ index ]. m ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }