diff options
Diffstat (limited to 'src/github/daneren2005/dsub/util/BackgroundTask.java')
-rw-r--r-- | src/github/daneren2005/dsub/util/BackgroundTask.java | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/github/daneren2005/dsub/util/BackgroundTask.java b/src/github/daneren2005/dsub/util/BackgroundTask.java index fbeaea74..4760577f 100644 --- a/src/github/daneren2005/dsub/util/BackgroundTask.java +++ b/src/github/daneren2005/dsub/util/BackgroundTask.java @@ -45,6 +45,7 @@ public abstract class BackgroundTask<T> implements ProgressListener { private final Context context; protected boolean cancelled = false; + protected OnCancelListener cancelListener; protected Task task; private static final int DEFAULT_CONCURRENCY = 5; @@ -138,10 +139,24 @@ public abstract class BackgroundTask<T> implements ProgressListener { if(task != null) { task.cancel(); } + if(cancelListener != null) { + cancelListener.onCancel(); + } } - protected boolean isCancelled() { + public boolean isCancelled() { return cancelled; } + public void setOnCancelListener(OnCancelListener listener) { + cancelListener = listener; + } + + public boolean isRunning() { + if(task == null) { + return false; + } else { + return task.isRunning(); + } + } @Override public abstract void updateProgress(final String message); @@ -172,8 +187,11 @@ public abstract class BackgroundTask<T> implements ProgressListener { @Override public void run() { onDone(result); + taskStart.set(false); } }); + } else { + taskStart.set(false); } } catch(InterruptedException interrupt) { if(taskStart.get()) { @@ -191,11 +209,14 @@ public abstract class BackgroundTask<T> implements ProgressListener { public void run() { try { onError(t); + taskStart.set(false); } catch(Exception e) { // Don't care } } }); + } else { + taskStart.set(false); } } } @@ -212,6 +233,10 @@ public abstract class BackgroundTask<T> implements ProgressListener { public void onError(Throwable t) { error(t); } + + public boolean isRunning() { + return taskStart.get(); + } } private class TaskRunnable implements Runnable { @@ -238,4 +263,7 @@ public abstract class BackgroundTask<T> implements ProgressListener { } } + public static interface OnCancelListener { + void onCancel(); + } } |