diff --git a/src/main/java/ru/touchin/roboswag/components/utils/BaseLifecycleBindable.java b/src/main/java/ru/touchin/roboswag/components/utils/BaseLifecycleBindable.java index 6b23866..6c5682b 100644 --- a/src/main/java/ru/touchin/roboswag/components/utils/BaseLifecycleBindable.java +++ b/src/main/java/ru/touchin/roboswag/components/utils/BaseLifecycleBindable.java @@ -48,6 +48,8 @@ public class BaseLifecycleBindable implements LifecycleBindable { private final BehaviorSubject isCreatedSubject = BehaviorSubject.create(); @NonNull private final BehaviorSubject isStartedSubject = BehaviorSubject.create(); + @NonNull + private final BehaviorSubject isInAfterSaving = BehaviorSubject.create(false); /** * Call it on parent's onCreate method. @@ -71,18 +73,14 @@ public class BaseLifecycleBindable implements LifecycleBindable { * In that case onResume will be called after onSaveInstanceState so lifecycle object is becoming started. */ public void onResume() { - if (!isStartedSubject.hasValue() || !isStartedSubject.getValue()) { - isStartedSubject.onNext(true); - } + isInAfterSaving.onNext(false); } /** * Call it on parent's onSaveInstanceState method. */ public void onSaveInstanceState() { - if (!isStartedSubject.hasValue() || isStartedSubject.getValue()) { - isStartedSubject.onNext(false); - } + isInAfterSaving.onNext(true); } /** @@ -129,7 +127,9 @@ public class BaseLifecycleBindable implements LifecycleBindable { @NonNull final Action1 onNextAction, @NonNull final Action1 onErrorAction, @NonNull final Action0 onCompletedAction) { - return until(observable, isStartedSubject.map(started -> !started), onNextAction, onErrorAction, onCompletedAction); + return until(observable, isStartedSubject.map(started -> !started) + .delay(item -> isInAfterSaving.filter(inAfterSaving -> !inAfterSaving)), + onNextAction, onErrorAction, onCompletedAction); } @NonNull @@ -151,7 +151,9 @@ public class BaseLifecycleBindable implements LifecycleBindable { public Subscription untilStop(@NonNull final Single single, @NonNull final Action1 onSuccessAction, @NonNull final Action1 onErrorAction) { - return until(single.toObservable(), isStartedSubject.map(started -> !started), onSuccessAction, onErrorAction, Actions.empty()); + return until(single.toObservable(), isStartedSubject.map(started -> !started) + .delay(item -> isInAfterSaving.filter(inAfterSaving -> !inAfterSaving)), + onSuccessAction, onErrorAction, Actions.empty()); } @NonNull @@ -174,7 +176,9 @@ public class BaseLifecycleBindable implements LifecycleBindable { public Subscription untilStop(@NonNull final Completable completable, @NonNull final Action0 onCompletedAction, @NonNull final Action1 onErrorAction) { - return until(completable.toObservable(), isStartedSubject.map(started -> !started), Actions.empty(), onErrorAction, onCompletedAction); + return until(completable.toObservable(), isStartedSubject.map(started -> !started) + .delay(item -> isInAfterSaving.filter(inAfterSaving -> !inAfterSaving)), + Actions.empty(), onErrorAction, onCompletedAction); } @NonNull