1 package cz.cvut.fel.dce.qrscanner.mupdf;
3 import java.util.concurrent.CancellationException;
4 import java.util.concurrent.ExecutionException;
6 // Ideally this would be a subclass of AsyncTask, however the cancel() method is final, and cannot
7 // be overridden. I felt that having two different, but similar cancel methods was a bad idea.
8 public class CancellableAsyncTask<Params, Result>
10 private final AsyncTask<Params, Void, Result> asyncTask;
11 private final CancellableTaskDefinition<Params, Result> ourTask;
13 public void onPreExecute()
18 public void onPostExecute(Result result)
23 public CancellableAsyncTask(final CancellableTaskDefinition<Params, Result> task)
26 throw new IllegalArgumentException();
29 asyncTask = new AsyncTask<Params, Void, Result>()
32 protected Result doInBackground(Params... params)
34 return task.doInBackground(params);
38 protected void onPreExecute()
40 CancellableAsyncTask.this.onPreExecute();
44 protected void onPostExecute(Result result)
46 CancellableAsyncTask.this.onPostExecute(result);
52 public void cancelAndWait()
54 this.asyncTask.cancel(true);
61 catch (InterruptedException e)
64 catch (ExecutionException e)
67 catch (CancellationException e)
74 public void execute(Params ... params)
76 asyncTask.execute(params);