/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠS yg ic Ġa . s . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠThis Ġproject Ġis Ġlicensed Ġunder Ġthe ĠMIT ĠLicense . Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . sy g ic . maps . u ikit . views . common . utils Ċ Ċ import Ġcom . sy g ic . maps . u ikit . views . common . extensions . EMPTY _ STRING Ċ import Ġcom . sy g ic . maps . u ikit . views . common . extensions . get Decimal Ċ import Ġcom . sy g ic . maps . u ikit . views . common . units . Distance Unit Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . text . Decimal Format Symbols Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . math . round ToInt Ċ Ċ // todo : Ġtext y Ġjed not ie k Ġb ude me Ġpot re bo vat Ġn ac it av at Ġz Ġres our cov Ċ object ĠDistance Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠMET RIC _ KM _ DISTANCE _ UNIT Ġ= Ġ" km " ĊĠĠĠ Ġprivate Ġconst Ġval ĠMET RIC _ M _ DISTANCE _ UNIT Ġ= Ġ" m " ĊĠĠĠ Ġprivate Ġconst Ġval ĠIMP ERIAL S _ MI _ DISTANCE _ UNIT Ġ= Ġ" mi " ĊĠĠĠ Ġprivate Ġconst Ġval ĠIMP ERIAL S _ FE ET _ DISTANCE _ UNIT Ġ= Ġ" ft " ĊĠĠĠ Ġprivate Ġconst Ġval ĠIMP ERIAL S _ Y ARD _ DISTANCE _ UNIT Ġ= Ġ" yd " ĊĠĠĠ Ġprivate Ġconst Ġval ĠM _ TO _ KM _ CONVERSION _ RATIO Ġ= Ġ 0 . 0 0 1 f ĊĠĠĠ Ġprivate Ġconst Ġval ĠM _ TO _ MI _ CONVERSION _ RATIO Ġ= Ġ 0 . 0 0 0 6 2 f ĊĠĠĠ Ġprivate Ġconst Ġval ĠM _ TO _ FT _ CONVERSION _ RATIO Ġ= Ġ 3 . 2 8 0 8 4 f ĊĠĠĠ Ġprivate Ġconst Ġval ĠM _ TO _ YD _ CONVERSION _ RATIO Ġ= Ġ 1 . 0 9 3 6 1 f ĊĊĠĠĠ Ġprivate Ġval ĠDEC IMAL _ FORMAT Ġ= ĠDecimal Format ("# .# ", ĠDecimal Format Symbols ()) ĊĊĠĠĠ Ġfun Ġget Formatted Distance ( ĊĠĠĠĠĠĠĠ Ġdistance Unit : ĠDistance Unit , ĊĠĠĠĠĠĠĠ Ġdistance In Met ers : ĠInt , ĊĠĠĠĠĠĠĠ Ġround Small Units : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ): ĠString Ġ= Ġwhen Ġ( distance Unit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDistance Unit . KI LO METER S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk ilo meters Ġ= Ġdistance In Met ers Ġ* ĠM _ TO _ KM _ CONVERSION _ RATIO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ilo meters Ġ>= Ġ 1 0 Ġ-> Ġ"${ ki lo meters . round ToInt ()} Ġ$ METRIC _ KM _ DISTANCE _ UNIT " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk ilo meters Ġ>= Ġ 1 Ġ-> Ġ"${ DECIMAL _ FORMAT . format ( ki lo meters . toDouble ()) } Ġ$ METRIC _ KM _ DISTANCE _ UNIT " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġround Small Units Ġ-> Ġget Formatted Distance ( distance Unit , Ġround Distance ( distance In Met ers ), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"$ distance In Met ers Ġ$ METRIC _ M _ DISTANCE _ UNIT " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠDistance Unit . M ILE S _ Y AR DS Ġ-> Ġget Distance In M iles With Units ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance In Met ers , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM _ TO _ YD _ CONVERSION _ RATIO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIMP ERIAL S _ Y ARD _ DISTANCE _ UNIT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġround Small Units ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠDistance Unit . M ILE S _ FE ETS Ġ-> Ġget Distance In M iles With Units ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance In Met ers , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM _ TO _ FT _ CONVERSION _ RATIO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIMP ERIAL S _ FE ET _ DISTANCE _ UNIT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġround Small Units ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Distance In M iles With Units ( ĊĠĠĠĠĠĠĠ Ġmeters : ĠInt , ĊĠĠĠĠĠĠĠ Ġsmall Unit Conversion Ratio : ĠFloat , ĊĠĠĠĠĠĠĠ Ġsmall Unit Text : ĠString , ĊĠĠĠĠĠĠĠ Ġround Small Units : ĠBoolean ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm iles Ġ= Ġmeters Ġ* ĠM _ TO _ MI _ CONVERSION _ RATIO ĊĠĠĠĠĠĠĠ Ġval Ġsmall Units Value Ġ= Ġ( meters Ġ* Ġsmall Unit Conversion Ratio ). round ToInt () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm iles Ġ>= Ġ 1 0 Ġ-> Ġ"${ m iles . round ToInt ()} Ġ$ IMP ERIAL S _ MI _ DISTANCE _ UNIT " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsmall Units Value Ġ>= Ġ 1 0 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrounded M iles Ġ= Ġm iles . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrest Ġ= Ġm iles . get Decimal () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rest Ġ< Ġ 0 . 3 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rounded M iles Ġ== Ġ 0 ) Ġ" Â ¼ Ġ$ IMP ERIAL S _ MI _ DISTANCE _ UNIT " Ġelse Ġ"$ rounded M iles Ġ$ IMP ERIAL S _ MI _ DISTANCE _ UNIT " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( rest Ġ< Ġ 0 . 6 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rounded M iles Ġ== Ġ 0 ) Ġ" Â ½ Ġ$ IMP ERIAL S _ MI _ DISTANCE _ UNIT " Ġelse Ġ"$ rounded M iles Ġ Â ½ Ġ$ IMP ERIAL S _ MI _ DISTANCE _ UNIT " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ rounded M iles Ġ+ Ġ 1 } Ġ$ IMP ERIAL S _ MI _ DISTANCE _ UNIT " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"${ if Ġ( round Small Units ) Ġround Distance ( small Units Value ) Ġelse Ġsmall Units Value } Ġ$ small Unit Text " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġround Distance ( distance : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ< Ġ 5 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ< Ġ 3 0 Ġ-> Ġ( distance Ġ+ Ġ 2 ). let Ġ{ Ġit Ġ- Ġit Ġ% Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ< Ġ 2 5 0 Ġ-> Ġ( distance Ġ+ Ġ 5 ). let Ġ{ Ġit Ġ- Ġit Ġ% Ġ 1 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ< Ġ 8 0 0 Ġ-> Ġ( distance Ġ+ Ġ 2 5 ). let Ġ{ Ġit Ġ- Ġit Ġ% Ġ 5 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ< Ġ 1 0 0 0 0 Ġ-> Ġ( distance Ġ+ Ġ 5 0 ). let Ġ{ Ġit Ġ- Ġit Ġ% Ġ 1 0 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( distance Ġ+ Ġ 5 0 0 ). let Ġ{ Ġit Ġ- Ġit Ġ% Ġ 1 0 0 0 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠTime Ġ{ ĊĊĠĠĠ Ġfun Ġget Formatted Time ( seconds : ĠInt ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġtotal Hours Ġ= ĠTimeUnit . SECONDS . to Hours ( seconds . to Long ()) ĊĠĠĠĠĠĠĠ Ġval Ġtotal Minutes Ġ= ĠTimeUnit . SECONDS . to Minutes ( seconds . to Long ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= ĠTimeUnit . SECONDS . to Days ( seconds . to Long ()) ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġtotal Hours Ġ- Ġdays Ġ* Ġ 2 4 ĊĠĠĠĠĠĠĠ Ġval Ġminutes Ġ= Ġtotal Minutes Ġ- Ġtotal Hours Ġ* Ġ 6 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdays Ġ> Ġ 0 Ġ-> Ġ"${ days } d :${ hours } h " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhours Ġ> Ġ 0 Ġ-> Ġ"${ hours } h :${ minutes } min " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminutes Ġ> Ġ 0 Ġ-> Ġ"${ minutes } min " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseconds Ġ> Ġ 0 Ġ-> Ġ" 1 min " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠEMPTY _ STRING ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠE levation Ġ{ ĊĊĠĠĠ Ġfun Ġget Formatted Elevation ( meters : ĠInt ): ĠString Ġ= Ġ"$ meters Ġm Ġas l " ĊĊĠĠĠ Ġfun Ġget Formatted Elevation ( meters : ĠDouble ): ĠString Ġ= Ġget Formatted Elevation ( meters . round ToInt ()) Ċ }