diff --git a/build.gradle b/build.gradle
index b44850f25..67b7a1b90 100644
--- a/build.gradle
+++ b/build.gradle
@@ -152,6 +152,7 @@ dependencies {
implementation 'androidx.core:core-splashscreen:1.0.1'
implementation 'androidx.mediarouter:mediarouter:1.8.1'
implementation 'androidx.core:core-location-altitude:1.0.0-alpha03'
+ implementation 'androidx.work:work-runtime:2.10.2'
androidTestImplementation 'androidx.test:core:1.7.0'
androidTestImplementation 'androidx.test.ext:junit:1.3.0'
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index f0939f3d2..2b3327011 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -405,11 +405,6 @@ limitations under the License.
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />
-
-
{
+ if (workInfo != null) {
+ if (workInfo.getState().isFinished()) {
+ onDeleteFinished();
+ }
+ }
+ });
+
+ workManager.enqueue(deleteRequest);
}
protected abstract void onDeleteConfirmed();
+ protected abstract void onDeleteFinished();
+
protected abstract Track.Id getRecordingTrackId();
}
diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackDeleteService.java b/src/main/java/de/dennisguse/opentracks/services/TrackDeleteService.java
deleted file mode 100644
index 3136ae731..000000000
--- a/src/main/java/de/dennisguse/opentracks/services/TrackDeleteService.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package de.dennisguse.opentracks.services;
-
-import android.app.job.JobService;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.ResultReceiver;
-
-import androidx.annotation.NonNull;
-import androidx.core.app.JobIntentService;
-
-import java.util.ArrayList;
-
-import de.dennisguse.opentracks.data.ContentProviderUtils;
-import de.dennisguse.opentracks.data.models.Track;
-
-public class TrackDeleteService extends JobIntentService {
-
- private static final int JOB_ID = 3;
-
- private static final String EXTRA_RECEIVER = "extra_receiver";
-
- private static final String EXTRA_TRACK_IDS = "extra_track_ids";
-
- public static void enqueue(Context context, TrackDeleteResultReceiver receiver, ArrayList toBeDeleted) {
- Intent intent = new Intent(context, JobService.class);
- intent.putExtra(EXTRA_RECEIVER, receiver);
- intent.putParcelableArrayListExtra(EXTRA_TRACK_IDS, toBeDeleted);
- enqueueWork(context, TrackDeleteService.class, JOB_ID, intent);
- }
-
- @Override
- protected void onHandleWork(@NonNull Intent intent) {
- ResultReceiver resultReceiver = intent.getParcelableExtra(EXTRA_RECEIVER);
- ArrayList trackIds = intent.getParcelableArrayListExtra(EXTRA_TRACK_IDS);
-
- ContentProviderUtils contentProviderUtils = new ContentProviderUtils(this);
- contentProviderUtils.deleteTracks(this, trackIds);
-
- resultReceiver.send(TrackDeleteResultReceiver.RESULT_CODE_SUCCESS, new Bundle());
- }
-
- public static class TrackDeleteResultReceiver extends ResultReceiver {
-
- public static final int RESULT_CODE_SUCCESS = 1;
-
- private final Receiver receiver;
-
- public TrackDeleteResultReceiver(Handler handler, @NonNull Receiver receiver) {
- super(handler);
- this.receiver = receiver;
- }
-
- @Override
- protected void onReceiveResult(int resultCode, Bundle resultData) {
- switch (resultCode) {
- case RESULT_CODE_SUCCESS -> receiver.onDeleteFinished();
- default -> throw new RuntimeException("Unknown resultCode.");
- }
- }
-
- public interface Receiver {
- void onDeleteFinished();
- }
- }
-}
diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackDeletionWorker.java b/src/main/java/de/dennisguse/opentracks/services/TrackDeletionWorker.java
new file mode 100644
index 000000000..6f8cc8fd8
--- /dev/null
+++ b/src/main/java/de/dennisguse/opentracks/services/TrackDeletionWorker.java
@@ -0,0 +1,36 @@
+package de.dennisguse.opentracks.services;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.work.Worker;
+import androidx.work.WorkerParameters;
+
+import java.util.Arrays;
+import java.util.List;
+
+import de.dennisguse.opentracks.data.ContentProviderUtils;
+import de.dennisguse.opentracks.data.models.Track;
+
+public class TrackDeletionWorker extends Worker {
+
+ public static final String TRACKIDS_KEY = "TRACKIDS_KEY";
+
+ private final List trackIds;
+
+ public TrackDeletionWorker(@NonNull Context context, @NonNull WorkerParameters params) {
+ super(context, params);
+
+ trackIds = Arrays.stream(getInputData().getLongArray(TRACKIDS_KEY))
+ .mapToObj(Track.Id::new)
+ .toList();
+ }
+
+ @NonNull
+ @Override
+ public Result doWork() {
+ new ContentProviderUtils(getApplicationContext()).deleteTracks(getApplicationContext(), trackIds);
+
+ return Result.success();
+ }
+}