merge heads

This commit is contained in:
Jimmy Shih
2012-02-22 12:39:28 -08:00
16 changed files with 89 additions and 65 deletions
@@ -300,7 +300,7 @@ public class ChartActivity extends Activity implements TrackDataListener {
profileLength += d * UnitConversions.KM_TO_MI; profileLength += d * UnitConversions.KM_TO_MI;
} }
} }
timeOrDistance = profileLength / 1000.0; timeOrDistance = profileLength * UnitConversions.M_TO_KM;
break; break;
case BY_TIME: case BY_TIME:
if (startTime == -1) { if (startTime == -1) {
@@ -328,7 +328,7 @@ public class ChartActivity extends Activity implements TrackDataListener {
&& (location.getSpeed() <= trackMaxSpeed)) { && (location.getSpeed() <= trackMaxSpeed)) {
speedBuffer.setNext(location.getSpeed()); speedBuffer.setNext(location.getSpeed());
} }
speed = speedBuffer.getAverage() * 3.6; speed = speedBuffer.getAverage() * UnitConversions.MS_TO_KMH;
if (!metricUnits) { if (!metricUnits) {
speed *= UnitConversions.KM_TO_MI; speed *= UnitConversions.KM_TO_MI;
} }
@@ -408,11 +408,12 @@ public class ChartView extends View {
} }
private int getWaypointX(Waypoint waypoint) { private int getWaypointX(Waypoint waypoint) {
return (mode == Mode.BY_DISTANCE) if (mode == Mode.BY_DISTANCE) {
? getX(metricUnits double lenghtInKm = waypoint.getLength() * UnitConversions.M_TO_KM;
? waypoint.getLength() / 1000.0 return getX(metricUnits ? lenghtInKm : lenghtInKm * UnitConversions.KM_TO_MI);
: waypoint.getLength() * UnitConversions.KM_TO_MI / 1000.0) } else {
: getX(waypoint.getDuration()); return getX(waypoint.getDuration());
}
} }
/** /**
@@ -22,6 +22,7 @@ import com.google.android.apps.mytracks.maps.TrackPathPainter;
import com.google.android.apps.mytracks.maps.TrackPathPainterFactory; import com.google.android.apps.mytracks.maps.TrackPathPainterFactory;
import com.google.android.apps.mytracks.maps.TrackPathUtilities; import com.google.android.apps.mytracks.maps.TrackPathUtilities;
import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.LocationUtils;
import com.google.android.apps.mytracks.util.UnitConversions;
import com.google.android.maps.GeoPoint; import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView; import com.google.android.maps.MapView;
import com.google.android.maps.Overlay; import com.google.android.maps.Overlay;
@@ -103,7 +104,7 @@ public class MapOverlay extends Overlay implements OnSharedPreferenceChangeListe
public CachedLocation(Location location) { public CachedLocation(Location location) {
this.valid = LocationUtils.isValidLocation(location); this.valid = LocationUtils.isValidLocation(location);
this.geoPoint = valid ? LocationUtils.getGeoPoint(location) : null; this.geoPoint = valid ? LocationUtils.getGeoPoint(location) : null;
this.speed = (int) Math.floor(location.getSpeed() * 3.6); this.speed = (int) Math.floor(location.getSpeed() * UnitConversions.MS_TO_KMH);
} }
}; };
@@ -502,7 +502,7 @@ public class SettingsActivity extends PreferenceActivity {
format = getString(stringId); format = getString(stringId);
options[i] = String.format(format, value); options[i] = String.format(format, value);
} else { } else {
double mile = value / UnitConversions.MI_TO_FEET; double mile = value * UnitConversions.FT_TO_MI;
format = getString(R.string.value_float_mile); format = getString(R.string.value_float_mile);
options[i] = String.format(format, mile); options[i] = String.format(format, mile);
} }
@@ -545,7 +545,7 @@ public class SettingsActivity extends PreferenceActivity {
} }
options[i] = String.format(format, value); options[i] = String.format(format, value);
} else { } else {
double mile = value / UnitConversions.MI_TO_FEET; double mile = value * UnitConversions.FT_TO_MI;
if (values[i].equals(GPS_ACCURACY_POOR)) { if (values[i].equals(GPS_ACCURACY_POOR)) {
format = getString(R.string.value_float_mile_poor_gps); format = getString(R.string.value_float_mile_poor_gps);
} else { } else {
@@ -644,7 +644,7 @@ public class SettingsActivity extends PreferenceActivity {
String metricspeed = prefs.getString(getString(id), null); String metricspeed = prefs.getString(getString(id), null);
int englishspeed; int englishspeed;
try { try {
englishspeed = (int) (Double.parseDouble(metricspeed) * UnitConversions.KMH_TO_MPH); englishspeed = (int) (Double.parseDouble(metricspeed) * UnitConversions.KM_TO_MI);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
englishspeed = 0; englishspeed = 0;
} }
@@ -663,7 +663,7 @@ public class SettingsActivity extends PreferenceActivity {
// Convert miles/h to km/h // Convert miles/h to km/h
try { try {
metricspeed = String.valueOf( metricspeed = String.valueOf(
(int) (Double.parseDouble(newValue) * UnitConversions.MPH_TO_KMH) + 1); (int) (Double.parseDouble(newValue) * UnitConversions.MI_TO_KM));
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
metricspeed = "0"; metricspeed = "0";
} }
@@ -23,6 +23,7 @@ import com.google.android.apps.mytracks.content.TrackDataHub.ListenerDataType;
import com.google.android.apps.mytracks.content.TrackDataListener; import com.google.android.apps.mytracks.content.TrackDataListener;
import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.services.ServiceUtils; import com.google.android.apps.mytracks.services.ServiceUtils;
import com.google.android.apps.mytracks.util.UnitConversions;
import com.google.android.maps.mytracks.R; import com.google.android.maps.mytracks.R;
import android.app.Activity; import android.app.Activity;
@@ -190,7 +191,7 @@ public class StatsActivity extends Activity implements TrackDataListener {
utils.setAltitude(R.id.elevation_register, l.getAltitude()); utils.setAltitude(R.id.elevation_register, l.getAltitude());
utils.setLatLong(R.id.latitude_register, l.getLatitude()); utils.setLatLong(R.id.latitude_register, l.getLatitude());
utils.setLatLong(R.id.longitude_register, l.getLongitude()); utils.setLatLong(R.id.longitude_register, l.getLongitude());
utils.setSpeed(R.id.speed_register, l.getSpeed() * 3.6); utils.setSpeed(R.id.speed_register, l.getSpeed() * UnitConversions.MS_TO_KMH);
} }
private void showUnknownLocation() { private void showUnknownLocation() {
@@ -213,10 +213,10 @@ public class StatsUtilities {
double minElevation, double maxElevation, double elevationGain, double minElevation, double maxElevation, double elevationGain,
double minGrade, double maxGrade) { double minGrade, double maxGrade) {
setTime(R.id.moving_time_register, movingTime); setTime(R.id.moving_time_register, movingTime);
setDistance(R.id.total_distance_register, totalDistance / 1000.0); setDistance(R.id.total_distance_register, totalDistance * UnitConversions.M_TO_KM);
setSpeed(R.id.average_speed_register, averageSpeed * 3.6); setSpeed(R.id.average_speed_register, averageSpeed * UnitConversions.MS_TO_KMH);
setSpeed(R.id.average_moving_speed_register, averageMovingSpeed * 3.6); setSpeed(R.id.average_moving_speed_register, averageMovingSpeed * UnitConversions.MS_TO_KMH);
setSpeed(R.id.max_speed_register, maxSpeed * 3.6); setSpeed(R.id.max_speed_register, maxSpeed * UnitConversions.MS_TO_KMH);
setAltitude(R.id.min_elevation_register, minElevation); setAltitude(R.id.min_elevation_register, minElevation);
setAltitude(R.id.max_elevation_register, maxElevation); setAltitude(R.id.max_elevation_register, maxElevation);
setAltitude(R.id.elevation_gain_register, elevationGain); setAltitude(R.id.elevation_gain_register, elevationGain);
@@ -226,11 +226,11 @@ public class StatsUtilities {
public void setAllStats(TripStatistics stats) { public void setAllStats(TripStatistics stats) {
setTime(R.id.moving_time_register, stats.getMovingTime()); setTime(R.id.moving_time_register, stats.getMovingTime());
setDistance(R.id.total_distance_register, stats.getTotalDistance() / 1000.0); setDistance(R.id.total_distance_register, stats.getTotalDistance() * UnitConversions.M_TO_KM);
setSpeed(R.id.average_speed_register, stats.getAverageSpeed() * 3.6); setSpeed(R.id.average_speed_register, stats.getAverageSpeed() * UnitConversions.MS_TO_KMH);
setSpeed(R.id.average_moving_speed_register, setSpeed(R.id.average_moving_speed_register,
stats.getAverageMovingSpeed() * 3.6); stats.getAverageMovingSpeed() * UnitConversions.MS_TO_KMH);
setSpeed(R.id.max_speed_register, stats.getMaxSpeed() * 3.6); setSpeed(R.id.max_speed_register, stats.getMaxSpeed() * UnitConversions.MS_TO_KMH);
setAltitude(R.id.min_elevation_register, stats.getMinElevation()); setAltitude(R.id.min_elevation_register, stats.getMinElevation());
setAltitude(R.id.max_elevation_register, stats.getMaxElevation()); setAltitude(R.id.max_elevation_register, stats.getMaxElevation());
setAltitude(R.id.elevation_gain_register, stats.getTotalElevationGain()); setAltitude(R.id.elevation_gain_register, stats.getTotalElevationGain());
@@ -17,6 +17,7 @@ package com.google.android.apps.mytracks.content;
import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.stats.TripStatistics;
import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.LocationUtils;
import com.google.android.apps.mytracks.util.UnitConversions;
import android.database.Cursor; import android.database.Cursor;
import android.location.Location; import android.location.Location;
@@ -385,7 +386,7 @@ public class SearchEngine {
distanceResults); distanceResults);
// Score tracks close to the current location higher. // Score tracks close to the current location higher.
double distanceKm = distanceResults[0] / 1000.0; double distanceKm = distanceResults[0] * UnitConversions.M_TO_KM;
if (distanceKm > 0.0) { if (distanceKm > 0.0) {
// Use the inverse of the amortized distance. // Use the inverse of the amortized distance.
return squash(distanceKm); return squash(distanceKm);
@@ -349,7 +349,7 @@ public class SendDocsUtils {
*/ */
@VisibleForTesting @VisibleForTesting
static final String getDistance(double distanceInMeter, boolean metricUnits) { static final String getDistance(double distanceInMeter, boolean metricUnits) {
double distanceInKilometer = distanceInMeter / 1000.0; double distanceInKilometer = distanceInMeter * UnitConversions.M_TO_KM;
double distance = metricUnits ? distanceInKilometer double distance = metricUnits ? distanceInKilometer
: distanceInKilometer * UnitConversions.KM_TO_MI; : distanceInKilometer * UnitConversions.KM_TO_MI;
return NUMBER_FORMAT.format(distance); return NUMBER_FORMAT.format(distance);
@@ -363,9 +363,9 @@ public class SendDocsUtils {
*/ */
@VisibleForTesting @VisibleForTesting
static final String getSpeed(double speedInMeterPerSecond, boolean metricUnits) { static final String getSpeed(double speedInMeterPerSecond, boolean metricUnits) {
double speedInKilometerPerHour = speedInMeterPerSecond * 3.6; double speedInKilometerPerHour = speedInMeterPerSecond * UnitConversions.MS_TO_KMH;
double speed = metricUnits ? speedInKilometerPerHour double speed = metricUnits ? speedInKilometerPerHour
: speedInKilometerPerHour * UnitConversions.KMH_TO_MPH; : speedInKilometerPerHour * UnitConversions.KM_TO_MI;
return NUMBER_FORMAT.format(speed); return NUMBER_FORMAT.format(speed);
} }
@@ -21,6 +21,7 @@ import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils; import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.stats.TripStatistics;
import com.google.android.apps.mytracks.util.UnitConversions;
import com.google.android.maps.mytracks.R; import com.google.android.maps.mytracks.R;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
@@ -120,7 +121,8 @@ public class DynamicSpeedTrackPathDescriptor implements TrackPathDescriptor,
} }
Track track = MyTracksProviderUtils.Factory.get(context).getTrack(currentTrackId); Track track = MyTracksProviderUtils.Factory.get(context).getTrack(currentTrackId);
TripStatistics stats = track.getStatistics(); TripStatistics stats = track.getStatistics();
double newAverageMovingSpeed = (int) Math.floor(stats.getAverageMovingSpeed() * 3.6); double newAverageMovingSpeed = (int) Math.floor(
stats.getAverageMovingSpeed() * UnitConversions.MS_TO_KMH);
return isDifferenceSignificant(averageMovingSpeed, newAverageMovingSpeed); return isDifferenceSignificant(averageMovingSpeed, newAverageMovingSpeed);
} }
@@ -126,7 +126,7 @@ public class PeriodicTaskExecutor {
return; return;
} }
double distance = service.getTripStatistics().getTotalDistance() / 1000.0; double distance = service.getTripStatistics().getTotalDistance() * UnitConversions.M_TO_KM;
if (!metricUnits) { if (!metricUnits) {
distance *= UnitConversions.KM_TO_MI; distance *= UnitConversions.KM_TO_MI;
} }
@@ -145,7 +145,7 @@ public class PeriodicTaskExecutor {
return; return;
} }
// Convert the distance in meters to km or mi. // Convert the distance in meters to km or mi.
double distance = service.getTripStatistics().getTotalDistance() / 1000.0; double distance = service.getTripStatistics().getTotalDistance() * UnitConversions.M_TO_KM;
if (!metricUnits) { if (!metricUnits) {
distance *= UnitConversions.KM_TO_MI; distance *= UnitConversions.KM_TO_MI;
} }
@@ -159,8 +159,8 @@ public class StatusAnnouncerTask implements PeriodicTask {
reportSpeed = preferences.getBoolean(context.getString(R.string.report_speed_key), true); reportSpeed = preferences.getBoolean(context.getString(R.string.report_speed_key), true);
} }
double d = stats.getTotalDistance() / 1000.0; // d is in kilometers double d = stats.getTotalDistance() * UnitConversions.M_TO_KM;
double s = stats.getAverageMovingSpeed() * 3.6; // s is in kilometers per hour double s = stats.getAverageMovingSpeed() * UnitConversions.MS_TO_KMH;
if (d == 0) { if (d == 0) {
return context.getString(R.string.voice_total_distance_zero); return context.getString(R.string.voice_total_distance_zero);
@@ -168,7 +168,7 @@ public class StatusAnnouncerTask implements PeriodicTask {
if (!metricUnits) { if (!metricUnits) {
d *= UnitConversions.KM_TO_MI; d *= UnitConversions.KM_TO_MI;
s *= UnitConversions.KMH_TO_MPH; s *= UnitConversions.KM_TO_MI;
} }
if (!reportSpeed) { if (!reportSpeed) {
@@ -110,7 +110,7 @@ public class ChartURLGenerator {
// Labels // Labels
sb.append("&chxt=x,y"); sb.append("&chxt=x,y");
double distKM = stats.getTotalDistance() / 1000.0; double distKM = stats.getTotalDistance() * UnitConversions.M_TO_KM;
double distDisplay = double distDisplay =
metricUnits ? distKM : (distKM * UnitConversions.KM_TO_MI); metricUnits ? distKM : (distKM * UnitConversions.KM_TO_MI);
int xInterval = ((int) (distDisplay / 6)); int xInterval = ((int) (distDisplay / 6));
@@ -49,12 +49,12 @@ public class LocationUtils {
return c2.distanceTo(c0); return c2.distanceTo(c0);
} }
final double s0lat = c0.getLatitude() * UnitConversions.TO_RADIANS; final double s0lat = c0.getLatitude() * UnitConversions.DEG_TO_RAD;
final double s0lng = c0.getLongitude() * UnitConversions.TO_RADIANS; final double s0lng = c0.getLongitude() * UnitConversions.DEG_TO_RAD;
final double s1lat = c1.getLatitude() * UnitConversions.TO_RADIANS; final double s1lat = c1.getLatitude() * UnitConversions.DEG_TO_RAD;
final double s1lng = c1.getLongitude() * UnitConversions.TO_RADIANS; final double s1lng = c1.getLongitude() * UnitConversions.DEG_TO_RAD;
final double s2lat = c2.getLatitude() * UnitConversions.TO_RADIANS; final double s2lat = c2.getLatitude() * UnitConversions.DEG_TO_RAD;
final double s2lng = c2.getLongitude() * UnitConversions.TO_RADIANS; final double s2lng = c2.getLongitude() * UnitConversions.DEG_TO_RAD;
double s2s1lat = s2lat - s1lat; double s2s1lat = s2lat - s1lat;
double s2s1lng = s2lng - s1lng; double s2s1lng = s2lng - s1lng;
@@ -90,14 +90,14 @@ public class StringUtils implements DescriptionGenerator {
String distanceUnit; String distanceUnit;
if (metric) { if (metric) {
if (totalDistance > 2000.0) { if (totalDistance > 2000.0) {
totalDistance /= 1000.0; totalDistance *= UnitConversions.M_TO_KM;
distanceUnit = context.getString(R.string.unit_kilometer); distanceUnit = context.getString(R.string.unit_kilometer);
} else { } else {
distanceUnit = context.getString(R.string.unit_meter); distanceUnit = context.getString(R.string.unit_meter);
} }
} else { } else {
if (totalDistance > 2 * UnitConversions.MI_TO_M) { if (totalDistance * UnitConversions.M_TO_MI > 2) {
totalDistance /= UnitConversions.MI_TO_M; totalDistance *= UnitConversions.M_TO_MI;
distanceUnit = context.getString(R.string.unit_mile); distanceUnit = context.getString(R.string.unit_mile);
} else { } else {
totalDistance *= UnitConversions.M_TO_FT; totalDistance *= UnitConversions.M_TO_FT;
@@ -259,7 +259,7 @@ public class StringUtils implements DescriptionGenerator {
} }
TripStatistics trackStats = track.getStatistics(); TripStatistics trackStats = track.getStatistics();
final double distanceInKm = trackStats.getTotalDistance() / 1000.0; final double distanceInKm = trackStats.getTotalDistance() * UnitConversions.M_TO_KM;
final double distanceInMiles = distanceInKm * UnitConversions.KM_TO_MI; final double distanceInMiles = distanceInKm * UnitConversions.KM_TO_MI;
final long minElevationInMeters = Math.round(trackStats.getMinElevation()); final long minElevationInMeters = Math.round(trackStats.getMinElevation());
final long minElevationInFeet = final long minElevationInFeet =
@@ -391,8 +391,8 @@ public class StringUtils implements DescriptionGenerator {
private String getSpeedString(double speed, int speedLabel, int paceLabel, private String getSpeedString(double speed, int speedLabel, int paceLabel,
boolean displaySpeed) { boolean displaySpeed) {
double speedInKph = speed * 3.6; double speedInKph = speed * UnitConversions.MS_TO_KMH;
double speedInMph = speedInKph * UnitConversions.KMH_TO_MPH; double speedInMph = speedInKph * UnitConversions.KM_TO_MI;
if (displaySpeed) { if (displaySpeed) {
return String.format("%s: %.2f %s (%.1f %s)<br>", return String.format("%s: %.2f %s (%.1f %s)<br>",
context.getString(speedLabel), context.getString(speedLabel),
@@ -424,16 +424,16 @@ public class StringUtils implements DescriptionGenerator {
public String generateWaypointDescription(Waypoint waypoint) { public String generateWaypointDescription(Waypoint waypoint) {
TripStatistics stats = waypoint.getStatistics(); TripStatistics stats = waypoint.getStatistics();
final double distanceInKm = stats.getTotalDistance() / 1000.0; final double distanceInKm = stats.getTotalDistance() * UnitConversions.M_TO_KM;
final double distanceInMiles = distanceInKm * UnitConversions.KM_TO_MI; final double distanceInMiles = distanceInKm * UnitConversions.KM_TO_MI;
final double averageSpeedInKmh = stats.getAverageSpeed() * 3.6; final double averageSpeedInKmh = stats.getAverageSpeed() * UnitConversions.MS_TO_KMH;
final double averageSpeedInMph = final double averageSpeedInMph =
averageSpeedInKmh * UnitConversions.KMH_TO_MPH; averageSpeedInKmh * UnitConversions.KM_TO_MI;
final double movingSpeedInKmh = stats.getAverageMovingSpeed() * 3.6; final double movingSpeedInKmh = stats.getAverageMovingSpeed() * UnitConversions.MS_TO_KMH;
final double movingSpeedInMph = final double movingSpeedInMph =
movingSpeedInKmh * UnitConversions.KMH_TO_MPH; movingSpeedInKmh * UnitConversions.KM_TO_MI;
final double maxSpeedInKmh = stats.getMaxSpeed() * 3.6; final double maxSpeedInKmh = stats.getMaxSpeed() * UnitConversions.MS_TO_KMH;
final double maxSpeedInMph = maxSpeedInKmh * UnitConversions.KMH_TO_MPH; final double maxSpeedInMph = maxSpeedInKmh * UnitConversions.KM_TO_MI;
final long minElevationInMeters = Math.round(stats.getMinElevation()); final long minElevationInMeters = Math.round(stats.getMinElevation());
final long minElevationInFeet = final long minElevationInFeet =
Math.round(stats.getMinElevation() * UnitConversions.M_TO_FT); Math.round(stats.getMinElevation() * UnitConversions.M_TO_FT);
@@ -17,19 +17,37 @@ package com.google.android.apps.mytracks.util;
/** /**
* Unit conversion constants. * Unit conversion constants.
* *
* @author Sandor Dornbush * @author Sandor Dornbush
*/ */
public abstract class UnitConversions { public class UnitConversions {
public static final double KM_TO_MI = 0.621371192; private UnitConversions() {}
public static final double M_TO_FT = 3.2808399;
public static final double MI_TO_M = 1609.344;
public static final double MI_TO_FEET = 5280.0;
public static final double KMH_TO_MPH = 1000.0 * M_TO_FT / MI_TO_FEET;
public static final double TO_RADIANS = Math.PI / 180.0;
public static final double MPH_TO_KMH = 1.609344;
protected UnitConversions() { // multiplication factor to convert kilometers to miles
} public static final double KM_TO_MI = 0.621371192;
// multiplication factor to convert miles to kilometers
public static final double MI_TO_KM = 1 / KM_TO_MI;
// multiplication factor to convert miles to feet
public static final double MI_TO_FT = 5280.0;
// multiplication factor to convert feet to miles
public static final double FT_TO_MI = 1 / MI_TO_FT;
// multiplication factor to convert meters to kilometers
public static final double M_TO_KM = 1 / 1000.0;
// multiplication factor to convert meters per second to kilometers per hour
public static final double MS_TO_KMH = M_TO_KM * 60 * 60;
// multiplication factor to convert meters to miles
public static final double M_TO_MI = M_TO_KM * KM_TO_MI;
// multiplication factor to convert meters to feet
public static final double M_TO_FT = M_TO_MI * MI_TO_FT;
// multiplication factor to convert degrees to radians
public static final double DEG_TO_RAD = Math.PI / 180.0;
} }
@@ -216,7 +216,7 @@ public class TrackWidgetProvider
// TODO replace this with format strings and miles. // TODO replace this with format strings and miles.
// convert meters to kilometers // convert meters to kilometers
double displayDistance = stats.getTotalDistance() / 1000.0; double displayDistance = stats.getTotalDistance() * UnitConversions.M_TO_KM;
if (!isMetric) { if (!isMetric) {
displayDistance *= UnitConversions.KM_TO_MI; displayDistance *= UnitConversions.KM_TO_MI;
} }
@@ -228,9 +228,9 @@ public class TrackWidgetProvider
String speed = unknown; String speed = unknown;
if (!Double.isNaN(stats.getAverageMovingSpeed())) { if (!Double.isNaN(stats.getAverageMovingSpeed())) {
// Convert m/s to km/h // Convert m/s to km/h
double displaySpeed = stats.getAverageMovingSpeed() * 3.6; double displaySpeed = stats.getAverageMovingSpeed() * UnitConversions.MS_TO_KMH;
if (!isMetric) { if (!isMetric) {
displaySpeed *= UnitConversions.KMH_TO_MPH; displaySpeed *= UnitConversions.KM_TO_MI;
} }
if (reportSpeed) { if (reportSpeed) {
speed = StringUtils.formatSingleDecimalPlace(displaySpeed) + " " + this.speedLabel; speed = StringUtils.formatSingleDecimalPlace(displaySpeed) + " " + this.speedLabel;