From 98c31699296d849af213a04ac465e6f924421e23 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Fri, 3 Jul 2020 23:33:16 +0200 Subject: [PATCH] Track deletion UI: code cleanup. --- .../opentracks/AbstractListActivity.java | 16 ++-- .../opentracks/DeleteAsyncTask.java | 87 ------------------- .../opentracks/TrackDeleteActivity.java | 54 ++++++++---- .../provider/ContentProviderUtils.java | 4 +- 4 files changed, 46 insertions(+), 115 deletions(-) delete mode 100644 src/main/java/de/dennisguse/opentracks/DeleteAsyncTask.java diff --git a/src/main/java/de/dennisguse/opentracks/AbstractListActivity.java b/src/main/java/de/dennisguse/opentracks/AbstractListActivity.java index b81a42e7f..d3f010044 100644 --- a/src/main/java/de/dennisguse/opentracks/AbstractListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/AbstractListActivity.java @@ -62,17 +62,15 @@ public abstract class AbstractListActivity extends AbstractActivity implements C @Override public void onConfirmDeleteDone(long[] trackIds) { boolean stopRecording = false; - if (trackIds.length == 1 && trackIds[0] == -1L) { - stopRecording = true; - } else { - long recordingTrackId = PreferencesUtils.getRecordingTrackId(this); - for (long trackId : trackIds) { - if (trackId == recordingTrackId) { - stopRecording = true; - break; - } + + long recordingTrackId = PreferencesUtils.getRecordingTrackId(this); + for (long trackId : trackIds) { + if (trackId == recordingTrackId) { + stopRecording = true; + break; } } + if (stopRecording) { getTrackRecordingServiceConnection().stopRecording(this, false); } diff --git a/src/main/java/de/dennisguse/opentracks/DeleteAsyncTask.java b/src/main/java/de/dennisguse/opentracks/DeleteAsyncTask.java deleted file mode 100644 index ea1089a04..000000000 --- a/src/main/java/de/dennisguse/opentracks/DeleteAsyncTask.java +++ /dev/null @@ -1,87 +0,0 @@ -package de.dennisguse.opentracks; - -/* - * Copyright 2013 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. - */ - -import android.content.Context; -import android.os.AsyncTask; - -import de.dennisguse.opentracks.content.provider.ContentProviderUtils; - -/** - * Async Task to delete tracks. - * - * @author Jimmy Shih - */ -class DeleteAsyncTask extends AsyncTask { - - private final long[] trackIds; - private final Context context; - private TrackDeleteActivity deleteActivity; - // true if the AsyncTask has completed - private boolean completed; - - /** - * Creates an AsyncTask. - * - * @param deleteActivity the activity currently associated with this task - * @param trackIds the track ids to delete. To delete all, set to size 1 with - * trackIds[0] == -1L - */ - public DeleteAsyncTask(TrackDeleteActivity deleteActivity, long[] trackIds) { - this.deleteActivity = deleteActivity; - this.trackIds = trackIds; - context = deleteActivity.getApplicationContext(); - completed = false; - } - - /** - * Sets the current activity associated with this AyncTask. - * - * @param deleteActivity the current activity, can be null - */ - public void setActivity(TrackDeleteActivity deleteActivity) { - this.deleteActivity = deleteActivity; - if (completed && deleteActivity != null) { - deleteActivity.onAsyncTaskCompleted(); - } - } - - @Override - protected Boolean doInBackground(Void... params) { - ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context); - - if (trackIds.length == 1 && trackIds[0] == -1L) { - contentProviderUtils.deleteAllTracks(context); - } else { - for (long id : trackIds) { - if (isCancelled()) { - return false; - } - contentProviderUtils.deleteTrack(context, id); - } - } - return true; - } - - @Override - protected void onPostExecute(Boolean result) { - completed = true; - if (deleteActivity != null) { - deleteActivity.onAsyncTaskCompleted(); - } - } -} diff --git a/src/main/java/de/dennisguse/opentracks/TrackDeleteActivity.java b/src/main/java/de/dennisguse/opentracks/TrackDeleteActivity.java index accdfd932..037579cfb 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackDeleteActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackDeleteActivity.java @@ -16,40 +16,41 @@ package de.dennisguse.opentracks; -import android.app.Activity; import android.content.Intent; +import android.os.AsyncTask; import android.os.Bundle; +import de.dennisguse.opentracks.content.provider.ContentProviderUtils; + /** * An activity for deleting tracks. * * @author Jimmy Shih */ -public class TrackDeleteActivity extends Activity { +public class TrackDeleteActivity extends AbstractActivity { public static final String EXTRA_TRACK_IDS = "track_ids"; + private long[] trackIds; + private DeleteAsyncTask deleteAsyncTask; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.track_delete); - setResult(RESULT_CANCELED); Intent intent = getIntent(); - long[] trackIds = intent.getLongArrayExtra(EXTRA_TRACK_IDS); + trackIds = intent.getLongArrayExtra(EXTRA_TRACK_IDS); - Object retained = getLastNonConfigurationInstance(); - if (retained instanceof DeleteAsyncTask) { - deleteAsyncTask = (DeleteAsyncTask) retained; - deleteAsyncTask.setActivity(this); - } else { - deleteAsyncTask = new DeleteAsyncTask(this, trackIds); - deleteAsyncTask.execute(); - } + deleteAsyncTask = new DeleteAsyncTask(); + } + + @Override + protected void onStart() { + super.onStart(); + deleteAsyncTask.execute(); } @Override @@ -59,13 +60,34 @@ public class TrackDeleteActivity extends Activity { } @Override - public Object onRetainNonConfigurationInstance() { - deleteAsyncTask.setActivity(null); - return deleteAsyncTask; + protected int getLayoutResId() { + return R.layout.track_delete; } public void onAsyncTaskCompleted() { setResult(RESULT_OK); finish(); } + + class DeleteAsyncTask extends AsyncTask { + + @Override + protected Boolean doInBackground(Void... params) { + ContentProviderUtils contentProviderUtils = new ContentProviderUtils(TrackDeleteActivity.this); + + for (long id : trackIds) { + if (isCancelled()) { + return false; + } + contentProviderUtils.deleteTrack(TrackDeleteActivity.this, id); + } + + return true; + } + + @Override + protected void onPostExecute(Boolean result) { + TrackDeleteActivity.this.onAsyncTaskCompleted(); + } + } } diff --git a/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java index 7dd72e6e5..8adfc6636 100644 --- a/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java @@ -165,9 +165,7 @@ public class ContentProviderUtils { return track; } - /** - * Deletes all tracks (including waypoints and trackPoints). - */ + @VisibleForTesting public void deleteAllTracks(Context context) { contentResolver.delete(TrackPointsColumns.CONTENT_URI_BY_ID, null, null); contentResolver.delete(WaypointsColumns.CONTENT_URI, null, null);