package starter.kit.util; import android.content.Context; import rx.Observable; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import static rx.android.schedulers.AndroidSchedulers.mainThread; public final class RxUtils { private RxUtils() { } public static <T> Observable.Transformer<T, T> progressTransformer(final ProgressInterface progress) { return observable -> observable.doOnSubscribe(progress::showProgress) .subscribeOn(mainThread()) .doOnTerminate(progress::hideProgress) .observeOn(mainThread()); } /** * 显示并隐藏Hud * * @param hud HudInterface * @param <T> the type of the items emitted by the Observable * @return Observable */ public static <T> Observable.Transformer<T, T> hudTransformer(final HudInterface hud) { return observable -> observable.doOnSubscribe(hud::showHud) .subscribeOn(mainThread()) .doOnTerminate(RxUtils::dismissHud) .observeOn(mainThread()); } /** * 隐藏Hud * @return Subscription */ public static Subscription dismissHud() { return Observable.empty() .observeOn(AndroidSchedulers.mainThread()) .doOnTerminate(() -> Hud.getInstance().dismissHud()) .subscribe(); } /** * 显示Hud, 不可以取消 * @param context theme context * @param message message with hud * @return Subscription */ public static Subscription showHud(Context context, String message) { return Observable.just(message) .observeOn(mainThread()) .subscribe(msg -> { Hud.getInstance().showHud(context, message); }); } /** * 显示Hud,可以取消 * @param context theme context * @param message message with hud * @param callback dismiss callback * @return Subscription */ public static Subscription showHud(Context context, String message, Hud.HudCallback callback) { return Observable.just(message) .observeOn(mainThread()) .subscribe(msg -> { Hud.getInstance().showHud(context, message, callback); }); } /** * unsubscribe Subscription * @param subscription Subscription */ public static void unsubscribe(Subscription subscription) { if (subscription != null && subscription.isUnsubscribed()) { subscription.unsubscribe(); } } }