diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackFileFormat.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackFileFormat.java index 355fbeebe..d37a12b53 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackFileFormat.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackFileFormat.java @@ -18,25 +18,25 @@ import java.util.Locale; public enum TrackFileFormat implements Parcelable { KML { @Override - public TrackWriter newTrackWriter(Context context, boolean playTrack) { - return new KmlTrackWriter(context, playTrack); + public TrackWriter newTrackWriter(Context context, boolean multiple, boolean playTrack) { + return new KmlTrackWriter(context, multiple, playTrack); } }, GPX { @Override - public TrackWriter newTrackWriter(Context context, boolean playTrack) { + public TrackWriter newTrackWriter(Context context, boolean multiple, boolean playTrack) { return new GpxTrackWriter(context); } }, CSV { @Override - public TrackWriter newTrackWriter(Context context, boolean playTrack) { + public TrackWriter newTrackWriter(Context context, boolean multiple, boolean playTrack) { return new CsvTrackWriter(context); } }, TCX { @Override - public TrackWriter newTrackWriter(Context context, boolean playTrack) { + public TrackWriter newTrackWriter(Context context, boolean multiple, boolean playTrack) { return new TcxTrackWriter(context); } }; @@ -65,8 +65,12 @@ public enum TrackFileFormat implements Parcelable { /** * Creates a new track writer for the format. + * + * @param context the context + * @param multiple true for writing multiple tracks + * @param playTrack true to play track */ - public abstract TrackWriter newTrackWriter(Context context, boolean playTrack); + public abstract TrackWriter newTrackWriter(Context context, boolean multiple, boolean playTrack); /** * Returns the mime type for each format. diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/exporter/KmlTrackWriter.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/exporter/KmlTrackWriter.java index 28ef5f2ec..21d281f7f 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/exporter/KmlTrackWriter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/exporter/KmlTrackWriter.java @@ -70,6 +70,7 @@ public class KmlTrackWriter implements TrackWriter { TRACK_ICON = "http://earth.google.com/images/kml-icons/track-directional/track-0.png"; private final Context context; + private final boolean multiple; private final boolean playTrack; private final DescriptionGenerator descriptionGenerator; private final MyTracksProviderUtils myTracksProviderUtils; @@ -82,13 +83,15 @@ public class KmlTrackWriter implements TrackWriter { private boolean hasCadence; private boolean hasHeartRate; - public KmlTrackWriter(Context context, boolean playTrack) { - this(context, playTrack, new DescriptionGeneratorImpl(context)); + public KmlTrackWriter(Context context, boolean multiple, boolean playTrack) { + this(context, multiple, playTrack, new DescriptionGeneratorImpl(context)); } @VisibleForTesting - KmlTrackWriter(Context context, boolean playTrack, DescriptionGenerator descriptionGenerator) { + KmlTrackWriter(Context context, boolean multiple, boolean playTrack, + DescriptionGenerator descriptionGenerator) { this.context = context; + this.multiple = multiple; this.playTrack = playTrack; this.descriptionGenerator = descriptionGenerator; this.myTracksProviderUtils = MyTracksProviderUtils.Factory.get(context); @@ -184,7 +187,7 @@ public class KmlTrackWriter implements TrackWriter { @Override public void writeBeginTracks() { - if (printWriter != null && playTrack) { + if (printWriter != null && multiple) { printWriter.println(""); printWriter.println("" + context.getString(R.string.generic_tracks) + ""); printWriter.println("1"); @@ -193,7 +196,7 @@ public class KmlTrackWriter implements TrackWriter { @Override public void writeEndTracks() { - if (printWriter != null && playTrack) { + if (printWriter != null && multiple) { printWriter.println(""); } } @@ -203,7 +206,8 @@ public class KmlTrackWriter implements TrackWriter { if (printWriter != null) { String name = context.getString(R.string.marker_label_start, track.getName()); writePlacemark(name, "", "", START_STYLE, startLocation); - if (playTrack) { + if (multiple) { + // No need to add TOUR_FEATURE_ID_VALUE printWriter.println(""); } else { printWriter.println(""); diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/exporter/SaveAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/exporter/SaveAsyncTask.java index c8263774f..3abfe12d6 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/exporter/SaveAsyncTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/exporter/SaveAsyncTask.java @@ -188,7 +188,8 @@ public class SaveAsyncTask extends AsyncTask { boolean useKmz = trackFileFormat == TrackFileFormat.KML && !playTrack; String extension = useKmz ? KmzTrackExporter.KMZ_EXTENSION : trackFileFormat.getExtension(); FileTrackExporter fileTrackExporter = new FileTrackExporter(myTracksProviderUtils, tracks, - trackFileFormat.newTrackWriter(context, playTrack), new TrackExporterListener() { + trackFileFormat.newTrackWriter(context, tracks.length > 1, playTrack), + new TrackExporterListener() { @Override public void onProgressUpdate(int number, int max) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/sync/SyncUtils.java b/MyTracks/src/com/google/android/apps/mytracks/io/sync/SyncUtils.java index db21c1600..093df12fb 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/sync/SyncUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/sync/SyncUtils.java @@ -466,8 +466,8 @@ public class SyncUtils { String extension = useKmz ? KmzTrackExporter.KMZ_EXTENSION : TrackFileFormat.KML.getExtension(); java.io.File file = new java.io.File( directory, FileUtils.buildUniqueFileName(directory, track.getName(), extension)); - FileTrackExporter fileTrackExporter = new FileTrackExporter( - myTracksProviderUtils, tracks, TrackFileFormat.KML.newTrackWriter(context, false), null); + FileTrackExporter fileTrackExporter = new FileTrackExporter(myTracksProviderUtils, tracks, + TrackFileFormat.KML.newTrackWriter(context, false, false), null); TrackExporter trackExporter = useKmz ? new KmzTrackExporter( myTracksProviderUtils, fileTrackExporter, tracks, context) : fileTrackExporter; diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/file/exporter/KmlTrackWriterTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/file/exporter/KmlTrackWriterTest.java index e73c3d479..bf0ffd9b8 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/file/exporter/KmlTrackWriterTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/file/exporter/KmlTrackWriterTest.java @@ -55,7 +55,7 @@ public class KmlTrackWriterTest extends TrackWriterTest { public void testXmlOutput() throws Exception { KmlTrackWriter kmlTrackWriter = new KmlTrackWriter( - getContext(), false, new FakeDescriptionGenerator()); + getContext(), false, false, new FakeDescriptionGenerator()); String result = writeTrack(kmlTrackWriter); Document doc = parseXmlDocument(result);