aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoushik Dutta <koushd@gmail.com>2014-06-23 18:57:05 -0700
committerKoushik Dutta <koushd@gmail.com>2014-06-23 18:57:05 -0700
commit665d4ffe272aae42d525c4f581e4dfc1aacf9881 (patch)
tree5717fb898310ad13222cc4f3d5c428b9631f0789
parent3810a08ce280a7a241d12e4145a88a0257ad6612 (diff)
downloadAndroidAsync-665d4ffe272aae42d525c4f581e4dfc1aacf9881.tar.gz
AndroidAsync-665d4ffe272aae42d525c4f581e4dfc1aacf9881.tar.bz2
AndroidAsync-665d4ffe272aae42d525c4f581e4dfc1aacf9881.zip
Future refactoring and add ConvertFuture.
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/future/ConvertFuture.java13
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/future/HandlerFuture.java40
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/future/SimpleFuture.java13
3 files changed, 49 insertions, 17 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/future/ConvertFuture.java b/AndroidAsync/src/com/koushikdutta/async/future/ConvertFuture.java
new file mode 100644
index 0000000..b07ac43
--- /dev/null
+++ b/AndroidAsync/src/com/koushikdutta/async/future/ConvertFuture.java
@@ -0,0 +1,13 @@
+package com.koushikdutta.async.future;
+
+/**
+ * Created by koush on 6/21/14.
+ */
+public abstract class ConvertFuture<T, F> extends TransformFuture<T, F> {
+ @Override
+ protected final void transform(F result) throws Exception {
+ setComplete(convert(result));
+ }
+
+ protected abstract Future<T> convert(F result) throws Exception;
+}
diff --git a/AndroidAsync/src/com/koushikdutta/async/future/HandlerFuture.java b/AndroidAsync/src/com/koushikdutta/async/future/HandlerFuture.java
index 81c1822..d03eaf9 100644
--- a/AndroidAsync/src/com/koushikdutta/async/future/HandlerFuture.java
+++ b/AndroidAsync/src/com/koushikdutta/async/future/HandlerFuture.java
@@ -1,31 +1,39 @@
package com.koushikdutta.async.future;
import android.os.Handler;
+import android.os.Looper;
/**
* Created by koush on 12/25/13.
*/
-public class HandlerFuture<T> extends TransformFuture<T, T> {
- Handler handler = new Handler();
+public class HandlerFuture<T> extends SimpleFuture<T> {
+ Handler handler;
- @Override
- protected void error(final Exception e) {
- handler.post(new Runnable() {
- @Override
- public void run() {
- HandlerFuture.super.error(e);
- }
- });
+ public HandlerFuture() {
+ Looper looper = Looper.myLooper();
+ if (looper == null)
+ looper = Looper.getMainLooper();
+ handler = new Handler(looper);
}
@Override
- protected void transform(final T result) throws Exception {
- handler.post(new Runnable() {
+ public SimpleFuture<T> setCallback(final FutureCallback<T> callback) {
+ FutureCallback<T> wrapped = new FutureCallback<T>() {
@Override
- public void run() {
- if (!isCancelled())
- setComplete(result);
+ public void onCompleted(final Exception e, final T result) {
+ if (Looper.myLooper() == handler.getLooper()) {
+ callback.onCompleted(e, result);
+ return;
+ }
+
+ handler.post(new Runnable() {
+ @Override
+ public void run() {
+ onCompleted(e, result);
+ }
+ });
}
- });
+ };
+ return super.setCallback(wrapped);
}
}
diff --git a/AndroidAsync/src/com/koushikdutta/async/future/SimpleFuture.java b/AndroidAsync/src/com/koushikdutta/async/future/SimpleFuture.java
index dd33d54..11f5df3 100644
--- a/AndroidAsync/src/com/koushikdutta/async/future/SimpleFuture.java
+++ b/AndroidAsync/src/com/koushikdutta/async/future/SimpleFuture.java
@@ -14,6 +14,17 @@ public class SimpleFuture<T> extends SimpleCancellable implements DependentFutur
boolean silent;
FutureCallback<T> callback;
+ public SimpleFuture() {
+ }
+
+ public SimpleFuture(T value) {
+ setComplete(value);
+ }
+
+ public SimpleFuture(Exception e) {
+ setComplete(e);
+ }
+
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
return cancel();
@@ -166,7 +177,7 @@ public class SimpleFuture<T> extends SimpleCancellable implements DependentFutur
}
@Override
- public <C extends FutureCallback<T>> C then(C callback) {
+ public final <C extends FutureCallback<T>> C then(C callback) {
if (callback instanceof DependentCancellable)
((DependentCancellable)callback).setParent(this);
setCallback(callback);