TrackDelete: use a Thread and always require TrackIds.

This commit is contained in:
Dennis Guse
2020-07-07 18:25:57 +02:00
parent 51e573e475
commit 4ded3c6bc8
3 changed files with 15 additions and 31 deletions
@@ -17,7 +17,6 @@
package de.dennisguse.opentracks; package de.dennisguse.opentracks;
import android.content.Intent; import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
@@ -34,7 +33,7 @@ public class TrackDeleteActivity extends AbstractActivity {
private long[] trackIds; private long[] trackIds;
private DeleteAsyncTask deleteAsyncTask; private Thread deleteThread;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
@@ -44,20 +43,30 @@ public class TrackDeleteActivity extends AbstractActivity {
Intent intent = getIntent(); Intent intent = getIntent();
trackIds = intent.getLongArrayExtra(EXTRA_TRACK_IDS); trackIds = intent.getLongArrayExtra(EXTRA_TRACK_IDS);
deleteThread = new Thread(() -> {
ContentProviderUtils contentProviderUtils = new ContentProviderUtils(TrackDeleteActivity.this);
deleteAsyncTask = new DeleteAsyncTask(); for (long id : trackIds) {
if (Thread.interrupted()) {
return;
}
contentProviderUtils.deleteTrack(TrackDeleteActivity.this, id);
}
runOnUiThread(TrackDeleteActivity.this::onAsyncTaskCompleted);
});
} }
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
deleteAsyncTask.execute(); deleteThread.start();
} }
@Override @Override
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
deleteAsyncTask.cancel(true); deleteThread.interrupt();
} }
@Override @Override
@@ -70,26 +79,4 @@ public class TrackDeleteActivity extends AbstractActivity {
setResult(RESULT_OK); setResult(RESULT_OK);
finish(); finish();
} }
class DeleteAsyncTask extends AsyncTask<Void, Integer, Boolean> {
@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();
}
}
} }
@@ -495,9 +495,6 @@ public class TrackListActivity extends AbstractListActivity implements ConfirmDe
startActivity(intent); startActivity(intent);
return true; return true;
case R.id.list_context_menu_delete: case R.id.list_context_menu_delete:
if (trackIds.length > 1 && trackIds.length == listView.getCount()) {
trackIds = new long[]{-1L};
}
deleteTracks(trackIds); deleteTracks(trackIds);
return true; return true;
case R.id.list_context_menu_select_all: case R.id.list_context_menu_select_all:
@@ -43,7 +43,7 @@ public class ConfirmDeleteDialogFragment extends DialogFragment {
/** /**
* Create a new instance. * Create a new instance.
* *
* @param trackIds list of track ids to delete. To delete all, set to size 1 with trackIds[0] == -1L * @param trackIds list of track ids to delete.
*/ */
public static void showDialog(FragmentManager fragmentManager, long[] trackIds) { public static void showDialog(FragmentManager fragmentManager, long[] trackIds) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();