aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/util/BackgroundTask.java
diff options
context:
space:
mode:
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.java46
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);
+ }
+ }
+}