From 311db7b0741525fa265708dee3dfd478495c13e1 Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Wed, 8 Jun 2016 20:11:04 +0300 Subject: [PATCH] subscription in construction bug fixed --- .../roboswag/components/navigation/ViewController.java | 9 ++++++++- .../navigation/fragments/ViewControllerFragment.java | 9 ++++++++- .../components/observables/ui/BaseUiBindable.java | 6 ++++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java b/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java index f5860d8..9237cbd 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java @@ -66,7 +66,6 @@ public class ViewController, this.activity = (TActivity) creationContext.activity; this.fragment = (TFragment) creationContext.fragment; this.container = creationContext.container; - baseUiBindable.onCreate(); } /** @@ -158,6 +157,14 @@ public class ViewController, return baseUiBindable.untilDestroy(observable); } + /** + * Calls right after construction of {@link ViewController}. + * Happens at {@link ViewControllerFragment#onActivityCreated(View, ViewControllerActivity, Bundle)}. + */ + public void onCreate() { + baseUiBindable.onCreate(); + } + /** * Calls when {@link ViewController} have started. * Happens at {@link ViewControllerFragment#onStart(View, ViewControllerActivity)}. diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.java b/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.java index f7f765a..5b68ed2 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/fragments/ViewControllerFragment.java @@ -140,7 +140,14 @@ public abstract class ViewControllerFragment { + final ViewController newViewController = createViewController(activity, viewInfo); + if (newViewController != null) { + newViewController.onCreate(); + } + return newViewController; + }) .subscribe(this::onViewControllerChanged, Lc::assertion); } diff --git a/src/main/java/ru/touchin/roboswag/components/observables/ui/BaseUiBindable.java b/src/main/java/ru/touchin/roboswag/components/observables/ui/BaseUiBindable.java index 91caf02..9c0de89 100644 --- a/src/main/java/ru/touchin/roboswag/components/observables/ui/BaseUiBindable.java +++ b/src/main/java/ru/touchin/roboswag/components/observables/ui/BaseUiBindable.java @@ -84,14 +84,16 @@ public class BaseUiBindable implements UiBindable { @NonNull @Override public Observable untilStop(@NonNull final Observable observable) { - return observable.observeOn(AndroidSchedulers.mainThread()) + return isCreatedSubject.first() + .switchMap(isCreated -> isCreated ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.empty()) .takeUntil(isStartedSubject.filter(started -> !started)); } @NonNull @Override public Observable untilDestroy(@NonNull final Observable observable) { - return observable.observeOn(AndroidSchedulers.mainThread()) + return isCreatedSubject.first() + .switchMap(isCreated -> isCreated ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.empty()) .takeUntil(isCreatedSubject.filter(created -> !created)); }