From 6b9f061004591588a0230d5355df56650f13f590 Mon Sep 17 00:00:00 2001 From: Gavriil Sitnikov Date: Mon, 18 Apr 2016 11:21:52 +0300 Subject: [PATCH] UiBindable interface added --- .../components/navigation/UiBindable.java | 22 +++++++++++++++++ .../components/navigation/ViewController.java | 24 ++++++++++++------- .../navigation/activities/BaseActivity.java | 16 ++++++++++--- 3 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 src/main/java/ru/touchin/roboswag/components/navigation/UiBindable.java diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/UiBindable.java b/src/main/java/ru/touchin/roboswag/components/navigation/UiBindable.java new file mode 100644 index 0000000..2767efd --- /dev/null +++ b/src/main/java/ru/touchin/roboswag/components/navigation/UiBindable.java @@ -0,0 +1,22 @@ +package ru.touchin.roboswag.components.navigation; + +import android.support.annotation.NonNull; + +import rx.Observable; + +/** + * Created by Gavriil Sitnikov on 15/04/16. + * TODO: description + */ +public interface UiBindable { + + @NonNull + Observable bind(@NonNull Observable observable); + + @NonNull + Observable untilStop(@NonNull Observable observable); + + @NonNull + Observable untilDestroy(@NonNull Observable observable); + +} 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 6a4793e..c0fa968 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java @@ -40,7 +40,8 @@ import rx.subjects.BehaviorSubject; * Class to control view of specific fragment, activity and application by logic bridge. */ public class ViewController, - TFragment extends ViewControllerFragment> { + TFragment extends ViewControllerFragment> + implements UiBindable { @NonNull private final TActivity activity; @@ -49,7 +50,7 @@ public class ViewController, @NonNull private final ViewGroup container; @NonNull - private final BehaviorSubject isDestroyedSubject = BehaviorSubject.create(false); + private final BehaviorSubject isCreatedSubject = BehaviorSubject.create(true); @NonNull private final BehaviorSubject isStartedSubject = BehaviorSubject.create(); @@ -63,7 +64,7 @@ public class ViewController, } public boolean isDestroyed() { - return isDestroyedSubject.getValue(); + return !isCreatedSubject.getValue(); } /** @@ -128,16 +129,23 @@ public class ViewController, } @NonNull - protected Observable bind(@NonNull final Observable observable) { + public Observable bind(@NonNull final Observable observable) { return isStartedSubject .switchMap(isStarted -> isStarted ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.never()) - .takeUntil(isDestroyedSubject.filter(isDestroyed -> isDestroyed)); + .takeUntil(isCreatedSubject.filter(created -> !created)); } @NonNull - protected Observable untilStop(@NonNull final Observable observable) { + public Observable untilStop(@NonNull final Observable observable) { return observable.observeOn(AndroidSchedulers.mainThread()) - .takeUntil(isStartedSubject.filter(isStarted -> !isStarted)); + .takeUntil(isStartedSubject.filter(started -> !started)); + } + + @NonNull + @Override + public Observable untilDestroy(@NonNull final Observable observable) { + return observable.observeOn(AndroidSchedulers.mainThread()) + .takeUntil(isCreatedSubject.filter(created -> !created)); } public void onStart() { @@ -153,7 +161,7 @@ public class ViewController, } public void onDestroy() { - isDestroyedSubject.onNext(true); + isCreatedSubject.onNext(false); } public boolean onOptionsItemSelected(@NonNull final MenuItem item) { diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/activities/BaseActivity.java b/src/main/java/ru/touchin/roboswag/components/navigation/activities/BaseActivity.java index 775101d..8e921dc 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/activities/BaseActivity.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/activities/BaseActivity.java @@ -10,6 +10,7 @@ import android.view.inputmethod.InputMethodManager; import java.util.ArrayList; +import ru.touchin.roboswag.components.navigation.UiBindable; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.subjects.BehaviorSubject; @@ -18,7 +19,8 @@ import rx.subjects.BehaviorSubject; * Created by Gavriil Sitnikov on 08/03/2016. * TODO: fill description */ -public class BaseActivity extends AppCompatActivity { +public abstract class BaseActivity extends AppCompatActivity + implements UiBindable { private final ArrayList onBackPressedListeners = new ArrayList<>(); @NonNull @@ -51,13 +53,21 @@ public class BaseActivity extends AppCompatActivity { } @NonNull - protected Observable untilStop(@NonNull final Observable observable) { + @Override + public Observable bind(@NonNull final Observable observable) { + return isStartedSubject + .switchMap(isStarted -> isStarted ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.never()) + .takeUntil(isCreatedSubject.filter(created -> !created)); + } + + @NonNull + public Observable untilStop(@NonNull final Observable observable) { return observable.observeOn(AndroidSchedulers.mainThread()) .takeUntil(isStartedSubject.filter(started -> !started)); } @NonNull - protected Observable untilDestroy(@NonNull final Observable observable) { + public Observable untilDestroy(@NonNull final Observable observable) { return observable.observeOn(AndroidSchedulers.mainThread()) .takeUntil(isCreatedSubject.filter(created -> !created)); }