Export: do not show progress of exported TrackPoints.

Only the overall number of tracks is shown now (similar to import).
This commit is contained in:
Dennis Guse
2020-05-20 11:58:46 +02:00
parent 53b267150b
commit b617420290
5 changed files with 19 additions and 75 deletions
@@ -209,7 +209,7 @@ public class ShareContentProvider extends CustomContentProvider implements ICont
tracks[i] = contentProviderUtils.getTrack(trackIds[i]); tracks[i] = contentProviderUtils.getTrack(trackIds[i]);
} }
final TrackExporter trackExporter = getTrackFileFormat(uri).newTrackExporter(getContext(), tracks, null); final TrackExporter trackExporter = getTrackFileFormat(uri).newTrackExporter(getContext(), tracks);
PipeDataWriter pipeDataWriter = new PipeDataWriter<String>() { PipeDataWriter pipeDataWriter = new PipeDataWriter<String>() {
@Override @Override
@@ -12,7 +12,6 @@ import de.dennisguse.opentracks.io.file.exporter.GpxTrackWriter;
import de.dennisguse.opentracks.io.file.exporter.KmlTrackWriter; import de.dennisguse.opentracks.io.file.exporter.KmlTrackWriter;
import de.dennisguse.opentracks.io.file.exporter.KmzTrackExporter; import de.dennisguse.opentracks.io.file.exporter.KmzTrackExporter;
import de.dennisguse.opentracks.io.file.exporter.TrackExporter; import de.dennisguse.opentracks.io.file.exporter.TrackExporter;
import de.dennisguse.opentracks.io.file.exporter.TrackExporterListener;
import de.dennisguse.opentracks.io.file.exporter.TrackWriter; import de.dennisguse.opentracks.io.file.exporter.TrackWriter;
/** /**
@@ -74,8 +73,8 @@ public enum TrackFileFormat {
return new KmlTrackWriter(context, multiple, false, false, exportPhotos); return new KmlTrackWriter(context, multiple, false, false, exportPhotos);
} }
public TrackExporter newTrackExporter(Context context, Track[] tracks, TrackExporterListener trackExporterListener) { public TrackExporter newTrackExporter(Context context, Track[] tracks) {
return newKmzTrackExporter(context, this.newTrackWriter(context, tracks.length > 1), tracks, trackExporterListener, exportPhotos); return newKmzTrackExporter(context, this.newTrackWriter(context, tracks.length > 1), tracks, exportPhotos);
} }
@Override @Override
@@ -101,8 +100,8 @@ public enum TrackFileFormat {
return new KmlTrackWriter(context, multiple, true, false, exportPhotos); return new KmlTrackWriter(context, multiple, true, false, exportPhotos);
} }
public TrackExporter newTrackExporter(Context context, Track[] tracks, TrackExporterListener trackExporterListener) { public TrackExporter newTrackExporter(Context context, Track[] tracks) {
return newKmzTrackExporter(context, this.newTrackWriter(context, tracks.length > 1), tracks, trackExporterListener, exportPhotos); return newKmzTrackExporter(context, this.newTrackWriter(context, tracks.length > 1), tracks, exportPhotos);
} }
@Override @Override
@@ -134,8 +133,8 @@ public enum TrackFileFormat {
return MIME_KMZ; return MIME_KMZ;
} }
public TrackExporter newTrackExporter(Context context, Track[] tracks, TrackExporterListener trackExporterListener) { public TrackExporter newTrackExporter(Context context, Track[] tracks) {
return newKmzTrackExporter(context, this.newTrackWriter(context, tracks.length > 1), tracks, trackExporterListener, exportPhotos); return newKmzTrackExporter(context, this.newTrackWriter(context, tracks.length > 1), tracks, exportPhotos);
} }
public String getExtension() { public String getExtension() {
@@ -163,8 +162,8 @@ public enum TrackFileFormat {
return MIME_KMZ; return MIME_KMZ;
} }
public TrackExporter newTrackExporter(Context context, Track[] tracks, TrackExporterListener trackExporterListener) { public TrackExporter newTrackExporter(Context context, Track[] tracks) {
return newKmzTrackExporter(context, newTrackWriter(context, tracks.length > 1), tracks, trackExporterListener, exportPhotos); return newKmzTrackExporter(context, newTrackWriter(context, tracks.length > 1), tracks, exportPhotos);
} }
public String getExtension() { public String getExtension() {
@@ -197,10 +196,10 @@ public enum TrackFileFormat {
private static final String MIME_KML = "application/vnd.google-earth.kml+xml"; private static final String MIME_KML = "application/vnd.google-earth.kml+xml";
private static TrackExporter newKmzTrackExporter(Context context, TrackWriter trackWriter, Track[] tracks, TrackExporterListener trackExporterListener, boolean exportPhotos) { private static TrackExporter newKmzTrackExporter(Context context, TrackWriter trackWriter, Track[] tracks, boolean exportPhotos) {
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context); ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context);
FileTrackExporter fileTrackExporter = new FileTrackExporter(contentProviderUtils, trackWriter, tracks, trackExporterListener); FileTrackExporter fileTrackExporter = new FileTrackExporter(contentProviderUtils, trackWriter, tracks);
return new KmzTrackExporter(contentProviderUtils, fileTrackExporter, tracks, exportPhotos); return new KmzTrackExporter(contentProviderUtils, fileTrackExporter, tracks, exportPhotos);
} }
@@ -210,10 +209,10 @@ public enum TrackFileFormat {
*/ */
public abstract String getMimeType(); public abstract String getMimeType();
public TrackExporter newTrackExporter(Context context, Track[] tracks, TrackExporterListener trackExporterListener) { public TrackExporter newTrackExporter(Context context, Track[] tracks) {
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context); ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context);
TrackWriter trackWriter = newTrackWriter(context, tracks.length > 1); TrackWriter trackWriter = newTrackWriter(context, tracks.length > 1);
return new FileTrackExporter(contentProviderUtils, trackWriter, tracks, trackExporterListener); return new FileTrackExporter(contentProviderUtils, trackWriter, tracks);
} }
/** /**
@@ -16,7 +16,6 @@
package de.dennisguse.opentracks.io.file.exporter; package de.dennisguse.opentracks.io.file.exporter;
import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.PowerManager.WakeLock; import android.os.PowerManager.WakeLock;
@@ -45,13 +44,10 @@ class ExportAsyncTask extends AsyncTask<Void, Integer, Boolean> {
private static final String TAG = ExportAsyncTask.class.getSimpleName(); private static final String TAG = ExportAsyncTask.class.getSimpleName();
private final TrackFileFormat trackFileFormat; private final TrackFileFormat trackFileFormat;
private final DocumentFile directory; private final DocumentFile directory;
private final Context context;
private final ContentProviderUtils contentProviderUtils; private final ContentProviderUtils contentProviderUtils;
private ExportActivity exportActivity; private ExportActivity exportActivity;
private WakeLock wakeLock; private WakeLock wakeLock;
private boolean completed = false;
private int processedTrackCount = 0; private int processedTrackCount = 0;
private int totalTrackCount = 0; private int totalTrackCount = 0;
@@ -66,8 +62,7 @@ class ExportAsyncTask extends AsyncTask<Void, Integer, Boolean> {
this.exportActivity = exportActivity; this.exportActivity = exportActivity;
this.trackFileFormat = trackFileFormat; this.trackFileFormat = trackFileFormat;
this.directory = directory; this.directory = directory;
context = exportActivity.getApplicationContext(); contentProviderUtils = new ContentProviderUtils(exportActivity);
contentProviderUtils = new ContentProviderUtils(context);
} }
@Override @Override
@@ -99,7 +94,6 @@ class ExportAsyncTask extends AsyncTask<Void, Integer, Boolean> {
@Override @Override
protected void onPostExecute(Boolean result) { protected void onPostExecute(Boolean result) {
completed = true;
if (exportActivity != null) { if (exportActivity != null) {
exportActivity.onAsyncTaskCompleted(processedTrackCount, totalTrackCount); exportActivity.onAsyncTaskCompleted(processedTrackCount, totalTrackCount);
} }
@@ -107,7 +101,6 @@ class ExportAsyncTask extends AsyncTask<Void, Integer, Boolean> {
@Override @Override
protected void onCancelled() { protected void onCancelled() {
completed = true;
if (exportActivity != null) { if (exportActivity != null) {
exportActivity.onAsyncTaskCompleted(processedTrackCount, totalTrackCount); exportActivity.onAsyncTaskCompleted(processedTrackCount, totalTrackCount);
} }
@@ -119,17 +112,7 @@ class ExportAsyncTask extends AsyncTask<Void, Integer, Boolean> {
* @param track the track * @param track the track
*/ */
private Boolean exportTrack(Track track) { private Boolean exportTrack(Track track) {
TrackExporterListener trackExporterListener = new TrackExporterListener() { TrackExporter trackExporter = trackFileFormat.newTrackExporter(exportActivity, new Track[]{track});
@Override
public void onProgressUpdate(int number, int max) {
//Update the progress dialog once every 500 points.
if (number % 500 == 0) {
publishProgress(number, max);
}
}
};
TrackExporter trackExporter = trackFileFormat.newTrackExporter(context, new Track[]{track}, trackExporterListener);
String fileName = track.getId() + "." + trackFileFormat.getExtension(); String fileName = track.getId() + "." + trackFileFormat.getExtension();
@@ -139,8 +122,8 @@ class ExportAsyncTask extends AsyncTask<Void, Integer, Boolean> {
file = directory.createFile(trackFileFormat.getMimeType(), fileName); file = directory.createFile(trackFileFormat.getMimeType(), fileName);
} }
try (OutputStream outputStream = context.getContentResolver().openOutputStream(file.getUri())) { try (OutputStream outputStream = exportActivity.getContentResolver().openOutputStream(file.getUri())) {
if (trackExporter.writeTrack(context, outputStream)) { if (trackExporter.writeTrack(exportActivity, outputStream)) {
return true; return true;
} else { } else {
if (!file.delete()) { if (!file.delete()) {
@@ -167,6 +150,7 @@ class ExportAsyncTask extends AsyncTask<Void, Integer, Boolean> {
return false; return false;
} }
totalTrackCount = cursor.getCount(); totalTrackCount = cursor.getCount();
for (int i = 0; i < totalTrackCount; i++) { for (int i = 0; i < totalTrackCount; i++) {
if (isCancelled()) { if (isCancelled()) {
return false; return false;
@@ -44,7 +44,6 @@ public class FileTrackExporter implements TrackExporter {
private final ContentProviderUtils contentProviderUtils; private final ContentProviderUtils contentProviderUtils;
private final Track[] tracks; private final Track[] tracks;
private final TrackWriter trackWriter; private final TrackWriter trackWriter;
private final TrackExporterListener trackExporterListener;
/** /**
* Constructor. * Constructor.
@@ -52,13 +51,11 @@ public class FileTrackExporter implements TrackExporter {
* @param contentProviderUtils the content provider utils * @param contentProviderUtils the content provider utils
* @param trackWriter the track writer * @param trackWriter the track writer
* @param tracks the tracks * @param tracks the tracks
* @param trackExporterListener the track export listener
*/ */
public FileTrackExporter(ContentProviderUtils contentProviderUtils, TrackWriter trackWriter, Track[] tracks, TrackExporterListener trackExporterListener) { public FileTrackExporter(ContentProviderUtils contentProviderUtils, TrackWriter trackWriter, Track[] tracks) {
this.contentProviderUtils = contentProviderUtils; this.contentProviderUtils = contentProviderUtils;
this.tracks = tracks; this.tracks = tracks;
this.trackWriter = trackWriter; this.trackWriter = trackWriter;
this.trackExporterListener = trackExporterListener;
} }
@Override @Override
@@ -158,9 +155,6 @@ public class FileTrackExporter implements TrackExporter {
// Write the current trackPoint // Write the current trackPoint
trackWriter.writeTrackPoint(trackPoint); trackWriter.writeTrackPoint(trackPoint);
if (trackExporterListener != null) {
trackExporterListener.onProgressUpdate(locationNumber, trackPointIterator.getCount());
}
} else { } else {
if (wroteSegment) { if (wroteSegment) {
trackWriter.writeCloseSegment(); trackWriter.writeCloseSegment();
@@ -1,33 +0,0 @@
/*
* Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package de.dennisguse.opentracks.io.file.exporter;
/**
* Listener for {@link TrackExporter} progress.
*
* @author Jimmy Shih
*/
public interface TrackExporterListener {
/**
* Called to update progress.
*
* @param number the number of {@link de.dennisguse.opentracks.content.data.TrackPoint}s written
* @param max the maximum number of {@link de.dennisguse.opentracks.content.data.TrackPoint}s in a {@link de.dennisguse.opentracks.content.data.Track}, for calculation of
* completion percentage
*/
void onProgressUpdate(int number, int max);
}