diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java
index e6567e10b..31f6010b8 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java
@@ -427,7 +427,7 @@ public class TrackRecordingService extends Service implements LocationListener {
lastValidLocation = null;
Waypoint waypoint = providerUtils.getFirstWaypoint(recordingTrackId);
- if (waypoint != null) {
+ if (waypoint != null && waypoint.getStatistics() != null) {
currentWaypointId = waypoint.getId();
waypointStatsBuilder = new TripStatisticsBuilder(
waypoint.getStatistics());
diff --git a/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java b/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java
index f9e466dce..a8ac9aa4a 100644
--- a/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java
+++ b/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java
@@ -124,7 +124,6 @@ public class MyTracksProviderUtilsImpl implements MyTracksProviderUtils {
private static ContentValues createContentValues(Waypoint waypoint) {
ContentValues values = new ContentValues();
- TripStatistics stats = waypoint.getStatistics();
// Values id < 0 indicate no id is available:
if (waypoint.getId() >= 0) {
@@ -138,21 +137,24 @@ public class MyTracksProviderUtilsImpl implements MyTracksProviderUtils {
values.put(WaypointsColumns.TYPE, waypoint.getType());
values.put(WaypointsColumns.LENGTH, waypoint.getLength());
values.put(WaypointsColumns.DURATION, waypoint.getDuration());
- values.put(WaypointsColumns.STARTTIME, stats.getStartTime());
values.put(WaypointsColumns.STARTID, waypoint.getStartId());
values.put(WaypointsColumns.STOPID, waypoint.getStopId());
- values.put(WaypointsColumns.TOTALDISTANCE, stats.getTotalDistance());
- values.put(WaypointsColumns.TOTALTIME, stats.getTotalTime());
- values.put(WaypointsColumns.MOVINGTIME, stats.getMovingTime());
- values.put(WaypointsColumns.AVGSPEED, stats.getAverageSpeed());
- values.put(WaypointsColumns.AVGMOVINGSPEED, stats.getAverageMovingSpeed());
- values.put(WaypointsColumns.MAXSPEED, stats.getMaxSpeed());
- values.put(WaypointsColumns.MINELEVATION, stats.getMinElevation());
- values.put(WaypointsColumns.MAXELEVATION, stats.getMaxElevation());
- values.put(WaypointsColumns.ELEVATIONGAIN, stats.getTotalElevationGain());
- values.put(WaypointsColumns.MINGRADE, stats.getMinGrade());
- values.put(WaypointsColumns.MAXGRADE, stats.getMaxGrade());
+ TripStatistics stats = waypoint.getStatistics();
+ if (stats != null) {
+ values.put(WaypointsColumns.TOTALDISTANCE, stats.getTotalDistance());
+ values.put(WaypointsColumns.TOTALTIME, stats.getTotalTime());
+ values.put(WaypointsColumns.MOVINGTIME, stats.getMovingTime());
+ values.put(WaypointsColumns.AVGSPEED, stats.getAverageSpeed());
+ values.put(WaypointsColumns.AVGMOVINGSPEED, stats.getAverageMovingSpeed());
+ values.put(WaypointsColumns.MAXSPEED, stats.getMaxSpeed());
+ values.put(WaypointsColumns.MINELEVATION, stats.getMinElevation());
+ values.put(WaypointsColumns.MAXELEVATION, stats.getMaxElevation());
+ values.put(WaypointsColumns.ELEVATIONGAIN, stats.getTotalElevationGain());
+ values.put(WaypointsColumns.MINGRADE, stats.getMinGrade());
+ values.put(WaypointsColumns.MAXGRADE, stats.getMaxGrade());
+ values.put(WaypointsColumns.STARTTIME, stats.getStartTime());
+ }
Location location = waypoint.getLocation();
if (location != null) {
@@ -378,7 +380,6 @@ public class MyTracksProviderUtilsImpl implements MyTracksProviderUtils {
int idxSpeed = cursor.getColumnIndexOrThrow(WaypointsColumns.SPEED);
Waypoint waypoint = new Waypoint();
- TripStatistics stats = waypoint.getStatistics();
if (!cursor.isNull(idxId)) {
waypoint.setId(cursor.getLong(idxId));
@@ -407,41 +408,57 @@ public class MyTracksProviderUtilsImpl implements MyTracksProviderUtils {
if (!cursor.isNull(idxDuration)) {
waypoint.setDuration(cursor.getLong(idxDuration));
}
- if (!cursor.isNull(idxStartTime)) {
- stats.setStartTime(cursor.getLong(idxStartTime));
- }
if (!cursor.isNull(idxStartId)) {
waypoint.setStartId(cursor.getLong(idxStartId));
}
if (!cursor.isNull(idxStopId)) {
waypoint.setStopId(cursor.getLong(idxStopId));
}
+
+ TripStatistics stats = new TripStatistics();
+ boolean hasStats = false;
+ if (!cursor.isNull(idxStartTime)) {
+ stats.setStartTime(cursor.getLong(idxStartTime));
+ hasStats = true;
+ }
if (!cursor.isNull(idxTotalDistance)) {
stats.setTotalDistance(cursor.getFloat(idxTotalDistance));
+ hasStats = true;
}
if (!cursor.isNull(idxTotalTime)) {
stats.setTotalTime(cursor.getLong(idxTotalTime));
+ hasStats = true;
}
if (!cursor.isNull(idxMovingTime)) {
stats.setMovingTime(cursor.getLong(idxMovingTime));
+ hasStats = true;
}
if (!cursor.isNull(idxMaxSpeed)) {
stats.setMaxSpeed(cursor.getFloat(idxMaxSpeed));
+ hasStats = true;
}
if (!cursor.isNull(idxMinElevation)) {
stats.setMinElevation(cursor.getFloat(idxMinElevation));
+ hasStats = true;
}
if (!cursor.isNull(idxMaxElevation)) {
stats.setMaxElevation(cursor.getFloat(idxMaxElevation));
+ hasStats = true;
}
if (!cursor.isNull(idxElevationGain)) {
stats.setTotalElevationGain(cursor.getFloat(idxElevationGain));
+ hasStats = true;
}
if (!cursor.isNull(idxMinGrade)) {
stats.setMinGrade(cursor.getFloat(idxMinGrade));
+ hasStats = true;
}
if (!cursor.isNull(idxMaxGrade)) {
stats.setMaxGrade(cursor.getFloat(idxMaxGrade));
+ hasStats = true;
+ }
+ if (hasStats) {
+ waypoint.setStatistics(stats);
}
Location location = new Location("");
diff --git a/MyTracksLib/src/com/google/android/apps/mytracks/content/Waypoint.java b/MyTracksLib/src/com/google/android/apps/mytracks/content/Waypoint.java
index a2649a501..3d020eee2 100644
--- a/MyTracksLib/src/com/google/android/apps/mytracks/content/Waypoint.java
+++ b/MyTracksLib/src/com/google/android/apps/mytracks/content/Waypoint.java
@@ -85,7 +85,7 @@ public final class Waypoint implements Parcelable {
/** Stop track point id */
private long stopId = -1;
- private TripStatistics stats = new TripStatistics();
+ private TripStatistics stats;
/** The length of the track, without smoothing. */
private double length;
diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java
index 5e9d55818..455e2deb9 100644
--- a/MyTracksTest/src/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java
+++ b/MyTracksTest/src/com/google/android/apps/mytracks/services/TrackRecordingServiceTest.java
@@ -23,9 +23,12 @@ import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.content.WaypointType;
+import com.google.android.apps.mytracks.content.MyTracksProviderUtils.Factory;
import com.google.android.apps.mytracks.stats.TripStatistics;
+import com.google.android.apps.mytracks.testing.TestingProviderUtilsFactory;
import com.google.android.apps.mytracks.util.ApiFeatures;
import com.google.android.maps.mytracks.R;
+import com.google.android.testing.mocking.AndroidMock;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
@@ -37,6 +40,7 @@ import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.location.Location;
import android.os.IBinder;
+import android.os.RemoteException;
import android.test.RenamingDelegatingContext;
import android.test.ServiceTestCase;
import android.test.mock.MockContentResolver;
@@ -565,7 +569,19 @@ public class TrackRecordingServiceTest
assertEquals(1, service.insertWaypoint(WaypointType.STATISTICS));
assertEquals(2, service.insertWaypoint(WaypointType.STATISTICS));
- // TODO: Add more checks.
+ Waypoint wpt = providerUtils.getWaypoint(1);
+ assertEquals(getContext().getString(R.string.stats_icon_url),
+ wpt.getIcon());
+ assertEquals(getContext().getString(R.string.statistics),
+ wpt.getName());
+ assertEquals(Waypoint.TYPE_STATISTICS, wpt.getType());
+ assertEquals(123, wpt.getTrackId());
+ assertEquals(0.0, wpt.getLength());
+ assertNotNull(wpt.getLocation());
+ assertNotNull(wpt.getStatistics());
+ // TODO check the rest of the params.
+
+ // TODO: Check waypoint 2.
}
@MediumTest
@@ -589,6 +605,16 @@ public class TrackRecordingServiceTest
assertTrue(service.isRecording());
assertEquals(1, service.insertWaypoint(WaypointType.MARKER));
+ Waypoint wpt = providerUtils.getWaypoint(1);
+ assertEquals(getContext().getString(R.string.waypoint_icon_url),
+ wpt.getIcon());
+ assertEquals(getContext().getString(R.string.waypoint),
+ wpt.getName());
+ assertEquals(Waypoint.TYPE_WAYPOINT, wpt.getType());
+ assertEquals(123, wpt.getTrackId());
+ assertEquals(0.0, wpt.getLength());
+ assertNotNull(wpt.getLocation());
+ assertNull(wpt.getStatistics());
}
@MediumTest
diff --git a/SignalStrengthSampler/AndroidManifest.xml b/SignalStrengthSampler/AndroidManifest.xml
index 03d216a34..ea09d0894 100644
--- a/SignalStrengthSampler/AndroidManifest.xml
+++ b/SignalStrengthSampler/AndroidManifest.xml
@@ -50,6 +50,7 @@ limitations under the License.
+