This commit is contained in:
Gavriil Sitnikov 2016-04-18 11:49:56 +03:00
parent 6b9f061004
commit bdd690e771
3 changed files with 58 additions and 17 deletions

View File

@ -0,0 +1,46 @@
package ru.touchin.roboswag.components.navigation;
import android.support.annotation.NonNull;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.subjects.BehaviorSubject;
/**
* Created by Gavriil Sitnikov on 18/04/16.
* TODO: description
*/
public class BaseUiBindable implements UiBindable {
@NonNull
private final BehaviorSubject<Boolean> isCreatedSubject;
@NonNull
private final BehaviorSubject<Boolean> isStartedSubject;
public BaseUiBindable(@NonNull final BehaviorSubject<Boolean> isCreatedSubject,
@NonNull final BehaviorSubject<Boolean> isStartedSubject) {
this.isCreatedSubject = isCreatedSubject;
this.isStartedSubject = isStartedSubject;
}
@NonNull
public <T> Observable<T> bind(@NonNull final Observable<T> observable) {
return isStartedSubject
.switchMap(isStarted -> isStarted ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.never())
.takeUntil(isCreatedSubject.filter(created -> !created));
}
@NonNull
public <T> Observable<T> untilStop(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
.takeUntil(isStartedSubject.filter(started -> !started));
}
@NonNull
@Override
public <T> Observable<T> untilDestroy(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
.takeUntil(isCreatedSubject.filter(created -> !created));
}
}

View File

@ -32,7 +32,6 @@ import android.view.ViewGroup;
import ru.touchin.roboswag.components.navigation.activities.ViewControllerActivity;
import ru.touchin.roboswag.components.navigation.fragments.ViewControllerFragment;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.subjects.BehaviorSubject;
/**
@ -53,6 +52,8 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
private final BehaviorSubject<Boolean> isCreatedSubject = BehaviorSubject.create(true);
@NonNull
private final BehaviorSubject<Boolean> isStartedSubject = BehaviorSubject.create();
@NonNull
private final BaseUiBindable baseUiBindable = new BaseUiBindable(isCreatedSubject, isStartedSubject);
@SuppressWarnings("PMD.UnusedFormalParameter")
//UnusedFormalParameter: savedInstanceState could be used by children
@ -130,22 +131,18 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
@NonNull
public <T> Observable<T> bind(@NonNull final Observable<T> observable) {
return isStartedSubject
.switchMap(isStarted -> isStarted ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.never())
.takeUntil(isCreatedSubject.filter(created -> !created));
return baseUiBindable.bind(observable);
}
@NonNull
public <T> Observable<T> untilStop(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
.takeUntil(isStartedSubject.filter(started -> !started));
return baseUiBindable.untilStop(observable);
}
@NonNull
@Override
public <T> Observable<T> untilDestroy(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
.takeUntil(isCreatedSubject.filter(created -> !created));
return baseUiBindable.untilDestroy(observable);
}
public void onStart() {

View File

@ -10,9 +10,9 @@ import android.view.inputmethod.InputMethodManager;
import java.util.ArrayList;
import ru.touchin.roboswag.components.navigation.BaseUiBindable;
import ru.touchin.roboswag.components.navigation.UiBindable;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.subjects.BehaviorSubject;
/**
@ -24,9 +24,11 @@ public abstract class BaseActivity extends AppCompatActivity
private final ArrayList<OnBackPressedListener> onBackPressedListeners = new ArrayList<>();
@NonNull
private final BehaviorSubject<Boolean> isCreatedSubject = BehaviorSubject.create();
@NonNull
private final BehaviorSubject<Boolean> isStartedSubject = BehaviorSubject.create();
@NonNull
private final BehaviorSubject<Boolean> isCreatedSubject = BehaviorSubject.create();
private final BaseUiBindable baseUiBindable = new BaseUiBindable(isCreatedSubject, isStartedSubject);
@Override
public void onCreate(final Bundle savedInstanceState, final PersistableBundle persistentState) {
@ -55,21 +57,17 @@ public abstract class BaseActivity extends AppCompatActivity
@NonNull
@Override
public <T> Observable<T> bind(@NonNull final Observable<T> observable) {
return isStartedSubject
.switchMap(isStarted -> isStarted ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.never())
.takeUntil(isCreatedSubject.filter(created -> !created));
return baseUiBindable.bind(observable);
}
@NonNull
public <T> Observable<T> untilStop(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
.takeUntil(isStartedSubject.filter(started -> !started));
return baseUiBindable.untilStop(observable);
}
@NonNull
public <T> Observable<T> untilDestroy(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
.takeUntil(isCreatedSubject.filter(created -> !created));
return baseUiBindable.untilDestroy(observable);
}
/**