diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/CsvTrackWriter.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/CsvTrackWriter.java index d0f2e170c..6e158c66a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/CsvTrackWriter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/CsvTrackWriter.java @@ -77,11 +77,6 @@ public class CsvTrackWriter implements TrackWriter { pointIndex = 0; } - @Override - public void close() { - printWriter.close(); - } - @Override public void writeHeader(Track track) { writeCommaSeparatedLine(context.getString(R.string.generic_name), diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/FileTrackExporter.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/FileTrackExporter.java index 0b79351d8..0349d0797 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/FileTrackExporter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/FileTrackExporter.java @@ -80,7 +80,6 @@ public class FileTrackExporter extends AbstractTrackExporter { writeLocations(tracks[i], offset); } trackWriter.writeFooter(); - trackWriter.close(); } /** diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/GpxTrackWriter.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/GpxTrackWriter.java index 8e1a96806..cfbcc4ef9 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/GpxTrackWriter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/GpxTrackWriter.java @@ -68,14 +68,6 @@ public class GpxTrackWriter implements TrackWriter { this.printWriter = new PrintWriter(outputStream); } - @Override - public void close() { - if (printWriter != null) { - printWriter.close(); - printWriter = null; - } - } - @Override public void writeHeader(Track track) { if (printWriter != null) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/KmlTrackWriter.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/KmlTrackWriter.java index f579a2d7c..37aaaa965 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/KmlTrackWriter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/KmlTrackWriter.java @@ -103,14 +103,6 @@ public class KmlTrackWriter implements TrackWriter { this.printWriter = new PrintWriter(outputStream); } - @Override - public void close() { - if (printWriter != null) { - printWriter.close(); - printWriter = null; - } - } - @Override public void writeHeader(Track track) { if (printWriter != null) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/KmzTrackExporter.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/KmzTrackExporter.java index d237c0dad..f597e64d0 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/KmzTrackExporter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/KmzTrackExporter.java @@ -23,7 +23,6 @@ import com.google.android.apps.mytracks.content.Waypoint; import android.database.Cursor; import android.net.Uri; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -76,13 +75,9 @@ public class KmzTrackExporter extends AbstractTrackExporter { ZipEntry zipEntry = new ZipEntry(KML_FILE_NAME); zipOutputStream.putNextEntry(zipEntry); - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - fileTrackExporter.writeTrack(byteArrayOutputStream); - if (fileTrackExporter.isSuccess()) { - zipOutputStream.write(byteArrayOutputStream.toByteArray()); - zipOutputStream.closeEntry(); - } else { - zipOutputStream.closeEntry(); + fileTrackExporter.writeTrack(zipOutputStream); + zipOutputStream.closeEntry(); + if (!fileTrackExporter.isSuccess()) { throw new IOException(); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveAsyncTask.java index 790d6cc8f..0907300aa 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveAsyncTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveAsyncTask.java @@ -33,6 +33,7 @@ import android.util.Log; 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. @@ -210,23 +211,31 @@ public class SaveAsyncTask extends AsyncTask { : fileTrackExporter; File file = new File(directory, fileName); - FileOutputStream fileOutputStream; + FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream(file); + trackExporter.writeTrack(fileOutputStream); + + if (trackExporter.isSuccess()) { + savedPath = file.getAbsolutePath(); + return true; + } else { + if (!file.delete()) { + Log.w(TAG, "Failed to delete file " + file.getAbsolutePath()); + } + return false; + } } catch (FileNotFoundException e) { Log.e(TAG, "Unable to open file " + file.getName(), e); return false; - } - trackExporter.writeTrack(fileOutputStream); - - if (trackExporter.isSuccess()) { - savedPath = file.getAbsolutePath(); - return true; - } else { - if (!file.delete()) { - Log.w(TAG, "Failed to delete file " + file.getAbsolutePath()); + } finally { + if (fileOutputStream != null) { + try { + fileOutputStream.close(); + } catch (IOException e) { + Log.e(TAG, "Unable to close file output stream", e); + } } - return false; } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/TcxTrackWriter.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/TcxTrackWriter.java index bb5fa7a50..fea0f06cf 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/TcxTrackWriter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/TcxTrackWriter.java @@ -96,14 +96,6 @@ public class TcxTrackWriter implements TrackWriter { this.printWriter = new PrintWriter(out); } - @Override - public void close() { - if (printWriter != null) { - printWriter.close(); - printWriter = null; - } - } - @Override public String getExtension() { return TrackFileFormat.TCX.getExtension(); diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackWriter.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackWriter.java index e275c62fb..15043cb8a 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackWriter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackWriter.java @@ -64,11 +64,6 @@ public interface TrackWriter { */ public void prepare(OutputStream outputStream); - /** - * Closes the underlying file handler. - */ - public void close(); - /** * Writes the header for a file * 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 a02193a28..1c64a857d 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 @@ -444,16 +444,28 @@ public class SyncUtils { FileTrackExporter fileTrackExporter = new FileTrackExporter( myTracksProviderUtils, new Track[] { track }, trackFileFormat, context, false, null); - fileTrackExporter.writeTrack(new FileOutputStream(file)); - if (fileTrackExporter.isSuccess()) { - return file; - } else { - if (!file.delete()) { - Log.d(TAG, "Unable to delete file for track " + track.getName()); + FileOutputStream fileOutputStream = null; + try { + fileOutputStream = new FileOutputStream(file); + fileTrackExporter.writeTrack(fileOutputStream); + if (fileTrackExporter.isSuccess()) { + return file; + } else { + if (!file.delete()) { + Log.d(TAG, "Unable to delete file for track " + track.getName()); + } + Log.d(TAG, "Unable to get file for track " + track.getName()); + return null; } - Log.d(TAG, "Unable to get file for track " + track.getName()); - return null; - } + } finally { + if (fileOutputStream != null) { + try { + fileOutputStream.close(); + } catch (IOException e) { + Log.e(TAG, "Unable to close file output stream", e); + } + } + } } /** diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/file/FileTrackExporterTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/file/FileTrackExporterTest.java index 54cfaea38..7b349d09c 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/file/FileTrackExporterTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/file/FileTrackExporterTest.java @@ -96,8 +96,7 @@ public class FileTrackExporterTest extends AndroidTestCase { trackWriter.writeBeginTrack(track, null); trackWriter.writeEndTrack(track, null); trackWriter.writeFooter(); - trackWriter.close(); - + mocksControl.replay(); fileTrackExporter.writeTrack(outputStream); @@ -128,7 +127,6 @@ public class FileTrackExporterTest extends AndroidTestCase { trackWriter.writeBeginTrack(track, null); trackWriter.writeEndTrack(track, null); trackWriter.writeFooter(); - trackWriter.close(); mocksControl.replay(); fileTrackExporter.writeTrack(outputStream); @@ -193,7 +191,6 @@ public class FileTrackExporterTest extends AndroidTestCase { trackWriter.writeEndTrack(trackEq(track), locationEq(locations[5])); trackWriter.writeFooter(); - trackWriter.close(); mocksControl.replay(); fileTrackExporter.writeTrack(outputStream); 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 73bc6e1e9..a9b4be12f 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 @@ -132,7 +132,6 @@ public abstract class TrackWriterTest extends AndroidTestCase { trackWriter.writeCloseSegment(); trackWriter.writeEndTrack(track, location4); trackWriter.writeFooter(); - trackWriter.close(); return output.toString(); }