From d106993f2dc1c822f43133b14749f22aa857aad6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n=20Mart=C3=ADnez?= Date: Sun, 27 Jun 2021 18:57:44 +0200 Subject: [PATCH] Race condition fixed: deleting a recording track with post-execution export on. Fixes #847. --- .../AbstractTrackDeleteActivity.java | 20 +++++++++---------- src/main/res/values/strings.xml | 1 + 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/AbstractTrackDeleteActivity.java b/src/main/java/de/dennisguse/opentracks/AbstractTrackDeleteActivity.java index bd0317ed5..097a13ae4 100644 --- a/src/main/java/de/dennisguse/opentracks/AbstractTrackDeleteActivity.java +++ b/src/main/java/de/dennisguse/opentracks/AbstractTrackDeleteActivity.java @@ -16,10 +16,14 @@ package de.dennisguse.opentracks; +import android.widget.Toast; + import androidx.annotation.Nullable; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.stream.Collectors; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.fragments.ConfirmDeleteDialogFragment; @@ -70,23 +74,17 @@ public abstract class AbstractTrackDeleteActivity extends AbstractActivity imple @Override public void onConfirmDeleteDone(Track.Id... trackIds) { - boolean stopRecording = false; + ArrayList trackIdList = new ArrayList<>(Arrays.asList(trackIds)) + .stream().filter(trackId -> !trackId.equals(getRecordingTrackId())).collect(Collectors.toCollection(ArrayList::new)); onDeleteConfirmed(); - for (Track.Id trackId : trackIds) { - if (trackId.equals(getRecordingTrackId())) { - stopRecording = true; - break; - } - } - - if (stopRecording) { - getTrackRecordingServiceConnection().stopRecording(this); + if (trackIds.length > trackIdList.size()) { + Toast.makeText(this, getString(R.string.track_delete_not_recording), Toast.LENGTH_LONG).show(); } trackDeleteServiceConnection = new TrackDeleteServiceConnection(this); - trackDeleteServiceConnection.startAndBind(this, new ArrayList<>(Arrays.asList(trackIds))); + trackDeleteServiceConnection.startAndBind(this, trackIdList); } /** diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index c633df4ad..f80aa7198 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -478,6 +478,7 @@ limitations under the License. The selected tracks and their markers will be permanently deleted from the device. Deleting… %1$d/%2$d + This track cannot be deleted as it is currently recorded. Chart Stats