diff options
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/util/BackgroundTask.java')
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/util/BackgroundTask.java | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/util/BackgroundTask.java b/app/src/main/java/net/lacolaco/smileessence/util/BackgroundTask.java new file mode 100644 index 00000000..fce3470e --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/util/BackgroundTask.java @@ -0,0 +1,46 @@ +package net.lacolaco.smileessence.util; + +import android.os.AsyncTask; + +public abstract class BackgroundTask<Result, Progress> extends AsyncTask<Void, Progress, Result> { + private Consumer<Result> then; + private Consumer<Progress> progress; + + public BackgroundTask<Result, Progress> onDone(Consumer<Result> cb) { + this.then = cb; + return this; + } + + public BackgroundTask<Result, Progress> onProgress(Consumer<Progress> cb) { + this.progress = cb; + return this; + } + + public BackgroundTask<Result, Progress> onDoneUI(Consumer<Result> cb) { + return onDone(r -> new UIHandler().post(() -> cb.accept(r))); + } + + public BackgroundTask<Result, Progress> onProgressUI(Consumer<Progress> cb) { + return onProgress(p -> new UIHandler().post(() -> cb.accept(p))); + } + + public boolean cancel() { + return cancel(true); + } + + @Override + protected final void onProgressUpdate(Progress... values) { + for (Progress value : values) { + if (!isCancelled()) { + progress.accept(value); + } + } + } + + @Override + protected final void onPostExecute(Result result) { + if (!isCancelled()) { + then.accept(result); + } + } +} |