package com.stanfy.enroscar.async.internal; import com.stanfy.enroscar.async.AsyncObserver; import rx.Observable; import rx.Subscriber; /** * Provides tools for creating special {@link rx.Observable}s. * @author Roman Mazur - Stanfy (http://stanfy.com) */ public final class ObservableTools { private ObservableTools() { /* hidden */ } public static <D> Observable<D> loaderObservable(final int loaderId, final LoaderDescription description, final boolean destroyOnFinish) { return Observable.create(new Observable.OnSubscribe<D>() { @Override public void call(final Subscriber<? super D> subscriber) { description.addObserver(loaderId, new AsyncObserver<D>() { @Override public void onError(final Throwable e) { subscriber.onError(e); } @Override public void onResult(final D data) { if (!subscriber.isUnsubscribed()) { subscriber.onNext(data); } } @Override public void onReset() { if (!subscriber.isUnsubscribed()) { subscriber.onCompleted(); } } }, destroyOnFinish); } }); } }