From 8a7786f9ca4e4a1e92bc889443998a325f7ed2c9 Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Thu, 30 Aug 2012 16:12:31 -0700 Subject: [PATCH] In TrackWriterImpl, write an empty track if the track has no valid locations. --- .../mytracks/io/file/TrackWriterImpl.java | 16 +++++------ .../mytracks/io/file/TrackWriterTest.java | 28 +++++++++++++++++++ 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackWriterImpl.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackWriterImpl.java index 0a1dadbc4..0c32b3d71 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackWriterImpl.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackWriterImpl.java @@ -317,22 +317,16 @@ class TrackWriterImpl implements TrackWriter { LocationIterator it = providerUtils.getTrackPointLocationIterator(track.getId(), 0, false, locationFactory); try { - if (!it.hasNext()) { - // Writes an empty track - writer.writeBeginTrack(null); - writer.writeEndTrack(null); - return; - } int pointNumber = 0; while (it.hasNext()) { - Location loc = it.next(); + Location location = it.next(); if (Thread.interrupted()) { throw new InterruptedException(); } pointNumber++; - boolean isValid = LocationUtils.isValidLocation(loc); + boolean isValid = LocationUtils.isValidLocation(location); boolean validSegment = isValid && isLastValid; if (!wroteFirst && validSegment) { // Found the first two consecutive points which are valid @@ -351,7 +345,7 @@ class TrackWriterImpl implements TrackWriter { } // Write the current point - writer.writeLocation(loc); + writer.writeLocation(location); if (onWriteListener != null) { onWriteListener.onWrite(pointNumber, track.getNumberOfPoints()); } @@ -371,6 +365,10 @@ class TrackWriterImpl implements TrackWriter { } if (wroteFirst) { writer.writeEndTrack(locationFactory.lastLocation); + } else { + // Writes an empty track + writer.writeBeginTrack(null); + writer.writeEndTrack(null); } } finally { it.close(); diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/file/TrackWriterTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/file/TrackWriterTest.java index c855c6b35..1d9fe5e22 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/file/TrackWriterTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/file/TrackWriterTest.java @@ -237,6 +237,34 @@ public class TrackWriterTest extends AndroidTestCase { 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 { writer = new TrackWriterImpl(getContext(), providerUtils, track, formatWriter);