From 6da2d9d1043231e81329446bbd2e9586a2ec77a5 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sun, 11 Aug 2019 09:07:31 +0200 Subject: [PATCH] Export to KML and KMZ as requested by user. --- .../opentracks/io/file/TrackFileFormat.java | 22 +++++++++------- .../io/file/exporter/KmlTrackWriter.java | 25 ++++++++++--------- .../io/file/exporter/SaveActivity.java | 8 +++--- .../io/file/exporter/SaveAsyncTask.java | 25 ++++++++----------- 4 files changed, 40 insertions(+), 40 deletions(-) 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 3045ce675..d67cda5cd 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/TrackFileFormat.java @@ -4,13 +4,12 @@ import android.content.Context; import android.os.Parcel; import android.os.Parcelable; +import java.util.Locale; + +import de.dennisguse.opentracks.R; 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; - -import java.util.Locale; /** * Definition of all possible track formats. @@ -18,13 +17,19 @@ import java.util.Locale; public enum TrackFileFormat implements Parcelable { KML { @Override - public TrackWriter newTrackWriter(Context context, boolean multiple, boolean playTrack) { - return new KmlTrackWriter(context, multiple, playTrack); + public TrackWriter newTrackWriter(Context context, boolean multiple) { + return new KmlTrackWriter(context, multiple, false); + } + }, + KMZ { + @Override + public TrackWriter newTrackWriter(Context context, boolean multiple) { + return new KmlTrackWriter(context, multiple, true); } }, GPX { @Override - public TrackWriter newTrackWriter(Context context, boolean multiple, boolean playTrack) { + public TrackWriter newTrackWriter(Context context, boolean multiple) { return new GpxTrackWriter(context.getString(R.string.app_name)); } }; @@ -56,9 +61,8 @@ public enum TrackFileFormat implements Parcelable { * * @param context the context * @param multiple true for writing multiple tracks - * @param playTrack true to play track */ - public abstract TrackWriter newTrackWriter(Context context, boolean multiple, boolean playTrack); + public abstract TrackWriter newTrackWriter(Context context, boolean multiple); /** * Returns the mime type for each format. 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 72563e3f3..359c2e906 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 @@ -22,6 +22,12 @@ import android.net.Uri; import androidx.annotation.VisibleForTesting; +import java.io.File; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.util.ArrayList; + +import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.content.ContentProviderUtils; import de.dennisguse.opentracks.content.DescriptionGenerator; import de.dennisguse.opentracks.content.DescriptionGeneratorImpl; @@ -32,12 +38,6 @@ import de.dennisguse.opentracks.content.Waypoint.WaypointType; import de.dennisguse.opentracks.content.sensor.SensorDataSet; import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.util.StringUtils; -import de.dennisguse.opentracks.R; - -import java.io.File; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.util.ArrayList; /** * Write track as KML to a file. @@ -64,7 +64,7 @@ public class KmlTrackWriter implements TrackWriter { private final Context context; private final boolean multiple; - private final boolean playTrack; + private final boolean isKMZ; private final DescriptionGenerator descriptionGenerator; private final ContentProviderUtils contentProviderUtils; @@ -76,15 +76,15 @@ public class KmlTrackWriter implements TrackWriter { private boolean hasCadence; private boolean hasHeartRate; - public KmlTrackWriter(Context context, boolean multiple, boolean playTrack) { - this(context, multiple, playTrack, new DescriptionGeneratorImpl(context)); + public KmlTrackWriter(Context context, boolean multiple, boolean isKMZ) { + this(context, multiple, isKMZ, new DescriptionGeneratorImpl(context)); } @VisibleForTesting - KmlTrackWriter(Context context, boolean multiple, boolean playTrack, DescriptionGenerator descriptionGenerator) { + KmlTrackWriter(Context context, boolean multiple, boolean isKMZ, DescriptionGenerator descriptionGenerator) { this.context = context; this.multiple = multiple; - this.playTrack = playTrack; + this.isKMZ = isKMZ; this.descriptionGenerator = descriptionGenerator; this.contentProviderUtils = ContentProviderUtils.Factory.get(context); } @@ -333,7 +333,8 @@ public class KmlTrackWriter implements TrackWriter { printWriter.println("" + StringUtils.formatDateTimeIso8601(location.getTime()) + ""); printWriter.println("#" + styleName + ""); writeCategory(category); - if (playTrack) { + + if (isKMZ) { printWriter.println("" + Uri.decode(photoUrl) + ""); } else { Uri uri = Uri.parse(photoUrl); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/SaveActivity.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/SaveActivity.java index 2fe06fbb1..661f6da89 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/SaveActivity.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/SaveActivity.java @@ -25,13 +25,13 @@ import android.content.Intent; import android.os.Bundle; import android.widget.Toast; +import java.io.File; + +import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.util.DialogUtils; import de.dennisguse.opentracks.util.FileUtils; import de.dennisguse.opentracks.util.IntentUtils; -import de.dennisguse.opentracks.R; - -import java.io.File; /** * An activity for saving tracks to the external storage. If saving a specific @@ -102,7 +102,7 @@ public class SaveActivity extends Activity { saveAsyncTask = (SaveAsyncTask) retained; saveAsyncTask.setActivity(this); } else { - saveAsyncTask = new SaveAsyncTask(this, trackIds, trackFileFormat, playTrack, directory); + saveAsyncTask = new SaveAsyncTask(this, trackIds, trackFileFormat, directory); saveAsyncTask.execute(); } } 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 8a91d28ea..c1b866ed7 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 @@ -22,6 +22,12 @@ import android.os.AsyncTask; import android.os.PowerManager.WakeLock; import android.util.Log; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + +import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.content.ContentProviderUtils; import de.dennisguse.opentracks.content.Track; import de.dennisguse.opentracks.content.TracksColumns; @@ -29,12 +35,6 @@ import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.util.FileUtils; import de.dennisguse.opentracks.util.PreferencesUtils; import de.dennisguse.opentracks.util.SystemUtils; -import de.dennisguse.opentracks.R; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; /** * Async Task to save tracks to the external storage. @@ -46,8 +46,6 @@ public class SaveAsyncTask extends AsyncTask { private static final String TAG = SaveAsyncTask.class.getSimpleName(); private final long[] trackIds; private final TrackFileFormat trackFileFormat; - @Deprecated //TODO Seems to be a left over from Google Earth integration and can be removed. - private final boolean playTrack; private final File directory; private final Context context; private final ContentProviderUtils contentProviderUtils; @@ -73,14 +71,12 @@ public class SaveAsyncTask extends AsyncTask { * @param trackIds the track ids to save. To save all, set to size 1 with * trackIds[0] == -1L * @param trackFileFormat the track file format - * @param playTrack true to play track * @param directory the directory to write the file */ - public SaveAsyncTask(SaveActivity saveActivity, long[] trackIds, TrackFileFormat trackFileFormat, boolean playTrack, File directory) { + public SaveAsyncTask(SaveActivity saveActivity, long[] trackIds, TrackFileFormat trackFileFormat, File directory) { this.saveActivity = saveActivity; this.trackIds = trackIds; this.trackFileFormat = trackFileFormat; - this.playTrack = playTrack; this.directory = directory; context = saveActivity.getApplicationContext(); contentProviderUtils = ContentProviderUtils.Factory.get(context); @@ -180,10 +176,8 @@ public class SaveAsyncTask extends AsyncTask { } Track track = tracks[0]; - boolean useKmz = trackFileFormat == TrackFileFormat.KML && !playTrack; - String extension = useKmz ? KmzTrackExporter.KMZ_EXTENSION : trackFileFormat.getExtension(); FileTrackExporter fileTrackExporter = new FileTrackExporter(contentProviderUtils, tracks, - trackFileFormat.newTrackWriter(context, tracks.length > 1, playTrack), + trackFileFormat.newTrackWriter(context, tracks.length > 1), new TrackExporterListener() { @Override @@ -197,7 +191,8 @@ public class SaveAsyncTask extends AsyncTask { } } }); - + boolean useKmz = trackFileFormat == TrackFileFormat.KMZ; + String extension = useKmz ? KmzTrackExporter.KMZ_EXTENSION : trackFileFormat.getExtension(); TrackExporter trackExporter = useKmz ? new KmzTrackExporter(contentProviderUtils, fileTrackExporter, tracks) : fileTrackExporter; String fileName = FileUtils.buildUniqueFileName(directory, track.getName(), extension);