From cd1a99727ac4264e57608a111f254cb810f86d41 Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Thu, 16 Feb 2012 16:30:04 -0800 Subject: [PATCH] Clean up UnitConversionUtils. --- .../android/apps/mytracks/ChartActivity.java | 12 ++--- .../android/apps/mytracks/ChartView.java | 13 ++--- .../android/apps/mytracks/MapOverlay.java | 3 +- .../apps/mytracks/SettingsActivity.java | 16 +++--- .../android/apps/mytracks/StatsActivity.java | 3 +- .../android/apps/mytracks/StatsUtilities.java | 24 ++++----- .../apps/mytracks/content/SearchEngine.java | 3 +- .../apps/mytracks/io/docs/SendDocsUtils.java | 12 ++--- .../SendFusionTablesAsyncTask.java | 4 +- .../mytracks/io/maps/SendMapsAsyncTask.java | 4 +- .../maps/DynamicSpeedTrackPathDescriptor.java | 4 +- .../services/tasks/PeriodicTaskExecutor.java | 10 ++-- .../services/tasks/StatusAnnouncerTask.java | 10 ++-- .../apps/mytracks/util/ChartURLGenerator.java | 8 +-- .../apps/mytracks/util/LocationUtils.java | 12 ++--- .../apps/mytracks/util/StringUtils.java | 44 +++++++-------- .../mytracks/util/UnitConversionUtils.java | 53 +++++++++++++++++++ .../apps/mytracks/util/UnitConversions.java | 35 ------------ .../mytracks/widgets/TrackWidgetProvider.java | 10 ++-- 19 files changed, 152 insertions(+), 128 deletions(-) create mode 100644 MyTracks/src/com/google/android/apps/mytracks/util/UnitConversionUtils.java delete mode 100644 MyTracks/src/com/google/android/apps/mytracks/util/UnitConversions.java diff --git a/MyTracks/src/com/google/android/apps/mytracks/ChartActivity.java b/MyTracks/src/com/google/android/apps/mytracks/ChartActivity.java index 2e8c0e86d..e30b1f36b 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/ChartActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/ChartActivity.java @@ -29,7 +29,7 @@ import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.stats.DoubleBuffer; import com.google.android.apps.mytracks.stats.TripStatisticsBuilder; import com.google.android.apps.mytracks.util.LocationUtils; -import com.google.android.apps.mytracks.util.UnitConversions; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.mytracks.R; import android.app.Activity; @@ -290,13 +290,13 @@ public class ChartActivity extends Activity implements TrackDataListener { Mode mode = chartView.getMode(); switch (mode) { case BY_DISTANCE: - timeOrDistance = profileLength / 1000.0; + timeOrDistance = profileLength * UnitConversionUtils.M_TO_KM; if (lastLocation != null) { double d = lastLocation.distanceTo(location); if (metricUnits) { profileLength += d; } else { - profileLength += d * UnitConversions.KM_TO_MI; + profileLength += d * UnitConversionUtils.KM_TO_MI; } } break; @@ -313,7 +313,7 @@ public class ChartActivity extends Activity implements TrackDataListener { elevationBuffer.setNext(metricUnits ? location.getAltitude() - : location.getAltitude() * UnitConversions.M_TO_FT); + : location.getAltitude() * UnitConversionUtils.M_TO_FT); elevation = elevationBuffer.getAverage(); if (lastLocation == null) { @@ -326,9 +326,9 @@ public class ChartActivity extends Activity implements TrackDataListener { && (location.getSpeed() <= trackMaxSpeed)) { speedBuffer.setNext(location.getSpeed()); } - speed = speedBuffer.getAverage() * 3.6; + speed = speedBuffer.getAverage() * UnitConversionUtils.MS_TO_KMH; if (!metricUnits) { - speed *= UnitConversions.KM_TO_MI; + speed *= UnitConversionUtils.KM_TO_MI; } if (!reportSpeed) { if (speed != 0) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/ChartView.java b/MyTracks/src/com/google/android/apps/mytracks/ChartView.java index d16832308..78682325d 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/ChartView.java +++ b/MyTracks/src/com/google/android/apps/mytracks/ChartView.java @@ -19,7 +19,7 @@ import com.google.android.apps.mytracks.ChartValueSeries.ZoomSettings; import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.stats.ExtremityMonitor; import com.google.android.apps.mytracks.util.StringUtils; -import com.google.android.apps.mytracks.util.UnitConversions; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.mytracks.R; import android.content.Context; @@ -407,11 +407,12 @@ public class ChartView extends View { } private int getWaypointX(Waypoint waypoint) { - return (mode == Mode.BY_DISTANCE) - ? getX(metricUnits - ? waypoint.getLength() / 1000.0 - : waypoint.getLength() * UnitConversions.KM_TO_MI / 1000.0) - : getX(waypoint.getDuration()); + if (mode == Mode.BY_DISTANCE) { + double lenghtInKm = waypoint.getLength() * UnitConversionUtils.M_TO_KM; + return getX(metricUnits ? lenghtInKm : lenghtInKm * UnitConversionUtils.KM_TO_MI); + } else { + return getX(waypoint.getDuration()); + } } /** diff --git a/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java b/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java index cbd7e23dd..320256395 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MapOverlay.java @@ -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.TrackPathUtilities; import com.google.android.apps.mytracks.util.LocationUtils; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; @@ -103,7 +104,7 @@ public class MapOverlay extends Overlay implements OnSharedPreferenceChangeListe public CachedLocation(Location location) { this.valid = LocationUtils.isValidLocation(location); this.geoPoint = valid ? LocationUtils.getGeoPoint(location) : null; - this.speed = (int) Math.floor(location.getSpeed() * 3.6); + this.speed = (int) Math.floor(location.getSpeed() * UnitConversionUtils.MS_TO_KMH); } }; diff --git a/MyTracks/src/com/google/android/apps/mytracks/SettingsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SettingsActivity.java index 62cc273fe..ddfe0d326 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/SettingsActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/SettingsActivity.java @@ -23,7 +23,7 @@ import com.google.android.apps.mytracks.services.sensors.ant.AntUtils; import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.BluetoothDeviceUtils; import com.google.android.apps.mytracks.util.DialogUtils; -import com.google.android.apps.mytracks.util.UnitConversions; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.mytracks.R; import android.app.Dialog; @@ -462,7 +462,7 @@ public class SettingsActivity extends PreferenceActivity { for (int i = 0; i < values.length; i++) { int value = Integer.parseInt(values[i]); if (!isMetric) { - value = (int) (value * UnitConversions.M_TO_FT); + value = (int) (value * UnitConversionUtils.M_TO_FT); } String format; if (values[i].equals(RECORDING_DISTANCE_RECOMMENDED)) { @@ -495,14 +495,14 @@ public class SettingsActivity extends PreferenceActivity { format = getString(stringId); options[i] = String.format(format, value); } else { - value = (int) (value * UnitConversions.M_TO_FT); + value = (int) (value * UnitConversionUtils.M_TO_FT); if (value < 2000) { int stringId = values[i].equals(TRACK_DISTANCE_RECOMMENDED) ? R.string.value_integer_feet_recommended : R.string.value_integer_feet; format = getString(stringId); options[i] = String.format(format, value); } else { - double mile = value / UnitConversions.MI_TO_FEET; + double mile = value * UnitConversionUtils.FT_TO_MI; format = getString(R.string.value_float_mile); options[i] = String.format(format, mile); } @@ -534,7 +534,7 @@ public class SettingsActivity extends PreferenceActivity { } options[i] = String.format(format, value); } else { - value = (int) (value * UnitConversions.M_TO_FT); + value = (int) (value * UnitConversionUtils.M_TO_FT); if (value < 2000) { if (values[i].equals(GPS_ACCURACY_RECOMMENDED)) { format = getString(R.string.value_integer_feet_recommended); @@ -545,7 +545,7 @@ public class SettingsActivity extends PreferenceActivity { } options[i] = String.format(format, value); } else { - double mile = value / UnitConversions.MI_TO_FEET; + double mile = value * UnitConversionUtils.FT_TO_MI; if (values[i].equals(GPS_ACCURACY_POOR)) { format = getString(R.string.value_float_mile_poor_gps); } else { @@ -644,7 +644,7 @@ public class SettingsActivity extends PreferenceActivity { String metricspeed = prefs.getString(getString(id), null); int englishspeed; try { - englishspeed = (int) (Double.parseDouble(metricspeed) * UnitConversions.KMH_TO_MPH); + englishspeed = (int) (Double.parseDouble(metricspeed) * UnitConversionUtils.KM_TO_MI); } catch (NumberFormatException e) { englishspeed = 0; } @@ -663,7 +663,7 @@ public class SettingsActivity extends PreferenceActivity { // Convert miles/h to km/h try { metricspeed = String.valueOf( - (int) (Double.parseDouble(newValue) * UnitConversions.MPH_TO_KMH) + 1); + (int) (Double.parseDouble(newValue) * UnitConversionUtils.MI_TO_KM)); } catch (NumberFormatException e) { metricspeed = "0"; } diff --git a/MyTracks/src/com/google/android/apps/mytracks/StatsActivity.java b/MyTracks/src/com/google/android/apps/mytracks/StatsActivity.java index 7ecad6d02..28f4e1004 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/StatsActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/StatsActivity.java @@ -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.Waypoint; import com.google.android.apps.mytracks.services.ServiceUtils; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.mytracks.R; import android.app.Activity; @@ -190,7 +191,7 @@ public class StatsActivity extends Activity implements TrackDataListener { utils.setAltitude(R.id.elevation_register, l.getAltitude()); utils.setLatLong(R.id.latitude_register, l.getLatitude()); 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() * UnitConversionUtils.MS_TO_KMH); } private void showUnknownLocation() { diff --git a/MyTracks/src/com/google/android/apps/mytracks/StatsUtilities.java b/MyTracks/src/com/google/android/apps/mytracks/StatsUtilities.java index d4b3ab7e2..00a3fa03b 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/StatsUtilities.java +++ b/MyTracks/src/com/google/android/apps/mytracks/StatsUtilities.java @@ -17,7 +17,7 @@ package com.google.android.apps.mytracks; import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.util.StringUtils; -import com.google.android.apps.mytracks.util.UnitConversions; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.mytracks.R; import android.app.Activity; @@ -106,12 +106,12 @@ public class StatsUtilities { } public void setAltitude(int id, double d) { - setText(id, (metricUnits ? d : (d * UnitConversions.M_TO_FT)), + setText(id, (metricUnits ? d : (d * UnitConversionUtils.M_TO_FT)), ALTITUDE_FORMAT); } public void setDistance(int id, double d) { - setText(id, (metricUnits ? d : (d * UnitConversions.KM_TO_MI)), + setText(id, (metricUnits ? d : (d * UnitConversionUtils.KM_TO_MI)), SPEED_FORMAT); } @@ -120,7 +120,7 @@ public class StatsUtilities { setUnknown(id); return; } - double speed = metricUnits ? d : d * UnitConversions.KM_TO_MI; + double speed = metricUnits ? d : d * UnitConversionUtils.KM_TO_MI; if (reportSpeed) { setText(id, speed, SPEED_FORMAT); } else { @@ -213,10 +213,10 @@ public class StatsUtilities { double minElevation, double maxElevation, double elevationGain, double minGrade, double maxGrade) { setTime(R.id.moving_time_register, movingTime); - setDistance(R.id.total_distance_register, totalDistance / 1000.0); - setSpeed(R.id.average_speed_register, averageSpeed * 3.6); - setSpeed(R.id.average_moving_speed_register, averageMovingSpeed * 3.6); - setSpeed(R.id.max_speed_register, maxSpeed * 3.6); + setDistance(R.id.total_distance_register, totalDistance * UnitConversionUtils.M_TO_KM); + setSpeed(R.id.average_speed_register, averageSpeed * UnitConversionUtils.MS_TO_KMH); + setSpeed(R.id.average_moving_speed_register, averageMovingSpeed * UnitConversionUtils.MS_TO_KMH); + setSpeed(R.id.max_speed_register, maxSpeed * UnitConversionUtils.MS_TO_KMH); setAltitude(R.id.min_elevation_register, minElevation); setAltitude(R.id.max_elevation_register, maxElevation); setAltitude(R.id.elevation_gain_register, elevationGain); @@ -226,11 +226,11 @@ public class StatsUtilities { public void setAllStats(TripStatistics stats) { setTime(R.id.moving_time_register, stats.getMovingTime()); - setDistance(R.id.total_distance_register, stats.getTotalDistance() / 1000.0); - setSpeed(R.id.average_speed_register, stats.getAverageSpeed() * 3.6); + setDistance(R.id.total_distance_register, stats.getTotalDistance() * UnitConversionUtils.M_TO_KM); + setSpeed(R.id.average_speed_register, stats.getAverageSpeed() * UnitConversionUtils.MS_TO_KMH); setSpeed(R.id.average_moving_speed_register, - stats.getAverageMovingSpeed() * 3.6); - setSpeed(R.id.max_speed_register, stats.getMaxSpeed() * 3.6); + stats.getAverageMovingSpeed() * UnitConversionUtils.MS_TO_KMH); + setSpeed(R.id.max_speed_register, stats.getMaxSpeed() * UnitConversionUtils.MS_TO_KMH); setAltitude(R.id.min_elevation_register, stats.getMinElevation()); setAltitude(R.id.max_elevation_register, stats.getMaxElevation()); setAltitude(R.id.elevation_gain_register, stats.getTotalElevationGain()); diff --git a/MyTracks/src/com/google/android/apps/mytracks/content/SearchEngine.java b/MyTracks/src/com/google/android/apps/mytracks/content/SearchEngine.java index c94139abd..a5c29f319 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/content/SearchEngine.java +++ b/MyTracks/src/com/google/android/apps/mytracks/content/SearchEngine.java @@ -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.util.LocationUtils; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import android.database.Cursor; import android.location.Location; @@ -385,7 +386,7 @@ public class SearchEngine { distanceResults); // Score tracks close to the current location higher. - double distanceKm = distanceResults[0] / 1000.0; + double distanceKm = distanceResults[0] * UnitConversionUtils.M_TO_KM; if (distanceKm > 0.0) { // Use the inverse of the amortized distance. return squash(distanceKm); diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/docs/SendDocsUtils.java b/MyTracks/src/com/google/android/apps/mytracks/io/docs/SendDocsUtils.java index adee07e89..2f604be2b 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/docs/SendDocsUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/docs/SendDocsUtils.java @@ -23,7 +23,7 @@ import com.google.android.apps.mytracks.io.gdata.docs.SpreadsheetsClient.Workshe import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.util.ResourceUtils; import com.google.android.apps.mytracks.util.StringUtils; -import com.google.android.apps.mytracks.util.UnitConversions; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.mytracks.R; import com.google.common.annotations.VisibleForTesting; import com.google.wireless.gdata.client.HttpException; @@ -349,9 +349,9 @@ public class SendDocsUtils { */ @VisibleForTesting static final String getDistance(double distanceInMeter, boolean metricUnits) { - double distanceInKilometer = distanceInMeter / 1000.0; + double distanceInKilometer = distanceInMeter * UnitConversionUtils.M_TO_KM; double distance = metricUnits ? distanceInKilometer - : distanceInKilometer * UnitConversions.KM_TO_MI; + : distanceInKilometer * UnitConversionUtils.KM_TO_MI; return NUMBER_FORMAT.format(distance); } @@ -363,9 +363,9 @@ public class SendDocsUtils { */ @VisibleForTesting static final String getSpeed(double speedInMeterPerSecond, boolean metricUnits) { - double speedInKilometerPerHour = speedInMeterPerSecond * 3.6; + double speedInKilometerPerHour = speedInMeterPerSecond * UnitConversionUtils.MS_TO_KMH; double speed = metricUnits ? speedInKilometerPerHour - : speedInKilometerPerHour * UnitConversions.KMH_TO_MPH; + : speedInKilometerPerHour * UnitConversionUtils.KM_TO_MI; return NUMBER_FORMAT.format(speed); } @@ -377,7 +377,7 @@ public class SendDocsUtils { */ @VisibleForTesting static final String getElevation(double elevationInMeter, boolean metricUnits) { - double elevation = metricUnits ? elevationInMeter : elevationInMeter * UnitConversions.M_TO_FT; + double elevation = metricUnits ? elevationInMeter : elevationInMeter * UnitConversionUtils.M_TO_FT; return INTEGER_FORMAT.format(elevation); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java index f00b13191..323592e4a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java @@ -14,7 +14,7 @@ import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.StringUtils; import com.google.android.apps.mytracks.util.SystemUtils; -import com.google.android.apps.mytracks.util.UnitConversions; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.mytracks.R; import com.google.api.client.googleapis.GoogleHeaders; import com.google.api.client.googleapis.MethodOverride; @@ -245,7 +245,7 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask { tripStatisticsBuilder.addLocation(location, location.getTime()); // All points go into the smoothing buffer elevationBuffer.setNext(metricUnits ? location.getAltitude() - : location.getAltitude() * UnitConversions.M_TO_FT); + : location.getAltitude() * UnitConversionUtils.M_TO_FT); if (i % elevationSamplingFrequency == 0) { distances.add(tripStatisticsBuilder.getStatistics().getTotalDistance()); elevations.add(elevationBuffer.getAverage()); diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTask.java index 632f76c3b..143c61f59 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTask.java @@ -30,7 +30,7 @@ import com.google.android.apps.mytracks.stats.DoubleBuffer; import com.google.android.apps.mytracks.stats.TripStatisticsBuilder; import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.StringUtils; -import com.google.android.apps.mytracks.util.UnitConversions; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.common.gdata.AndroidXmlParserFactory; import com.google.android.maps.mytracks.R; import com.google.wireless.gdata.client.GDataClient; @@ -282,7 +282,7 @@ public class SendMapsAsyncTask extends AbstractSendAsyncTask { tripStatisticsBuilder.addLocation(location, location.getTime()); // All points go into the smoothing buffer elevationBuffer.setNext(metricUnits ? location.getAltitude() - : location.getAltitude() * UnitConversions.M_TO_FT); + : location.getAltitude() * UnitConversionUtils.M_TO_FT); if (i % elevationSamplingFrequency == 0) { distances.add(tripStatisticsBuilder.getStatistics().getTotalDistance()); elevations.add(elevationBuffer.getAverage()); diff --git a/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java b/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java index 003b52473..29a055e6a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java +++ b/MyTracks/src/com/google/android/apps/mytracks/maps/DynamicSpeedTrackPathDescriptor.java @@ -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.Track; import com.google.android.apps.mytracks.stats.TripStatistics; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.mytracks.R; import com.google.common.annotations.VisibleForTesting; @@ -120,7 +121,8 @@ public class DynamicSpeedTrackPathDescriptor implements TrackPathDescriptor, } Track track = MyTracksProviderUtils.Factory.get(context).getTrack(currentTrackId); TripStatistics stats = track.getStatistics(); - double newAverageMovingSpeed = (int) Math.floor(stats.getAverageMovingSpeed() * 3.6); + double newAverageMovingSpeed = (int) Math.floor( + stats.getAverageMovingSpeed() * UnitConversionUtils.MS_TO_KMH); return isDifferenceSignificant(averageMovingSpeed, newAverageMovingSpeed); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/tasks/PeriodicTaskExecutor.java b/MyTracks/src/com/google/android/apps/mytracks/services/tasks/PeriodicTaskExecutor.java index 2e6888c51..cde627ef6 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/tasks/PeriodicTaskExecutor.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/tasks/PeriodicTaskExecutor.java @@ -18,7 +18,7 @@ package com.google.android.apps.mytracks.services.tasks; import static com.google.android.apps.mytracks.Constants.TAG; import com.google.android.apps.mytracks.services.TrackRecordingService; -import com.google.android.apps.mytracks.util.UnitConversions; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import android.util.Log; @@ -126,9 +126,9 @@ public class PeriodicTaskExecutor { return; } - double distance = service.getTripStatistics().getTotalDistance() / 1000.0; + double distance = service.getTripStatistics().getTotalDistance() * UnitConversionUtils.M_TO_KM; if (!metricUnits) { - distance *= UnitConversions.KM_TO_MI; + distance *= UnitConversionUtils.KM_TO_MI; } // The index will be negative since the frequency is negative. int index = (int) (distance / taskFrequency); @@ -145,9 +145,9 @@ public class PeriodicTaskExecutor { return; } // Convert the distance in meters to km or mi. - double distance = service.getTripStatistics().getTotalDistance() / 1000.0; + double distance = service.getTripStatistics().getTotalDistance() * UnitConversionUtils.M_TO_KM; if (!metricUnits) { - distance *= UnitConversions.KM_TO_MI; + distance *= UnitConversionUtils.KM_TO_MI; } if (distance > nextTaskDistance) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/tasks/StatusAnnouncerTask.java b/MyTracks/src/com/google/android/apps/mytracks/services/tasks/StatusAnnouncerTask.java index b588d0639..90da09338 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/tasks/StatusAnnouncerTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/tasks/StatusAnnouncerTask.java @@ -22,7 +22,7 @@ import com.google.android.apps.mytracks.Constants; import com.google.android.apps.mytracks.services.TrackRecordingService; import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.util.StringUtils; -import com.google.android.apps.mytracks.util.UnitConversions; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.mytracks.R; import com.google.common.annotations.VisibleForTesting; @@ -159,16 +159,16 @@ public class StatusAnnouncerTask implements PeriodicTask { reportSpeed = preferences.getBoolean(context.getString(R.string.report_speed_key), true); } - double d = stats.getTotalDistance() / 1000.0; // d is in kilometers - double s = stats.getAverageMovingSpeed() * 3.6; // s is in kilometers per hour + double d = stats.getTotalDistance() * UnitConversionUtils.M_TO_KM; + double s = stats.getAverageMovingSpeed() * UnitConversionUtils.MS_TO_KMH; if (d == 0) { return context.getString(R.string.voice_total_distance_zero); } if (!metricUnits) { - d *= UnitConversions.KM_TO_MI; - s *= UnitConversions.KMH_TO_MPH; + d *= UnitConversionUtils.KM_TO_MI; + s *= UnitConversionUtils.KM_TO_MI; } if (!reportSpeed) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/ChartURLGenerator.java b/MyTracks/src/com/google/android/apps/mytracks/util/ChartURLGenerator.java index f4f73613f..ef5b46393 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/ChartURLGenerator.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/ChartURLGenerator.java @@ -86,13 +86,13 @@ public class ChartURLGenerator { TripStatistics stats = track.getStatistics(); double effectiveMaxY = metricUnits ? stats.getMaxElevation() - : stats.getMaxElevation() * UnitConversions.M_TO_FT; + : stats.getMaxElevation() * UnitConversionUtils.M_TO_FT; effectiveMaxY = ((int) (effectiveMaxY / 100)) * 100 + 100; // Round it down. double effectiveMinY = 0; double minElevation = metricUnits ? stats.getMinElevation() - : stats.getMinElevation() * UnitConversions.M_TO_FT; + : stats.getMinElevation() * UnitConversionUtils.M_TO_FT; effectiveMinY = ((int) (minElevation / 100)) * 100; if (stats.getMinElevation() < 0) { @@ -110,9 +110,9 @@ public class ChartURLGenerator { // Labels sb.append("&chxt=x,y"); - double distKM = stats.getTotalDistance() / 1000.0; + double distKM = stats.getTotalDistance() * UnitConversionUtils.M_TO_KM; double distDisplay = - metricUnits ? distKM : (distKM * UnitConversions.KM_TO_MI); + metricUnits ? distKM : (distKM * UnitConversionUtils.KM_TO_MI); int xInterval = ((int) (distDisplay / 6)); int yInterval = ((int) (ySpread / 600)) * 100; if (yInterval < 100) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/LocationUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/LocationUtils.java index ca879526b..f2b0b607d 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/LocationUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/LocationUtils.java @@ -49,12 +49,12 @@ public class LocationUtils { return c2.distanceTo(c0); } - final double s0lat = c0.getLatitude() * UnitConversions.TO_RADIANS; - final double s0lng = c0.getLongitude() * UnitConversions.TO_RADIANS; - final double s1lat = c1.getLatitude() * UnitConversions.TO_RADIANS; - final double s1lng = c1.getLongitude() * UnitConversions.TO_RADIANS; - final double s2lat = c2.getLatitude() * UnitConversions.TO_RADIANS; - final double s2lng = c2.getLongitude() * UnitConversions.TO_RADIANS; + final double s0lat = c0.getLatitude() * UnitConversionUtils.DEG_TO_RAD; + final double s0lng = c0.getLongitude() * UnitConversionUtils.DEG_TO_RAD; + final double s1lat = c1.getLatitude() * UnitConversionUtils.DEG_TO_RAD; + final double s1lng = c1.getLongitude() * UnitConversionUtils.DEG_TO_RAD; + final double s2lat = c2.getLatitude() * UnitConversionUtils.DEG_TO_RAD; + final double s2lng = c2.getLongitude() * UnitConversionUtils.DEG_TO_RAD; double s2s1lat = s2lat - s1lat; double s2s1lng = s2lng - s1lng; diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java index 6aab3f21c..569a8f1e5 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/StringUtils.java @@ -90,17 +90,17 @@ public class StringUtils implements DescriptionGenerator { String distanceUnit; if (metric) { if (totalDistance > 2000.0) { - totalDistance /= 1000.0; + totalDistance *= UnitConversionUtils.M_TO_KM; distanceUnit = context.getString(R.string.unit_kilometer); } else { distanceUnit = context.getString(R.string.unit_meter); } } else { - if (totalDistance > 2 * UnitConversions.MI_TO_M) { - totalDistance /= UnitConversions.MI_TO_M; + if (totalDistance * UnitConversionUtils.M_TO_MI > 2) { + totalDistance *= UnitConversionUtils.M_TO_MI; distanceUnit = context.getString(R.string.unit_mile); } else { - totalDistance *= UnitConversions.M_TO_FT; + totalDistance *= UnitConversionUtils.M_TO_FT; distanceUnit = context.getString(R.string.unit_feet); } } @@ -259,18 +259,18 @@ public class StringUtils implements DescriptionGenerator { } TripStatistics trackStats = track.getStatistics(); - final double distanceInKm = trackStats.getTotalDistance() / 1000.0; - final double distanceInMiles = distanceInKm * UnitConversions.KM_TO_MI; + final double distanceInKm = trackStats.getTotalDistance() * UnitConversionUtils.M_TO_KM; + final double distanceInMiles = distanceInKm * UnitConversionUtils.KM_TO_MI; final long minElevationInMeters = Math.round(trackStats.getMinElevation()); final long minElevationInFeet = - Math.round(trackStats.getMinElevation() * UnitConversions.M_TO_FT); + Math.round(trackStats.getMinElevation() * UnitConversionUtils.M_TO_FT); final long maxElevationInMeters = Math.round(trackStats.getMaxElevation()); final long maxElevationInFeet = - Math.round(trackStats.getMaxElevation() * UnitConversions.M_TO_FT); + Math.round(trackStats.getMaxElevation() * UnitConversionUtils.M_TO_FT); final long elevationGainInMeters = Math.round(trackStats.getTotalElevationGain()); final long elevationGainInFeet = Math.round( - trackStats.getTotalElevationGain() * UnitConversions.M_TO_FT); + trackStats.getTotalElevationGain() * UnitConversionUtils.M_TO_FT); long minGrade = 0; long maxGrade = 0; @@ -391,8 +391,8 @@ public class StringUtils implements DescriptionGenerator { private String getSpeedString(double speed, int speedLabel, int paceLabel, boolean displaySpeed) { - double speedInKph = speed * 3.6; - double speedInMph = speedInKph * UnitConversions.KMH_TO_MPH; + double speedInKph = speed * UnitConversionUtils.MS_TO_KMH; + double speedInMph = speedInKph * UnitConversionUtils.KM_TO_MI; if (displaySpeed) { return String.format("%s: %.2f %s (%.1f %s)
", context.getString(speedLabel), @@ -424,26 +424,26 @@ public class StringUtils implements DescriptionGenerator { public String generateWaypointDescription(Waypoint waypoint) { TripStatistics stats = waypoint.getStatistics(); - final double distanceInKm = stats.getTotalDistance() / 1000.0; - final double distanceInMiles = distanceInKm * UnitConversions.KM_TO_MI; - final double averageSpeedInKmh = stats.getAverageSpeed() * 3.6; + final double distanceInKm = stats.getTotalDistance() * UnitConversionUtils.M_TO_KM; + final double distanceInMiles = distanceInKm * UnitConversionUtils.KM_TO_MI; + final double averageSpeedInKmh = stats.getAverageSpeed() * UnitConversionUtils.MS_TO_KMH; final double averageSpeedInMph = - averageSpeedInKmh * UnitConversions.KMH_TO_MPH; - final double movingSpeedInKmh = stats.getAverageMovingSpeed() * 3.6; + averageSpeedInKmh * UnitConversionUtils.KM_TO_MI; + final double movingSpeedInKmh = stats.getAverageMovingSpeed() * UnitConversionUtils.MS_TO_KMH; final double movingSpeedInMph = - movingSpeedInKmh * UnitConversions.KMH_TO_MPH; - final double maxSpeedInKmh = stats.getMaxSpeed() * 3.6; - final double maxSpeedInMph = maxSpeedInKmh * UnitConversions.KMH_TO_MPH; + movingSpeedInKmh * UnitConversionUtils.KM_TO_MI; + final double maxSpeedInKmh = stats.getMaxSpeed() * UnitConversionUtils.MS_TO_KMH; + final double maxSpeedInMph = maxSpeedInKmh * UnitConversionUtils.KM_TO_MI; final long minElevationInMeters = Math.round(stats.getMinElevation()); final long minElevationInFeet = - Math.round(stats.getMinElevation() * UnitConversions.M_TO_FT); + Math.round(stats.getMinElevation() * UnitConversionUtils.M_TO_FT); final long maxElevationInMeters = Math.round(stats.getMaxElevation()); final long maxElevationInFeet = - Math.round(stats.getMaxElevation() * UnitConversions.M_TO_FT); + Math.round(stats.getMaxElevation() * UnitConversionUtils.M_TO_FT); final long elevationGainInMeters = Math.round(stats.getTotalElevationGain()); final long elevationGainInFeet = Math.round( - stats.getTotalElevationGain() * UnitConversions.M_TO_FT); + stats.getTotalElevationGain() * UnitConversionUtils.M_TO_FT); long theMinGrade = 0; long theMaxGrade = 0; double maxGrade = stats.getMaxGrade(); diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/UnitConversionUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/UnitConversionUtils.java new file mode 100644 index 000000000..7596c9732 --- /dev/null +++ b/MyTracks/src/com/google/android/apps/mytracks/util/UnitConversionUtils.java @@ -0,0 +1,53 @@ +/* + * Copyright 2008 Google Inc. + * + * 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.google.android.apps.mytracks.util; + +/** + * Utilities for converting units. + * + * @author Sandor Dornbush + */ +public class UnitConversionUtils { + + private UnitConversionUtils() {} + + // 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; +} diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/UnitConversions.java b/MyTracks/src/com/google/android/apps/mytracks/util/UnitConversions.java deleted file mode 100644 index 8450d7b8a..000000000 --- a/MyTracks/src/com/google/android/apps/mytracks/util/UnitConversions.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2008 Google Inc. - * - * 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.google.android.apps.mytracks.util; - -/** - * Unit conversion constants. - * - * @author Sandor Dornbush - */ -public abstract class UnitConversions { - - public static final double KM_TO_MI = 0.621371192; - 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() { - } -} diff --git a/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java b/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java index 3e270441b..f94cd6f44 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java +++ b/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java @@ -26,7 +26,7 @@ import com.google.android.apps.mytracks.content.TracksColumns; import com.google.android.apps.mytracks.services.ControlRecordingService; import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.util.StringUtils; -import com.google.android.apps.mytracks.util.UnitConversions; +import com.google.android.apps.mytracks.util.UnitConversionUtils; import com.google.android.maps.mytracks.R; import android.app.PendingIntent; @@ -216,9 +216,9 @@ public class TrackWidgetProvider // TODO replace this with format strings and miles. // convert meters to kilometers - double displayDistance = stats.getTotalDistance() / 1000.0; + double displayDistance = stats.getTotalDistance() * UnitConversionUtils.M_TO_KM; if (!isMetric) { - displayDistance *= UnitConversions.KM_TO_MI; + displayDistance *= UnitConversionUtils.KM_TO_MI; } String distance = StringUtils.formatSingleDecimalPlace(displayDistance) + " " + this.distanceLabel; @@ -228,9 +228,9 @@ public class TrackWidgetProvider String speed = unknown; if (!Double.isNaN(stats.getAverageMovingSpeed())) { // Convert m/s to km/h - double displaySpeed = stats.getAverageMovingSpeed() * 3.6; + double displaySpeed = stats.getAverageMovingSpeed() * UnitConversionUtils.MS_TO_KMH; if (!isMetric) { - displaySpeed *= UnitConversions.KMH_TO_MPH; + displaySpeed *= UnitConversionUtils.KM_TO_MI; } if (reportSpeed) { speed = StringUtils.formatSingleDecimalPlace(displaySpeed) + " " + this.speedLabel;