In TrackWriterImpl, write an empty track if the track has no valid locations.

This commit is contained in:
Jimmy Shih
2012-08-30 16:12:31 -07:00
parent af32c4f40f
commit 8a7786f9ca
2 changed files with 35 additions and 9 deletions
@@ -317,22 +317,16 @@ class TrackWriterImpl implements TrackWriter {
LocationIterator it = providerUtils.getTrackPointLocationIterator(track.getId(), 0, false, LocationIterator it = providerUtils.getTrackPointLocationIterator(track.getId(), 0, false,
locationFactory); locationFactory);
try { try {
if (!it.hasNext()) {
// Writes an empty track
writer.writeBeginTrack(null);
writer.writeEndTrack(null);
return;
}
int pointNumber = 0; int pointNumber = 0;
while (it.hasNext()) { while (it.hasNext()) {
Location loc = it.next(); Location location = it.next();
if (Thread.interrupted()) { if (Thread.interrupted()) {
throw new InterruptedException(); throw new InterruptedException();
} }
pointNumber++; pointNumber++;
boolean isValid = LocationUtils.isValidLocation(loc); boolean isValid = LocationUtils.isValidLocation(location);
boolean validSegment = isValid && isLastValid; boolean validSegment = isValid && isLastValid;
if (!wroteFirst && validSegment) { if (!wroteFirst && validSegment) {
// Found the first two consecutive points which are valid // Found the first two consecutive points which are valid
@@ -351,7 +345,7 @@ class TrackWriterImpl implements TrackWriter {
} }
// Write the current point // Write the current point
writer.writeLocation(loc); writer.writeLocation(location);
if (onWriteListener != null) { if (onWriteListener != null) {
onWriteListener.onWrite(pointNumber, track.getNumberOfPoints()); onWriteListener.onWrite(pointNumber, track.getNumberOfPoints());
} }
@@ -371,6 +365,10 @@ class TrackWriterImpl implements TrackWriter {
} }
if (wroteFirst) { if (wroteFirst) {
writer.writeEndTrack(locationFactory.lastLocation); writer.writeEndTrack(locationFactory.lastLocation);
} else {
// Writes an empty track
writer.writeBeginTrack(null);
writer.writeEndTrack(null);
} }
} finally { } finally {
it.close(); it.close();
@@ -237,6 +237,34 @@ public class TrackWriterTest extends AndroidTestCase {
mocksControl.verify(); mocksControl.verify();
} }
/**
* Tests when a track only contains invalid locations. Make sure an empty
* track is written.
*/
public void testWriteDocument_oneInvalidLocation() throws Exception {
writer = new TrackWriterImpl(getContext(), providerUtils, track, formatWriter);
Location[] locs = { new Location("fake0") };
fillLocations(locs);
// Make location invalid
locs[0].setLatitude(100);
assertEquals(locs.length, providerUtils.bulkInsertTrackPoint(locs, locs.length, TRACK_ID));
formatWriter.writeHeader();
formatWriter.writeBeginTrack(null);
formatWriter.writeEndTrack(null);
formatWriter.writeFooter();
formatWriter.close();
mocksControl.replay();
writer.writeDocument();
assertTrue(writer.wasSuccess());
mocksControl.verify();
}
public void testWriteDocument() throws Exception { public void testWriteDocument() throws Exception {
writer = new TrackWriterImpl(getContext(), providerUtils, track, formatWriter); writer = new TrackWriterImpl(getContext(), providerUtils, track, formatWriter);