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 SimpleFuture<T> {
Handler handler;
public HandlerFuture() {
Looper looper = Looper.myLooper();
if (looper == null)
looper = Looper.getMainLooper();
handler = new Handler(looper);
}
@Override
public SimpleFuture<T> setCallback(final FutureCallback<T> callback) {
FutureCallback<T> wrapped = new FutureCallback<T>() {
@Override
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);
}
}