forked from upstream-mirrors/OpenTracks
In TrackWriterImpl, write an empty track if the track has no valid locations.
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user