Rename TripStatisticsBuilder to TripStatisticsUpdater.

No logic change.
This commit is contained in:
Jimmy Shih
2012-08-24 15:57:27 -07:00
parent be6fd6d633
commit 41278eb137
8 changed files with 108 additions and 108 deletions
@@ -27,7 +27,7 @@ import com.google.android.apps.mytracks.content.TrackDataListener;
import com.google.android.apps.mytracks.content.TrackDataType; import com.google.android.apps.mytracks.content.TrackDataType;
import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.stats.TripStatistics;
import com.google.android.apps.mytracks.stats.TripStatisticsBuilder; import com.google.android.apps.mytracks.stats.TripStatisticsUpdater;
import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.LocationUtils;
import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.UnitConversions; import com.google.android.apps.mytracks.util.UnitConversions;
@@ -61,7 +61,7 @@ public class ChartFragment extends Fragment implements TrackDataListener {
private TrackDataHub trackDataHub; private TrackDataHub trackDataHub;
// Stats gathered from the received data // Stats gathered from the received data
private TripStatisticsBuilder tripStatisticsBuilder; private TripStatisticsUpdater tripStatisticsUpdater;
private long startTime; private long startTime;
private boolean metricUnits = PreferencesUtils.METRIC_UNITS_DEFAULT; private boolean metricUnits = PreferencesUtils.METRIC_UNITS_DEFAULT;
@@ -190,7 +190,7 @@ public class ChartFragment extends Fragment implements TrackDataListener {
@Override @Override
public void clearTrackPoints() { public void clearTrackPoints() {
if (isResumed()) { if (isResumed()) {
tripStatisticsBuilder = startTime != -1L ? new TripStatisticsBuilder(startTime) : null; tripStatisticsUpdater = startTime != -1L ? new TripStatisticsUpdater(startTime) : null;
pendingPoints.clear(); pendingPoints.clear();
chartView.reset(); chartView.reset();
getActivity().runOnUiThread(new Runnable() { getActivity().runOnUiThread(new Runnable() {
@@ -454,9 +454,9 @@ public class ChartFragment extends Fragment implements TrackDataListener {
double cadence = Double.NaN; double cadence = Double.NaN;
double power = Double.NaN; double power = Double.NaN;
if (tripStatisticsBuilder != null) { if (tripStatisticsUpdater != null) {
tripStatisticsBuilder.addLocation(location, minRecordingDistance); tripStatisticsUpdater.addLocation(location, minRecordingDistance);
TripStatistics tripStatistics = tripStatisticsBuilder.getTripStatistics(); TripStatistics tripStatistics = tripStatisticsUpdater.getTripStatistics();
if (chartByDistance) { if (chartByDistance) {
double distance = tripStatistics.getTotalDistance() * UnitConversions.M_TO_KM; double distance = tripStatistics.getTotalDistance() * UnitConversions.M_TO_KM;
if (!metricUnits) { if (!metricUnits) {
@@ -467,12 +467,12 @@ public class ChartFragment extends Fragment implements TrackDataListener {
timeOrDistance = tripStatistics.getTotalTime(); timeOrDistance = tripStatistics.getTotalTime();
} }
elevation = tripStatisticsBuilder.getSmoothedElevation(); elevation = tripStatisticsUpdater.getSmoothedElevation();
if (!metricUnits) { if (!metricUnits) {
elevation *= UnitConversions.M_TO_FT; elevation *= UnitConversions.M_TO_FT;
} }
speed = tripStatisticsBuilder.getSmoothedSpeed() * UnitConversions.MS_TO_KMH; speed = tripStatisticsUpdater.getSmoothedSpeed() * UnitConversions.MS_TO_KMH;
if (!metricUnits) { if (!metricUnits) {
speed *= UnitConversions.KM_TO_MI; speed *= UnitConversions.KM_TO_MI;
} }
@@ -515,8 +515,8 @@ public class ChartFragment extends Fragment implements TrackDataListener {
} }
@VisibleForTesting @VisibleForTesting
void setTripStatisticsBuilder(long time) { void setTripStatisticsUpdater(long time) {
tripStatisticsBuilder = new TripStatisticsBuilder(time); tripStatisticsUpdater = new TripStatisticsUpdater(time);
} }
@VisibleForTesting @VisibleForTesting
@@ -18,7 +18,7 @@ package com.google.android.apps.mytracks.io.file;
import com.google.android.apps.mytracks.Constants; 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.TripStatisticsBuilder; import com.google.android.apps.mytracks.stats.TripStatisticsUpdater;
import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.LocationUtils;
import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.StringUtils; import com.google.android.apps.mytracks.util.StringUtils;
@@ -106,9 +106,9 @@ public class GpxImporter extends DefaultHandler {
private Track track; private Track track;
/** /**
* Statistics builder for the current track. * Trip statistics updater for the current track.
*/ */
private TripStatisticsBuilder tripStatisticsBuilder; private TripStatisticsUpdater tripStatisticsUpdater;
/** /**
* Buffer of locations to be bulk-inserted into the database. * Buffer of locations to be bulk-inserted into the database.
@@ -301,20 +301,20 @@ public class GpxImporter extends DefaultHandler {
flushPoints(); flushPoints();
// Calculate statistics for the imported track // Calculate statistics for the imported track
tripStatisticsBuilder.updateTime(lastLocation.getTime()); tripStatisticsUpdater.updateTime(lastLocation.getTime());
track.setStopId(getLastPointId()); track.setStopId(getLastPointId());
} else { } else {
tripStatisticsBuilder = new TripStatisticsBuilder(0L); tripStatisticsUpdater = new TripStatisticsUpdater(0L);
tripStatisticsBuilder.updateTime(0L); tripStatisticsUpdater.updateTime(0L);
} }
track.setTripStatistics(tripStatisticsBuilder.getTripStatistics()); track.setTripStatistics(tripStatisticsUpdater.getTripStatistics());
track.setNumberOfPoints(numberOfLocations); track.setNumberOfPoints(numberOfLocations);
myTracksProviderUtils.updateTrack(track); myTracksProviderUtils.updateTrack(track);
tracksIds.add(track.getId()); tracksIds.add(track.getId());
isCurrentTrackRollbackable = false; isCurrentTrackRollbackable = false;
lastSegmentLocation = null; lastSegmentLocation = null;
lastLocation = null; lastLocation = null;
tripStatisticsBuilder = null; tripStatisticsUpdater = null;
} }
/** /**
@@ -377,11 +377,11 @@ public class GpxImporter extends DefaultHandler {
*/ */
private void onTrackPointElementEnd() throws SAXException { private void onTrackPointElementEnd() throws SAXException {
if (LocationUtils.isValidLocation(location)) { if (LocationUtils.isValidLocation(location)) {
if (tripStatisticsBuilder == null) { if (tripStatisticsUpdater == null) {
// first point did not have a time, start stats builder without it // first point did not have a time, start stats builder without it
tripStatisticsBuilder = new TripStatisticsBuilder(0); tripStatisticsUpdater = new TripStatisticsUpdater(0);
} }
tripStatisticsBuilder.addLocation(location, PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT); tripStatisticsUpdater.addLocation(location, PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT);
// insert in db // insert in db
insertPoint(location); insertPoint(location);
@@ -448,8 +448,8 @@ public class GpxImporter extends DefaultHandler {
location.setTime(time); location.setTime(time);
// initialize start time with time of first track point // initialize start time with time of first track point
if (tripStatisticsBuilder == null) { if (tripStatisticsUpdater == null) {
tripStatisticsBuilder = new TripStatisticsBuilder(time); tripStatisticsUpdater = new TripStatisticsUpdater(time);
} }
} }
@@ -10,7 +10,7 @@ import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.io.sendtogoogle.AbstractSendAsyncTask; import com.google.android.apps.mytracks.io.sendtogoogle.AbstractSendAsyncTask;
import com.google.android.apps.mytracks.io.sendtogoogle.SendToGoogleUtils; import com.google.android.apps.mytracks.io.sendtogoogle.SendToGoogleUtils;
import com.google.android.apps.mytracks.stats.TripStatisticsBuilder; import com.google.android.apps.mytracks.stats.TripStatisticsUpdater;
import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.ApiAdapterFactory;
import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.LocationUtils;
import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.apps.mytracks.util.PreferencesUtils;
@@ -224,7 +224,7 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask {
int elevationSamplingFrequency = Math.max(1, (int) (count / 250.0)); int elevationSamplingFrequency = Math.max(1, (int) (count / 250.0));
Vector<Double> distances = new Vector<Double>(); Vector<Double> distances = new Vector<Double>();
Vector<Double> elevations = new Vector<Double>(); Vector<Double> elevations = new Vector<Double>();
TripStatisticsBuilder tripStatisticsBuilder = new TripStatisticsBuilder( TripStatisticsUpdater tripStatisticsUpdater = new TripStatisticsUpdater(
track.getTripStatistics().getStartTime()); track.getTripStatistics().getStartTime());
int minRecordingDistance = PreferencesUtils.getInt(context, int minRecordingDistance = PreferencesUtils.getInt(context,
R.string.min_recording_distance_key, PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT); R.string.min_recording_distance_key, PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT);
@@ -244,10 +244,10 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask {
} }
} }
tripStatisticsBuilder.addLocation(location, minRecordingDistance); tripStatisticsUpdater.addLocation(location, minRecordingDistance);
if (i % elevationSamplingFrequency == 0) { if (i % elevationSamplingFrequency == 0) {
distances.add(tripStatisticsBuilder.getTripStatistics().getTotalDistance()); distances.add(tripStatisticsUpdater.getTripStatistics().getTotalDistance());
elevations.add(tripStatisticsBuilder.getSmoothedElevation()); elevations.add(tripStatisticsUpdater.getSmoothedElevation());
} }
if (LocationUtils.isValidLocation(location)) { if (LocationUtils.isValidLocation(location)) {
lastLocation = location; lastLocation = location;
@@ -273,8 +273,8 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask {
// Create an end marker // Create an end marker
if (lastLocation != null) { if (lastLocation != null) {
distances.add(tripStatisticsBuilder.getTripStatistics().getTotalDistance()); distances.add(tripStatisticsUpdater.getTripStatistics().getTotalDistance());
elevations.add(tripStatisticsBuilder.getSmoothedElevation()); elevations.add(tripStatisticsUpdater.getSmoothedElevation());
DescriptionGenerator descriptionGenerator = new DescriptionGeneratorImpl(context); DescriptionGenerator descriptionGenerator = new DescriptionGeneratorImpl(context);
track.setDescription( track.setDescription(
descriptionGenerator.generateTrackDescription(track, distances, elevations, true)); descriptionGenerator.generateTrackDescription(track, distances, elevations, true));
@@ -28,7 +28,7 @@ import com.google.android.apps.mytracks.io.gdata.maps.MapsGDataConverter;
import com.google.android.apps.mytracks.io.gdata.maps.XmlMapsGDataParserFactory; import com.google.android.apps.mytracks.io.gdata.maps.XmlMapsGDataParserFactory;
import com.google.android.apps.mytracks.io.sendtogoogle.AbstractSendAsyncTask; import com.google.android.apps.mytracks.io.sendtogoogle.AbstractSendAsyncTask;
import com.google.android.apps.mytracks.io.sendtogoogle.SendToGoogleUtils; import com.google.android.apps.mytracks.io.sendtogoogle.SendToGoogleUtils;
import com.google.android.apps.mytracks.stats.TripStatisticsBuilder; import com.google.android.apps.mytracks.stats.TripStatisticsUpdater;
import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.LocationUtils;
import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.common.gdata.AndroidXmlParserFactory; import com.google.android.common.gdata.AndroidXmlParserFactory;
@@ -267,7 +267,7 @@ public class SendMapsAsyncTask extends AbstractSendAsyncTask {
int elevationSamplingFrequency = Math.max(1, (int) (count / 250.0)); int elevationSamplingFrequency = Math.max(1, (int) (count / 250.0));
Vector<Double> distances = new Vector<Double>(); Vector<Double> distances = new Vector<Double>();
Vector<Double> elevations = new Vector<Double>(); Vector<Double> elevations = new Vector<Double>();
TripStatisticsBuilder tripStatisticsBuilder = new TripStatisticsBuilder( TripStatisticsUpdater tripStatisticsUpdater = new TripStatisticsUpdater(
track.getTripStatistics().getStartTime()); track.getTripStatistics().getStartTime());
int minRecordingDistance = PreferencesUtils.getInt(context, int minRecordingDistance = PreferencesUtils.getInt(context,
R.string.min_recording_distance_key, PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT); R.string.min_recording_distance_key, PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT);
@@ -287,10 +287,10 @@ public class SendMapsAsyncTask extends AbstractSendAsyncTask {
} }
} }
tripStatisticsBuilder.addLocation(location, minRecordingDistance); tripStatisticsUpdater.addLocation(location, minRecordingDistance);
if (i % elevationSamplingFrequency == 0) { if (i % elevationSamplingFrequency == 0) {
distances.add(tripStatisticsBuilder.getTripStatistics().getTotalDistance()); distances.add(tripStatisticsUpdater.getTripStatistics().getTotalDistance());
elevations.add(tripStatisticsBuilder.getSmoothedElevation()); elevations.add(tripStatisticsUpdater.getSmoothedElevation());
} }
if (LocationUtils.isValidLocation(location)) { if (LocationUtils.isValidLocation(location)) {
lastLocation = location; lastLocation = location;
@@ -316,8 +316,8 @@ public class SendMapsAsyncTask extends AbstractSendAsyncTask {
// Create an end marker // Create an end marker
if (lastLocation != null) { if (lastLocation != null) {
distances.add(tripStatisticsBuilder.getTripStatistics().getTotalDistance()); distances.add(tripStatisticsUpdater.getTripStatistics().getTotalDistance());
elevations.add(tripStatisticsBuilder.getSmoothedElevation()); elevations.add(tripStatisticsUpdater.getSmoothedElevation());
DescriptionGenerator descriptionGenerator = new DescriptionGeneratorImpl(context); DescriptionGenerator descriptionGenerator = new DescriptionGeneratorImpl(context);
track.setDescription( track.setDescription(
descriptionGenerator.generateTrackDescription(track, distances, elevations, true)); descriptionGenerator.generateTrackDescription(track, distances, elevations, true));
@@ -36,7 +36,7 @@ import com.google.android.apps.mytracks.services.tasks.AnnouncementPeriodicTaskF
import com.google.android.apps.mytracks.services.tasks.PeriodicTaskExecutor; import com.google.android.apps.mytracks.services.tasks.PeriodicTaskExecutor;
import com.google.android.apps.mytracks.services.tasks.SplitPeriodicTaskFactory; import com.google.android.apps.mytracks.services.tasks.SplitPeriodicTaskFactory;
import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.stats.TripStatistics;
import com.google.android.apps.mytracks.stats.TripStatisticsBuilder; import com.google.android.apps.mytracks.stats.TripStatisticsUpdater;
import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.IntentUtils;
import com.google.android.apps.mytracks.util.LocationUtils; import com.google.android.apps.mytracks.util.LocationUtils;
import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.apps.mytracks.util.PreferencesUtils;
@@ -110,8 +110,8 @@ public class TrackRecordingService extends Service {
private long currentRecordingInterval; private long currentRecordingInterval;
// The following variables are set when recording: // The following variables are set when recording:
private TripStatisticsBuilder trackTripStatisticsBuilder; private TripStatisticsUpdater trackTripStatisticsUpdater;
private TripStatisticsBuilder markerTripStatisticsBuilder; private TripStatisticsUpdater markerTripStatisticsUpdater;
private WakeLock wakeLock; private WakeLock wakeLock;
private SensorManager sensorManager; private SensorManager sensorManager;
private Location lastLocation; private Location lastLocation;
@@ -397,10 +397,10 @@ public class TrackRecordingService extends Service {
* Gets the trip statistics. * Gets the trip statistics.
*/ */
public TripStatistics getTripStatistics() { public TripStatistics getTripStatistics() {
if (trackTripStatisticsBuilder == null) { if (trackTripStatisticsUpdater == null) {
return null; return null;
} }
return trackTripStatisticsBuilder.getTripStatistics(); return trackTripStatisticsUpdater.getTripStatistics();
} }
/** /**
@@ -433,9 +433,9 @@ public class TrackRecordingService extends Service {
String description; String description;
if (isStatistics) { if (isStatistics) {
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
markerTripStatisticsBuilder.updateTime(now); markerTripStatisticsUpdater.updateTime(now);
tripStatistics = markerTripStatisticsBuilder.getTripStatistics(); tripStatistics = markerTripStatisticsUpdater.getTripStatistics();
markerTripStatisticsBuilder = new TripStatisticsBuilder(now); markerTripStatisticsUpdater = new TripStatisticsUpdater(now);
description = new DescriptionGeneratorImpl(this).generateWaypointDescription(tripStatistics); description = new DescriptionGeneratorImpl(this).generateWaypointDescription(tripStatistics);
} else { } else {
tripStatistics = null; tripStatistics = null;
@@ -454,8 +454,8 @@ public class TrackRecordingService extends Service {
double length; double length;
Location lastTrackPoint = myTracksProviderUtils.getLastTrackPoint(recordingTrackId); Location lastTrackPoint = myTracksProviderUtils.getLastTrackPoint(recordingTrackId);
if (currentSegmentHasLocation && LocationUtils.isValidLocation(lastTrackPoint) if (currentSegmentHasLocation && LocationUtils.isValidLocation(lastTrackPoint)
&& trackTripStatisticsBuilder != null) { && trackTripStatisticsUpdater != null) {
TripStatistics stats = trackTripStatisticsBuilder.getTripStatistics(); TripStatistics stats = trackTripStatisticsUpdater.getTripStatistics();
length = stats.getTotalDistance(); length = stats.getTotalDistance();
duration = stats.getTotalTime(); duration = stats.getTotalTime();
} else { } else {
@@ -557,8 +557,8 @@ public class TrackRecordingService extends Service {
return -1L; return -1L;
} }
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
trackTripStatisticsBuilder = new TripStatisticsBuilder(now); trackTripStatisticsUpdater = new TripStatisticsUpdater(now);
markerTripStatisticsBuilder = new TripStatisticsBuilder(now); markerTripStatisticsUpdater = new TripStatisticsUpdater(now);
// Insert a track // Insert a track
Track track = new Track(); Track track = new Track();
@@ -574,7 +574,7 @@ public class TrackRecordingService extends Service {
track.setName(TrackNameUtils.getTrackName(this, trackId, now, null)); track.setName(TrackNameUtils.getTrackName(this, trackId, now, null));
track.setCategory(PreferencesUtils.getString( track.setCategory(PreferencesUtils.getString(
this, R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT)); this, R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT));
track.setTripStatistics(trackTripStatisticsBuilder.getTripStatistics()); track.setTripStatistics(trackTripStatisticsUpdater.getTripStatistics());
myTracksProviderUtils.updateTrack(track); myTracksProviderUtils.updateTrack(track);
insertWaypoint(WaypointCreationRequest.DEFAULT_START_TRACK); insertWaypoint(WaypointCreationRequest.DEFAULT_START_TRACK);
@@ -591,7 +591,7 @@ public class TrackRecordingService extends Service {
Log.d(TAG, "Restarting track: " + track.getId()); Log.d(TAG, "Restarting track: " + track.getId());
TripStatistics tripStatistics = track.getTripStatistics(); TripStatistics tripStatistics = track.getTripStatistics();
trackTripStatisticsBuilder = new TripStatisticsBuilder(tripStatistics.getStartTime()); trackTripStatisticsUpdater = new TripStatisticsUpdater(tripStatistics.getStartTime());
long markerStartTime; long markerStartTime;
Waypoint waypoint = myTracksProviderUtils.getLastStatisticsWaypoint(recordingTrackId); Waypoint waypoint = myTracksProviderUtils.getLastStatisticsWaypoint(recordingTrackId);
@@ -600,7 +600,7 @@ public class TrackRecordingService extends Service {
} else { } else {
markerStartTime = tripStatistics.getStartTime(); markerStartTime = tripStatistics.getStartTime();
} }
markerTripStatisticsBuilder = new TripStatisticsBuilder(markerStartTime); markerTripStatisticsUpdater = new TripStatisticsUpdater(markerStartTime);
Cursor cursor = null; Cursor cursor = null;
try { try {
@@ -613,9 +613,9 @@ public class TrackRecordingService extends Service {
if (cursor.moveToLast()) { if (cursor.moveToLast()) {
do { do {
Location location = myTracksProviderUtils.createTrackPoint(cursor); Location location = myTracksProviderUtils.createTrackPoint(cursor);
trackTripStatisticsBuilder.addLocation(location, minRecordingDistance); trackTripStatisticsUpdater.addLocation(location, minRecordingDistance);
if (location.getTime() > markerStartTime) { if (location.getTime() > markerStartTime) {
markerTripStatisticsBuilder.addLocation(location, minRecordingDistance); markerTripStatisticsUpdater.addLocation(location, minRecordingDistance);
} }
} while (cursor.moveToPrevious()); } while (cursor.moveToPrevious());
} }
@@ -884,8 +884,8 @@ public class TrackRecordingService extends Service {
try { try {
Uri uri = myTracksProviderUtils.insertTrackPoint(location, track.getId()); Uri uri = myTracksProviderUtils.insertTrackPoint(location, track.getId());
long trackPointId = Long.parseLong(uri.getLastPathSegment()); long trackPointId = Long.parseLong(uri.getLastPathSegment());
trackTripStatisticsBuilder.addLocation(location, minRecordingDistance); trackTripStatisticsUpdater.addLocation(location, minRecordingDistance);
markerTripStatisticsBuilder.addLocation(location, minRecordingDistance); markerTripStatisticsUpdater.addLocation(location, minRecordingDistance);
updateRecordingTrack(track, trackPointId, LocationUtils.isValidLocation(location)); updateRecordingTrack(track, trackPointId, LocationUtils.isValidLocation(location));
} catch (SQLiteException e) { } catch (SQLiteException e) {
/* /*
@@ -911,8 +911,8 @@ public class TrackRecordingService extends Service {
track.setNumberOfPoints(track.getNumberOfPoints() + 1); track.setNumberOfPoints(track.getNumberOfPoints() + 1);
} }
trackTripStatisticsBuilder.updateTime(System.currentTimeMillis()); trackTripStatisticsUpdater.updateTime(System.currentTimeMillis());
track.setTripStatistics(trackTripStatisticsBuilder.getTripStatistics()); track.setTripStatistics(trackTripStatisticsUpdater.getTripStatistics());
myTracksProviderUtils.updateTrack(track); myTracksProviderUtils.updateTrack(track);
} }
@@ -27,14 +27,14 @@ import android.location.Location;
import android.util.Log; import android.util.Log;
/** /**
* Builder for {@link TripStatistics}. For keeping track statistics as new * Updater for {@link TripStatistics}. For updating track trip statistics as new
* locations are added. Note that some of the locations represent pause/resume * locations are added. Note that some of the locations represent pause/resume
* separator. * separator.
* *
* @author Sandor Dornbush * @author Sandor Dornbush
* @author Rodrigo Damazio * @author Rodrigo Damazio
*/ */
public class TripStatisticsBuilder { public class TripStatisticsUpdater {
// The track's trip statistics // The track's trip statistics
private final TripStatistics tripStatistics; private final TripStatistics tripStatistics;
@@ -62,11 +62,11 @@ public class TripStatisticsBuilder {
private final DoubleBuffer gradeBuffer = new DoubleBuffer(Constants.GRADE_SMOOTHING_FACTOR); private final DoubleBuffer gradeBuffer = new DoubleBuffer(Constants.GRADE_SMOOTHING_FACTOR);
/** /**
* Creates a new trip statistics builder. * Creates a new trip statistics updater.
* *
* @param startTime the start time * @param startTime the start time
*/ */
public TripStatisticsBuilder(long startTime) { public TripStatisticsUpdater(long startTime) {
tripStatistics = init(startTime); tripStatistics = init(startTime);
currentSegment = init(startTime); currentSegment = init(startTime);
} }
@@ -41,7 +41,7 @@ public class ChartFragmentTest extends AndroidTestCase {
protected void setUp() throws Exception { protected void setUp() throws Exception {
chartFragment = new ChartFragment(); chartFragment = new ChartFragment();
chartFragment.setChartView(new ChartView(getContext())); chartFragment.setChartView(new ChartView(getContext()));
chartFragment.setTripStatisticsBuilder(TrackStubUtils.INITIAL_TIME); chartFragment.setTripStatisticsUpdater(TrackStubUtils.INITIAL_TIME);
} }
/** /**
@@ -10,28 +10,28 @@ import android.location.Location;
import junit.framework.TestCase; import junit.framework.TestCase;
/** /**
* Tests {@link TripStatisticsBuilder}. * Tests {@link TripStatisticsUpdater}.
* *
* @author Sandor Dornbush * @author Sandor Dornbush
*/ */
public class TripStatisticsBuilderTest extends TestCase { public class TripStatisticsUpdaterTest extends TestCase {
private static final long ONE_SECOND = 1000; private static final long ONE_SECOND = 1000;
private static final long TEN_SECONDS = 10 * ONE_SECOND; private static final long TEN_SECONDS = 10 * ONE_SECOND;
private TripStatisticsBuilder tripStatisticsBuilder = null; private TripStatisticsUpdater tripStatisticsUpdater = null;
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
tripStatisticsBuilder = new TripStatisticsBuilder(System.currentTimeMillis()); tripStatisticsUpdater = new TripStatisticsUpdater(System.currentTimeMillis());
} }
public void testAddLocationSimple() throws Exception { public void testAddLocationSimple() throws Exception {
long startTime = 1000; long startTime = 1000;
tripStatisticsBuilder = new TripStatisticsBuilder(startTime); tripStatisticsUpdater = new TripStatisticsUpdater(startTime);
TripStatistics tripStatistics = tripStatisticsBuilder.getTripStatistics(); TripStatistics tripStatistics = tripStatisticsUpdater.getTripStatistics();
assertEquals(0.0, tripStatisticsBuilder.getSmoothedElevation()); assertEquals(0.0, tripStatisticsUpdater.getSmoothedElevation());
assertEquals(Double.POSITIVE_INFINITY, tripStatistics.getMinElevation()); assertEquals(Double.POSITIVE_INFINITY, tripStatistics.getMinElevation());
assertEquals(Double.NEGATIVE_INFINITY, tripStatistics.getMaxElevation()); assertEquals(Double.NEGATIVE_INFINITY, tripStatistics.getMaxElevation());
assertEquals(0.0, tripStatistics.getMaxSpeed()); assertEquals(0.0, tripStatistics.getMaxSpeed());
@@ -57,12 +57,12 @@ public class TripStatisticsBuilderTest extends TestCase {
// Each time slice is 10 seconds. // Each time slice is 10 seconds.
location.setTime(startTime + i * TEN_SECONDS); location.setTime(startTime + i * TEN_SECONDS);
tripStatisticsBuilder.addLocation(location, PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT); tripStatisticsUpdater.addLocation(location, PreferencesUtils.MIN_RECORDING_DISTANCE_DEFAULT);
tripStatistics = tripStatisticsBuilder.getTripStatistics(); tripStatistics = tripStatisticsUpdater.getTripStatistics();
assertEquals(i * TEN_SECONDS, tripStatistics.getTotalTime()); assertEquals(i * TEN_SECONDS, tripStatistics.getTotalTime());
assertEquals(i * TEN_SECONDS, tripStatistics.getMovingTime()); assertEquals(i * TEN_SECONDS, tripStatistics.getMovingTime());
assertEquals(i, tripStatisticsBuilder.getSmoothedElevation(), assertEquals(i, tripStatisticsUpdater.getSmoothedElevation(),
Constants.ELEVATION_SMOOTHING_FACTOR / 2); Constants.ELEVATION_SMOOTHING_FACTOR / 2);
assertEquals(0.0, tripStatistics.getMinElevation()); assertEquals(0.0, tripStatistics.getMinElevation());
assertEquals(i, tripStatistics.getMaxElevation(), Constants.ELEVATION_SMOOTHING_FACTOR / 2); assertEquals(i, tripStatistics.getMaxElevation(), Constants.ELEVATION_SMOOTHING_FACTOR / 2);
@@ -81,17 +81,17 @@ public class TripStatisticsBuilderTest extends TestCase {
} }
/** /**
* Tests {@link TripStatisticsBuilder#updateElevation(double)} with constant * Tests {@link TripStatisticsUpdater#updateElevation(double)} with constant
* elevations. * elevations.
*/ */
public void testElevationSimple() throws Exception { public void testElevationSimple() throws Exception {
for (double elevation = 0; elevation < 1000; elevation += 10) { for (double elevation = 0; elevation < 1000; elevation += 10) {
tripStatisticsBuilder = new TripStatisticsBuilder(System.currentTimeMillis()); tripStatisticsUpdater = new TripStatisticsUpdater(System.currentTimeMillis());
for (int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++) {
assertEquals(0.0, tripStatisticsBuilder.updateElevation(elevation)); assertEquals(0.0, tripStatisticsUpdater.updateElevation(elevation));
assertEquals(elevation, tripStatisticsBuilder.getSmoothedElevation()); assertEquals(elevation, tripStatisticsUpdater.getSmoothedElevation());
TripStatistics tripStatistics = tripStatisticsBuilder.getTripStatistics(); TripStatistics tripStatistics = tripStatisticsUpdater.getTripStatistics();
assertEquals(elevation, tripStatistics.getMinElevation()); assertEquals(elevation, tripStatistics.getMinElevation());
assertEquals(elevation, tripStatistics.getMaxElevation()); assertEquals(elevation, tripStatistics.getMaxElevation());
assertEquals(0.0, tripStatistics.getTotalElevationGain()); assertEquals(0.0, tripStatistics.getTotalElevationGain());
@@ -100,7 +100,7 @@ public class TripStatisticsBuilderTest extends TestCase {
} }
/** /**
* Tests {@link TripStatisticsBuilder#updateGrade(double, double)} with * Tests {@link TripStatisticsUpdater#updateGrade(double, double)} with
* elevation gain. * elevation gain.
*/ */
public void testElevationGain() throws Exception { public void testElevationGain() throws Exception {
@@ -113,11 +113,11 @@ public class TripStatisticsBuilderTest extends TestCase {
} else { } else {
expectedGain = 1.0; expectedGain = 1.0;
} }
assertEquals(expectedGain, tripStatisticsBuilder.updateElevation(i)); assertEquals(expectedGain, tripStatisticsUpdater.updateElevation(i));
assertEquals(i, tripStatisticsBuilder.getSmoothedElevation(), assertEquals(i, tripStatisticsUpdater.getSmoothedElevation(),
Constants.ELEVATION_SMOOTHING_FACTOR / 2); Constants.ELEVATION_SMOOTHING_FACTOR / 2);
TripStatistics data = tripStatisticsBuilder.getTripStatistics(); TripStatistics data = tripStatisticsUpdater.getTripStatistics();
assertEquals(0.0, data.getMinElevation()); assertEquals(0.0, data.getMinElevation());
assertEquals(i, data.getMaxElevation(), Constants.ELEVATION_SMOOTHING_FACTOR / 2); assertEquals(i, data.getMaxElevation(), Constants.ELEVATION_SMOOTHING_FACTOR / 2);
assertEquals(i, data.getTotalElevationGain(), Constants.ELEVATION_SMOOTHING_FACTOR); assertEquals(i, data.getTotalElevationGain(), Constants.ELEVATION_SMOOTHING_FACTOR);
@@ -125,7 +125,7 @@ public class TripStatisticsBuilderTest extends TestCase {
} }
/** /**
* Tests {@link TripStatisticsBuilder#updateGrade(double, double)} with grade * Tests {@link TripStatisticsUpdater#updateGrade(double, double)} with grade
* of 1 and -1. * of 1 and -1.
*/ */
public void testGradeSimple() throws Exception { public void testGradeSimple() throws Exception {
@@ -134,11 +134,11 @@ public class TripStatisticsBuilderTest extends TestCase {
* The value of the elevation does not matter. This is just to fill the * The value of the elevation does not matter. This is just to fill the
* elevation buffer. * elevation buffer.
*/ */
tripStatisticsBuilder.updateElevation(i); tripStatisticsUpdater.updateElevation(i);
tripStatisticsBuilder.updateGrade(100, 100); tripStatisticsUpdater.updateGrade(100, 100);
if (i >= Constants.GRADE_SMOOTHING_FACTOR && i >= Constants.ELEVATION_SMOOTHING_FACTOR) { if (i >= Constants.GRADE_SMOOTHING_FACTOR && i >= Constants.ELEVATION_SMOOTHING_FACTOR) {
assertEquals(1.0, tripStatisticsBuilder.getTripStatistics().getMaxGrade()); assertEquals(1.0, tripStatisticsUpdater.getTripStatistics().getMaxGrade());
assertEquals(1.0, tripStatisticsBuilder.getTripStatistics().getMinGrade()); assertEquals(1.0, tripStatisticsUpdater.getTripStatistics().getMinGrade());
} }
} }
for (double i = 0; i < 1000; i++) { for (double i = 0; i < 1000; i++) {
@@ -146,17 +146,17 @@ public class TripStatisticsBuilderTest extends TestCase {
* The value of the elevation does not matter. This is just to fill the * The value of the elevation does not matter. This is just to fill the
* elevation buffer. * elevation buffer.
*/ */
tripStatisticsBuilder.updateElevation(i); tripStatisticsUpdater.updateElevation(i);
tripStatisticsBuilder.updateGrade(100, -100); tripStatisticsUpdater.updateGrade(100, -100);
if (i >= Constants.GRADE_SMOOTHING_FACTOR && i >= Constants.ELEVATION_SMOOTHING_FACTOR) { if (i >= Constants.GRADE_SMOOTHING_FACTOR && i >= Constants.ELEVATION_SMOOTHING_FACTOR) {
assertEquals(1.0, tripStatisticsBuilder.getTripStatistics().getMaxGrade()); assertEquals(1.0, tripStatisticsUpdater.getTripStatistics().getMaxGrade());
assertEquals(-1.0, tripStatisticsBuilder.getTripStatistics().getMinGrade()); assertEquals(-1.0, tripStatisticsUpdater.getTripStatistics().getMinGrade());
} }
} }
} }
/** /**
* Tests {@link TripStatisticsBuilder#updateGrade(double, double)} with * Tests {@link TripStatisticsUpdater#updateGrade(double, double)} with
* distance of 1. The grade should get ignored. * distance of 1. The grade should get ignored.
*/ */
public void testGradeIgnoreShort() throws Exception { public void testGradeIgnoreShort() throws Exception {
@@ -165,56 +165,56 @@ public class TripStatisticsBuilderTest extends TestCase {
* The value of the elevation does not matter. This is just to fill the * The value of the elevation does not matter. This is just to fill the
* elevation buffer. * elevation buffer.
*/ */
tripStatisticsBuilder.updateElevation(i); tripStatisticsUpdater.updateElevation(i);
tripStatisticsBuilder.updateGrade(1, 100); tripStatisticsUpdater.updateGrade(1, 100);
assertEquals( assertEquals(
Double.NEGATIVE_INFINITY, tripStatisticsBuilder.getTripStatistics().getMaxGrade()); Double.NEGATIVE_INFINITY, tripStatisticsUpdater.getTripStatistics().getMaxGrade());
assertEquals( assertEquals(
Double.POSITIVE_INFINITY, tripStatisticsBuilder.getTripStatistics().getMinGrade()); Double.POSITIVE_INFINITY, tripStatisticsUpdater.getTripStatistics().getMinGrade());
} }
} }
/** /**
* Tests {@link TripStatisticsBuilder#updateSpeed(long, double, long, double)} * Tests {@link TripStatisticsUpdater#updateSpeed(long, double, long, double)}
* with speed of zero. * with speed of zero.
*/ */
public void testUpdateSpeedIncludeZero() { public void testUpdateSpeedIncludeZero() {
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {
tripStatisticsBuilder.updateSpeed(i + ONE_SECOND, 0.0, i, 4.0); tripStatisticsUpdater.updateSpeed(i + ONE_SECOND, 0.0, i, 4.0);
assertEquals(0.0, tripStatisticsBuilder.getTripStatistics().getMaxSpeed()); assertEquals(0.0, tripStatisticsUpdater.getTripStatistics().getMaxSpeed());
} }
} }
/** /**
* Tests {@link TripStatisticsBuilder#updateSpeed(long, double, long, double)} * Tests {@link TripStatisticsUpdater#updateSpeed(long, double, long, double)}
* with the error code 128. The speed should get ignored. * with the error code 128. The speed should get ignored.
*/ */
public void testUpdateSpeedIngoreErrorCode() { public void testUpdateSpeedIngoreErrorCode() {
long time = 12344000; long time = 12344000;
tripStatisticsBuilder.updateSpeed(time + ONE_SECOND, 128.0, time, 0.0); tripStatisticsUpdater.updateSpeed(time + ONE_SECOND, 128.0, time, 0.0);
assertEquals(0.0, tripStatisticsBuilder.getTripStatistics().getMaxSpeed()); assertEquals(0.0, tripStatisticsUpdater.getTripStatistics().getMaxSpeed());
} }
/** /**
* Tests {@link TripStatisticsBuilder#updateSpeed(long, double, long, double)} * Tests {@link TripStatisticsUpdater#updateSpeed(long, double, long, double)}
* with a large speed change. The speed should get ignored. * with a large speed change. The speed should get ignored.
*/ */
public void testUpdateSpeedIngoreLargeAcceleration() { public void testUpdateSpeedIngoreLargeAcceleration() {
long time = 12344000; long time = 12344000;
tripStatisticsBuilder.updateSpeed(time + ONE_SECOND, 100.0, time, 1.0); tripStatisticsUpdater.updateSpeed(time + ONE_SECOND, 100.0, time, 1.0);
assertEquals(0.0, tripStatisticsBuilder.getTripStatistics().getMaxSpeed()); assertEquals(0.0, tripStatisticsUpdater.getTripStatistics().getMaxSpeed());
} }
/** /**
* Tests {@link TripStatisticsBuilder#updateSpeed(long, double, long, double)} * Tests {@link TripStatisticsUpdater#updateSpeed(long, double, long, double)}
* with constant speed. * with constant speed.
*/ */
public void testUpdateSpeed() { public void testUpdateSpeed() {
double speed = 4.0; double speed = 4.0;
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {
tripStatisticsBuilder.updateSpeed(i + ONE_SECOND, speed, i, speed); tripStatisticsUpdater.updateSpeed(i + ONE_SECOND, speed, i, speed);
if (i >= Constants.SPEED_SMOOTHING_FACTOR) { if (i >= Constants.SPEED_SMOOTHING_FACTOR) {
assertEquals(speed, tripStatisticsBuilder.getTripStatistics().getMaxSpeed()); assertEquals(speed, tripStatisticsUpdater.getTripStatistics().getMaxSpeed());
} }
} }
} }