From edb34f2cb29472bcb65ecd52fcdcac59816d5938 Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Wed, 8 Jun 2016 20:09:24 +0300 Subject: [PATCH] subscription in construction bug fixed --- .../roboswag/components/navigation/BaseUiBindable.java | 6 ++++-- .../roboswag/components/navigation/ViewController.java | 8 ++++++-- .../navigation/fragments/ViewControllerFragment.java | 9 ++++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/BaseUiBindable.java b/src/main/java/ru/touchin/roboswag/components/navigation/BaseUiBindable.java index 03a81df..56cb6d1 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/BaseUiBindable.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/BaseUiBindable.java @@ -32,14 +32,16 @@ public class BaseUiBindable implements UiBindable { @NonNull 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)); } 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 7632c51..716d186 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java @@ -49,7 +49,7 @@ public class ViewController, @NonNull private final ViewGroup container; @NonNull - private final BehaviorSubject isCreatedSubject = BehaviorSubject.create(true); + private final BehaviorSubject isCreatedSubject = BehaviorSubject.create(); @NonNull private final BehaviorSubject isStartedSubject = BehaviorSubject.create(); @NonNull @@ -65,7 +65,7 @@ public class ViewController, } public boolean isDestroyed() { - return !isCreatedSubject.getValue(); + return isCreatedSubject.getValue() != null && !isCreatedSubject.getValue(); } /** @@ -145,6 +145,10 @@ public class ViewController, return baseUiBindable.untilDestroy(observable); } + public void onCreate() { + isCreatedSubject.onNext(true); + } + public void onStart() { isStartedSubject.onNext(true); } 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 4758d49..8bde931 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 @@ -106,7 +106,14 @@ public abstract class ViewControllerFragment { + final ViewController newViewController = createViewController(activity, viewInfo); + if (newViewController != null) { + newViewController.onCreate(); + } + return newViewController; + }) .subscribe(this::onViewControllerChanged, Lc::assertion); }