diff --git a/build.gradle b/build.gradle index 12362f6..678076d 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ repositories { dependencies { compile project(path: ':libraries:components') - compile 'net.danlew:android.joda:2.9.4.1' + compile 'net.danlew:android.joda:2.9.7' compile 'com.android.support:multidex:1.0.1' compile 'io.reactivex:rxandroid:1.2.1' diff --git a/src/main/java/ru/touchin/templates/TouchinService.java b/src/main/java/ru/touchin/templates/TouchinService.java index 1387c53..f13c11d 100644 --- a/src/main/java/ru/touchin/templates/TouchinService.java +++ b/src/main/java/ru/touchin/templates/TouchinService.java @@ -35,6 +35,7 @@ import rx.Observable; import rx.Subscriber; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; +import rx.exceptions.OnErrorThrowable; import rx.functions.Action0; import rx.functions.Action1; import rx.functions.Actions; @@ -168,12 +169,24 @@ public abstract class TouchinService extends Service { @NonNull final Action1 onNextAction, @NonNull final Action1 onErrorAction, @NonNull final Action0 onCompletedAction) { + final Observable actualObservable; + if (onNextAction == Actions.empty() && onNextAction == Actions.empty() && onNextAction == Actions.empty()) { + actualObservable = observable.doOnCompleted(onCompletedAction); + } else { + actualObservable = observable.observeOn(AndroidSchedulers.mainThread()).doOnCompleted(onCompletedAction); + } + return isCreatedSubject.first() - .switchMap(created -> created - ? observable.observeOn(AndroidSchedulers.mainThread()).doOnCompleted(onCompletedAction) - : Observable.empty()) + .switchMap(created -> created ? actualObservable : Observable.empty()) .takeUntil(conditionSubject.filter(condition -> condition)) - .subscribe(onNextAction, onErrorAction); + .subscribe(onNextAction, throwable -> { + final boolean isRxError = throwable instanceof OnErrorThrowable; + if ((!isRxError && throwable instanceof RuntimeException) + || (isRxError && throwable.getCause() instanceof RuntimeException)) { + Lc.assertion(throwable); + } + onErrorAction.call(throwable); + }); } @SuppressWarnings("CPD-END")