package com.apollographql.apollo;
import android.os.Handler;
import com.apollographql.apollo.exception.ApolloException;
import com.apollographql.apollo.exception.ApolloHttpException;
import com.apollographql.apollo.exception.ApolloNetworkException;
import javax.annotation.Nonnull;
import static com.apollographql.apollo.api.internal.Utils.checkNotNull;
/**
* Android wrapper for {@link ApolloPrefetch.Callback} to be operated on specified {@link Handler}
*/
public final class ApolloPrefetchCallback extends ApolloPrefetch.Callback {
private final ApolloPrefetch.Callback delegate;
private final Handler handler;
/**
* Wraps {@code callback} to be be operated on specified {@code handler}
*
* @param callback original callback to delegates calls
* @param handler the callback will be run on the thread to which this handler is attached
*/
public static <T> ApolloPrefetchCallback wrap(@Nonnull ApolloPrefetch.Callback callback, @Nonnull Handler handler) {
return new ApolloPrefetchCallback(callback, handler);
}
/**
* @param callback original callback to delegates calls
* @param handler the callback will be run on the thread to which this handler is attached
*/
public ApolloPrefetchCallback(@Nonnull ApolloPrefetch.Callback callback, @Nonnull Handler handler) {
this.delegate = checkNotNull(callback, "callback == null");
this.handler = checkNotNull(handler, "handler == null");
}
@Override public void onSuccess() {
handler.post(new Runnable() {
@Override public void run() {
delegate.onSuccess();
}
});
}
@Override public void onFailure(@Nonnull final ApolloException e) {
handler.post(new Runnable() {
@Override public void run() {
delegate.onFailure(e);
}
});
}
@Override public void onHttpError(@Nonnull final ApolloHttpException e) {
handler.post(new Runnable() {
@Override public void run() {
delegate.onHttpError(e);
}
});
}
@Override public void onNetworkError(@Nonnull final ApolloNetworkException e) {
handler.post(new Runnable() {
@Override public void run() {
delegate.onNetworkError(e);
}
});
}
}