forked from upstream-mirrors/OpenTracks
TrackDelete: use a Thread and always require TrackIds.
This commit is contained in:
@@ -17,7 +17,6 @@
|
||||
package de.dennisguse.opentracks;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
@@ -34,7 +33,7 @@ public class TrackDeleteActivity extends AbstractActivity {
|
||||
|
||||
private long[] trackIds;
|
||||
|
||||
private DeleteAsyncTask deleteAsyncTask;
|
||||
private Thread deleteThread;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
@@ -44,20 +43,30 @@ public class TrackDeleteActivity extends AbstractActivity {
|
||||
|
||||
Intent intent = getIntent();
|
||||
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
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
deleteAsyncTask.execute();
|
||||
deleteThread.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
deleteAsyncTask.cancel(true);
|
||||
deleteThread.interrupt();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -70,26 +79,4 @@ public class TrackDeleteActivity extends AbstractActivity {
|
||||
setResult(RESULT_OK);
|
||||
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);
|
||||
return true;
|
||||
case R.id.list_context_menu_delete:
|
||||
if (trackIds.length > 1 && trackIds.length == listView.getCount()) {
|
||||
trackIds = new long[]{-1L};
|
||||
}
|
||||
deleteTracks(trackIds);
|
||||
return true;
|
||||
case R.id.list_context_menu_select_all:
|
||||
|
||||
@@ -43,7 +43,7 @@ public class ConfirmDeleteDialogFragment extends DialogFragment {
|
||||
/**
|
||||
* 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) {
|
||||
Bundle bundle = new Bundle();
|
||||
|
||||
Reference in New Issue
Block a user