forked from upstream-mirrors/OpenTracks
Refactored ExportServiceResultReceiver to make TrackRecordingService simpler.
This commit is contained in:
@@ -310,37 +310,31 @@ public class ExportActivity extends FragmentActivity implements ExportServiceRes
|
|||||||
viewBinding.exportProgressAlertIcon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_dialog_success_24dp));
|
viewBinding.exportProgressAlertIcon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_dialog_success_24dp));
|
||||||
viewBinding.exportProgressAlertMsg.setText(getString(R.string.generic_completed));
|
viewBinding.exportProgressAlertMsg.setText(getString(R.string.generic_completed));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceiveResult(int resultCode, Bundle resultData) {
|
public void onExportSuccess(Track.Id trackId) {
|
||||||
if (resultData == null) {
|
|
||||||
throw new RuntimeException(TAG + ": onReceiveResult resultData NULL");
|
|
||||||
}
|
|
||||||
|
|
||||||
Track.Id trackId = resultData.getParcelable(ExportServiceResultReceiver.RESULT_EXTRA_TRACK_ID);
|
|
||||||
Track track = contentProviderUtils.getTrack(trackId);
|
Track track = contentProviderUtils.getTrack(trackId);
|
||||||
|
|
||||||
switch (resultCode) {
|
if (ExportUtils.isExportFileExists(track.getUuid(), trackFileFormat.getExtension(), directoryFiles)) {
|
||||||
case ExportServiceResultReceiver.RESULT_CODE_ERROR:
|
trackExportOverwrittenCount++;
|
||||||
trackExportErrorCount++;
|
} else {
|
||||||
trackErrors.add(track.getName());
|
trackExportSuccessCount++;
|
||||||
break;
|
|
||||||
case ExportServiceResultReceiver.RESULT_CODE_SUCCESS:
|
|
||||||
if (ExportUtils.isExportFileExists(track.getUuid(), trackFileFormat.getExtension(), directoryFiles)) {
|
|
||||||
trackExportOverwrittenCount++;
|
|
||||||
} else {
|
|
||||||
trackExportSuccessCount++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new RuntimeException(TAG + ": export service result code invalid: " + resultCode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onExportCompleted(track);
|
onExportCompleted(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExportError(Track.Id trackId) {
|
||||||
|
Track track = contentProviderUtils.getTrack(trackId);
|
||||||
|
|
||||||
|
trackExportErrorCount++;
|
||||||
|
trackErrors.add(track.getName());
|
||||||
|
|
||||||
|
onExportCompleted(track);
|
||||||
|
}
|
||||||
|
|
||||||
private void conflict(Track track) {
|
private void conflict(Track track) {
|
||||||
PendingConflict newConflict = new PendingConflict(track);
|
PendingConflict newConflict = new PendingConflict(track);
|
||||||
conflictsQueue.add(newConflict);
|
conflictsQueue.add(newConflict);
|
||||||
|
|||||||
+16
-2
@@ -6,6 +6,8 @@ import android.os.ResultReceiver;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.data.models.Track;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new ResultReceive to receive results.
|
* Create a new ResultReceive to receive results.
|
||||||
* Your {@link #onReceiveResult} method will be called from the thread running <var>handler</var> if given, or from an arbitrary thread if null.
|
* Your {@link #onReceiveResult} method will be called from the thread running <var>handler</var> if given, or from an arbitrary thread if null.
|
||||||
@@ -26,10 +28,22 @@ public class ExportServiceResultReceiver extends ResultReceiver {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
protected void onReceiveResult(int resultCode, Bundle resultData) {
|
||||||
receiver.onReceiveResult(resultCode, resultData);
|
Track.Id trackId = resultData.getParcelable(ExportServiceResultReceiver.RESULT_EXTRA_TRACK_ID);
|
||||||
|
switch (resultCode) {
|
||||||
|
case RESULT_CODE_SUCCESS:
|
||||||
|
receiver.onExportSuccess(trackId);
|
||||||
|
case RESULT_CODE_ERROR:
|
||||||
|
receiver.onExportError(trackId);
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Unknown resultCode.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface Receiver {
|
public interface Receiver {
|
||||||
void onReceiveResult(int resultCode, Bundle resultData);
|
default void onExportSuccess(Track.Id trackId) {
|
||||||
|
}
|
||||||
|
|
||||||
|
default void onExportError(Track.Id trackId) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ package de.dennisguse.opentracks.services;
|
|||||||
|
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.PowerManager.WakeLock;
|
import android.os.PowerManager.WakeLock;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -31,28 +30,19 @@ import androidx.lifecycle.MutableLiveData;
|
|||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.data.CustomContentProvider;
|
|
||||||
import de.dennisguse.opentracks.data.models.Distance;
|
import de.dennisguse.opentracks.data.models.Distance;
|
||||||
import de.dennisguse.opentracks.data.models.Marker;
|
import de.dennisguse.opentracks.data.models.Marker;
|
||||||
import de.dennisguse.opentracks.data.models.Track;
|
import de.dennisguse.opentracks.data.models.Track;
|
||||||
import de.dennisguse.opentracks.data.models.TrackPoint;
|
import de.dennisguse.opentracks.data.models.TrackPoint;
|
||||||
import de.dennisguse.opentracks.io.file.exporter.ExportServiceResultReceiver;
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet;
|
||||||
import de.dennisguse.opentracks.services.announcement.VoiceAnnouncementManager;
|
import de.dennisguse.opentracks.services.announcement.VoiceAnnouncementManager;
|
||||||
import de.dennisguse.opentracks.services.handlers.EGM2008CorrectionManager;
|
import de.dennisguse.opentracks.services.handlers.EGM2008CorrectionManager;
|
||||||
import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
|
import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
|
||||||
import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
|
import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
|
||||||
import de.dennisguse.opentracks.settings.SettingsActivity;
|
|
||||||
import de.dennisguse.opentracks.util.ExportUtils;
|
import de.dennisguse.opentracks.util.ExportUtils;
|
||||||
import de.dennisguse.opentracks.util.SystemUtils;
|
import de.dennisguse.opentracks.util.SystemUtils;
|
||||||
|
|
||||||
/**
|
public class TrackRecordingService extends Service implements TrackPointCreator.Callback {
|
||||||
* A background service that registers a location listener and records track points.
|
|
||||||
* Track points are saved to the {@link CustomContentProvider}.
|
|
||||||
*
|
|
||||||
* @author Leif Hendrik Wilden
|
|
||||||
*/
|
|
||||||
public class TrackRecordingService extends Service implements TrackPointCreator.Callback, ExportServiceResultReceiver.Receiver {
|
|
||||||
|
|
||||||
private static final String TAG = TrackRecordingService.class.getSimpleName();
|
private static final String TAG = TrackRecordingService.class.getSimpleName();
|
||||||
|
|
||||||
@@ -265,7 +255,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
|
|||||||
|
|
||||||
endRecording(true);
|
endRecording(true);
|
||||||
|
|
||||||
ExportUtils.postWorkoutExport(this, trackId, new ExportServiceResultReceiver(new Handler(), this));
|
ExportUtils.postWorkoutExport(this, trackId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
|
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
|
||||||
@@ -419,15 +409,4 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
|
|||||||
recordingStatus = status;
|
recordingStatus = status;
|
||||||
recordingStatusObservable.postValue(recordingStatus);
|
recordingStatusObservable.postValue(recordingStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onReceiveResult(final int resultCode, final Bundle resultData) {
|
|
||||||
Log.w(TAG, "onReceiveResult: " + resultCode);
|
|
||||||
if (resultCode != ExportServiceResultReceiver.RESULT_CODE_SUCCESS) {
|
|
||||||
Intent intent = new Intent(this, SettingsActivity.class);
|
|
||||||
intent.putExtra(SettingsActivity.EXTRAS_CHECK_EXPORT_DIRECTORY, true);
|
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -157,9 +157,7 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat
|
|||||||
return new Pair<>(currentTrackPoint, sensorDataSet);
|
return new Pair<>(currentTrackPoint, sensorDataSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO Limit visibility
|
Instant createNow() {
|
||||||
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
|
|
||||||
public Instant createNow() {
|
|
||||||
return Instant.now(clock);
|
return Instant.now(clock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ package de.dennisguse.opentracks.util;
|
|||||||
|
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Handler;
|
||||||
import android.provider.DocumentsContract;
|
import android.provider.DocumentsContract;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
@@ -25,12 +27,13 @@ import de.dennisguse.opentracks.io.file.exporter.ExportService;
|
|||||||
import de.dennisguse.opentracks.io.file.exporter.ExportServiceResultReceiver;
|
import de.dennisguse.opentracks.io.file.exporter.ExportServiceResultReceiver;
|
||||||
import de.dennisguse.opentracks.io.file.exporter.TrackExporter;
|
import de.dennisguse.opentracks.io.file.exporter.TrackExporter;
|
||||||
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||||
|
import de.dennisguse.opentracks.settings.SettingsActivity;
|
||||||
|
|
||||||
public class ExportUtils {
|
public class ExportUtils {
|
||||||
|
|
||||||
private static final String TAG = ExportUtils.class.getSimpleName();
|
private static final String TAG = ExportUtils.class.getSimpleName();
|
||||||
|
|
||||||
public static void postWorkoutExport(Context context, Track.Id trackId, ExportServiceResultReceiver resultReceiver) {
|
public static void postWorkoutExport(Context context, Track.Id trackId) {
|
||||||
if (PreferencesUtils.shouldInstantExportAfterWorkout()) {
|
if (PreferencesUtils.shouldInstantExportAfterWorkout()) {
|
||||||
TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat();
|
TrackFileFormat trackFileFormat = PreferencesUtils.getExportTrackFileFormat();
|
||||||
DocumentFile directory = IntentUtils.toDocumentFile(context, PreferencesUtils.getDefaultExportDirectoryUri());
|
DocumentFile directory = IntentUtils.toDocumentFile(context, PreferencesUtils.getDefaultExportDirectoryUri());
|
||||||
@@ -40,6 +43,16 @@ public class ExportUtils {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ExportServiceResultReceiver resultReceiver = new ExportServiceResultReceiver(new Handler(), new ExportServiceResultReceiver.Receiver() {
|
||||||
|
@Override
|
||||||
|
public void onExportError(Track.Id trackId) {
|
||||||
|
Intent intent = new Intent(context, SettingsActivity.class);
|
||||||
|
intent.putExtra(SettingsActivity.EXTRAS_CHECK_EXPORT_DIRECTORY, true);
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
context.startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
ExportService.enqueue(context, resultReceiver, trackId, trackFileFormat, directory.getUri());
|
ExportService.enqueue(context, resultReceiver, trackId, trackFileFormat, directory.getUri());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user