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. +