diff --git a/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java b/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java
index c41eab234..3045ce675 100644
--- a/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java
+++ b/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java
@@ -6,6 +6,7 @@ import android.os.Parcelable;
import de.dennisguse.opentracks.io.file.exporter.GpxTrackWriter;
import de.dennisguse.opentracks.io.file.exporter.KmlTrackWriter;
+import de.dennisguse.opentracks.io.file.exporter.KmzTrackExporter;
import de.dennisguse.opentracks.io.file.exporter.TrackWriter;
import de.dennisguse.opentracks.R;
diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/FileTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/FileTrackExporter.java
index 491375ba0..c438b24bc 100644
--- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/FileTrackExporter.java
+++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/FileTrackExporter.java
@@ -53,8 +53,7 @@ public class FileTrackExporter implements TrackExporter {
* @param trackWriter the track writer
* @param trackExporterListener the track export listener
*/
- public FileTrackExporter(ContentProviderUtils contentProviderUtils, Track[] tracks,
- TrackWriter trackWriter, TrackExporterListener trackExporterListener) {
+ public FileTrackExporter(ContentProviderUtils contentProviderUtils, Track[] tracks, TrackWriter trackWriter, TrackExporterListener trackExporterListener) {
this.contentProviderUtils = contentProviderUtils;
this.tracks = tracks;
this.trackWriter = trackWriter;
@@ -95,8 +94,7 @@ public class FileTrackExporter implements TrackExporter {
* load them into objects all at the same time.
*/
boolean hasWaypoints = false;
- try (Cursor cursor = contentProviderUtils.getWaypointCursor(
- track.getId(), -1L, Constants.MAX_LOADED_WAYPOINTS_POINTS)) {
+ try (Cursor cursor = contentProviderUtils.getWaypointCursor(track.getId(), -1L, Constants.MAX_LOADED_WAYPOINTS_POINTS)) {
if (cursor != null && cursor.moveToFirst()) {
/*
* Yes, this will skip the first waypoint and that is intentional as the
@@ -132,8 +130,7 @@ public class FileTrackExporter implements TrackExporter {
LocationIterator locationIterator = null;
try {
- locationIterator = contentProviderUtils.getTrackPointLocationIterator(
- track.getId(), -1L, false, locationFactory);
+ locationIterator = contentProviderUtils.getTrackPointLocationIterator(track.getId(), -1L, false, locationFactory);
while (locationIterator.hasNext()) {
if (Thread.interrupted()) {
@@ -177,6 +174,11 @@ public class FileTrackExporter implements TrackExporter {
isLastLocationValid = isLocationValid;
}
+ if (wroteSegment) {
+ //Close the last segment
+ trackWriter.writeCloseSegment();
+ }
+
if (wroteTrack) {
Location lastValidTrackPoint = contentProviderUtils.getLastValidTrackPoint(track.getId());
setLocationTime(lastValidTrackPoint, offset);
diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java
index a54ae1a48..72563e3f3 100644
--- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java
+++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java
@@ -56,16 +56,11 @@ public class KmlTrackWriter implements TrackWriter {
private static final String HEART_RATE = "heart_rate";
private static final String POWER = "power";
- private static final String
- WAYPOINT_ICON = "http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png";
- private static final String
- STATISTICS_ICON = "http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png";
- private static final String
- START_ICON = "http://maps.google.com/mapfiles/kml/paddle/grn-circle.png";
- private static final String
- END_ICON = "http://maps.google.com/mapfiles/kml/paddle/red-circle.png";
- private static final String
- TRACK_ICON = "http://earth.google.com/images/kml-icons/track-directional/track-0.png";
+ private static final String WAYPOINT_ICON = "http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png";
+ private static final String STATISTICS_ICON = "http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png";
+ private static final String START_ICON = "http://maps.google.com/mapfiles/kml/paddle/grn-circle.png";
+ private static final String END_ICON = "http://maps.google.com/mapfiles/kml/paddle/red-circle.png";
+ private static final String TRACK_ICON = "http://earth.google.com/images/kml-icons/track-directional/track-0.png";
private final Context context;
private final boolean multiple;
@@ -124,9 +119,7 @@ public class KmlTrackWriter implements TrackWriter {
printWriter.println("1");
Track track = tracks[0];
printWriter.println("" + StringUtils.formatCData(track.getName()) + "");
- printWriter.println(""
- + StringUtils.formatCData(context.getString(R.string.app_name))
- + "");
+ printWriter.println("" + StringUtils.formatCData(context.getString(R.string.app_name)) + "");
writeTrackStyle();
writePlacemarkerStyle(START_STYLE, START_ICON, 32, 1);
writePlacemarkerStyle(END_STYLE, END_ICON, 32, 1);
@@ -151,9 +144,7 @@ public class KmlTrackWriter implements TrackWriter {
@Override
public void writeBeginWaypoints(Track track) {
if (printWriter != null) {
- printWriter.println(""
- + StringUtils.formatCData(context.getString(R.string.track_markers, track.getName()))
- + "");
+ printWriter.println("" + StringUtils.formatCData(context.getString(R.string.track_markers, track.getName())) + "");
printWriter.println("1");
}
}
@@ -258,8 +249,7 @@ public class KmlTrackWriter implements TrackWriter {
@Override
public void writeLocation(Location location) {
if (printWriter != null) {
- printWriter.println(
- "" + StringUtils.formatDateTimeIso8601(location.getTime()) + "");
+ printWriter.println("" + StringUtils.formatDateTimeIso8601(location.getTime()) + "");
printWriter.println("" + getCoordinates(location, " ") + "");
if (location instanceof SensorDataSetLocation) {
SensorDataSet sensorDataSet = ((SensorDataSetLocation) location).getSensorDataSet();
@@ -306,10 +296,8 @@ public class KmlTrackWriter implements TrackWriter {
if (location != null) {
printWriter.println("");
printWriter.println("" + StringUtils.formatCData(name) + "");
- printWriter.println(
- "" + StringUtils.formatCData(description) + "");
- printWriter.println(""
- + StringUtils.formatDateTimeIso8601(location.getTime()) + "");
+ printWriter.println( "" + StringUtils.formatCData(description) + "");
+ printWriter.println("" + StringUtils.formatDateTimeIso8601(location.getTime()) + "");
printWriter.println("#" + styleName + "");
writeCategory(category);
printWriter.println("");
@@ -330,13 +318,11 @@ public class KmlTrackWriter implements TrackWriter {
* @param photoUrl the photo url
* @param heading the heading
*/
- private void writePhotoOverlay(String name, String category, String description, String styleName,
- Location location, String photoUrl, float heading) {
+ private void writePhotoOverlay(String name, String category, String description, String styleName, Location location, String photoUrl, float heading) {
if (location != null) {
printWriter.println("");
printWriter.println("" + StringUtils.formatCData(name) + "");
- printWriter.println(
- "" + StringUtils.formatCData(description) + "");
+ printWriter.println( "" + StringUtils.formatCData(description) + "");
printWriter.print("");
printWriter.print("" + location.getLongitude() + "");
printWriter.print("" + location.getLatitude() + "");
@@ -344,16 +330,14 @@ public class KmlTrackWriter implements TrackWriter {
printWriter.print("" + heading + "");
printWriter.print("90");
printWriter.println("");
- printWriter.println(""
- + StringUtils.formatDateTimeIso8601(location.getTime()) + "");
+ printWriter.println("" + StringUtils.formatDateTimeIso8601(location.getTime()) + "");
printWriter.println("#" + styleName + "");
writeCategory(category);
if (playTrack) {
printWriter.println("" + Uri.decode(photoUrl) + "");
} else {
Uri uri = Uri.parse(photoUrl);
- printWriter.println("" + KmzTrackExporter.KMZ_IMAGES_DIR + File.separatorChar
- + uri.getLastPathSegment() + "");
+ printWriter.println("" + KmzTrackExporter.KMZ_IMAGES_DIR + File.separatorChar + uri.getLastPathSegment() + "");
}
printWriter.print("");
@@ -411,8 +395,7 @@ public class KmlTrackWriter implements TrackWriter {
return;
}
printWriter.println("");
- printWriter.println(
- "" + StringUtils.formatCData(category) + "");
+ printWriter.println( "" + StringUtils.formatCData(category) + "");
printWriter.println("");
}
@@ -441,8 +424,7 @@ public class KmlTrackWriter implements TrackWriter {
printWriter.println("");
}
diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java
index 0ea2ad1de..4598d7f02 100644
--- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java
+++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java
@@ -56,10 +56,8 @@ public class KmzTrackExporter implements TrackExporter {
* @param contentProviderUtils the content provider utils
* @param fileTrackExporter the file track exporter
* @param tracks the tracks to export
- * @param context the context
*/
- public KmzTrackExporter(ContentProviderUtils contentProviderUtils,
- FileTrackExporter fileTrackExporter, Track[] tracks, Context context) {
+ public KmzTrackExporter(ContentProviderUtils contentProviderUtils, FileTrackExporter fileTrackExporter, Track[] tracks) {
this.contentProviderUtils = contentProviderUtils;
this.fileTrackExporter = fileTrackExporter;
this.tracks = tracks;
diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/SaveAsyncTask.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/SaveAsyncTask.java
index 6f92c3b1a..8a91d28ea 100644
--- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/SaveAsyncTask.java
+++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/SaveAsyncTask.java
@@ -198,7 +198,7 @@ public class SaveAsyncTask extends AsyncTask {
}
});
- TrackExporter trackExporter = useKmz ? new KmzTrackExporter(contentProviderUtils, fileTrackExporter, tracks, context) : fileTrackExporter;
+ TrackExporter trackExporter = useKmz ? new KmzTrackExporter(contentProviderUtils, fileTrackExporter, tracks) : fileTrackExporter;
String fileName = FileUtils.buildUniqueFileName(directory, track.getName(), extension);
File file = new File(directory, fileName);