UiBindable interface added

This commit is contained in:
Gavriil Sitnikov 2016-04-18 11:21:52 +03:00
parent 8a3d2079a6
commit 6b9f061004
3 changed files with 51 additions and 11 deletions

View File

@ -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
<T> Observable<T> bind(@NonNull Observable<T> observable);
@NonNull
<T> Observable<T> untilStop(@NonNull Observable<T> observable);
@NonNull
<T> Observable<T> untilDestroy(@NonNull Observable<T> observable);
}

View File

@ -40,7 +40,8 @@ import rx.subjects.BehaviorSubject;
* Class to control view of specific fragment, activity and application by logic bridge.
*/
public class ViewController<TActivity extends ViewControllerActivity<?>,
TFragment extends ViewControllerFragment<?, TActivity>> {
TFragment extends ViewControllerFragment<?, TActivity>>
implements UiBindable {
@NonNull
private final TActivity activity;
@ -49,7 +50,7 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
@NonNull
private final ViewGroup container;
@NonNull
private final BehaviorSubject<Boolean> isDestroyedSubject = BehaviorSubject.create(false);
private final BehaviorSubject<Boolean> isCreatedSubject = BehaviorSubject.create(true);
@NonNull
private final BehaviorSubject<Boolean> isStartedSubject = BehaviorSubject.create();
@ -63,7 +64,7 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
}
public boolean isDestroyed() {
return isDestroyedSubject.getValue();
return !isCreatedSubject.getValue();
}
/**
@ -128,16 +129,23 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
}
@NonNull
protected <T> Observable<T> bind(@NonNull final Observable<T> observable) {
public <T> Observable<T> bind(@NonNull final Observable<T> observable) {
return isStartedSubject
.switchMap(isStarted -> isStarted ? observable.observeOn(AndroidSchedulers.mainThread()) : Observable.never())
.takeUntil(isDestroyedSubject.filter(isDestroyed -> isDestroyed));
.takeUntil(isCreatedSubject.filter(created -> !created));
}
@NonNull
protected <T> Observable<T> untilStop(@NonNull final Observable<T> observable) {
public <T> Observable<T> untilStop(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
.takeUntil(isStartedSubject.filter(isStarted -> !isStarted));
.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));
}
public void onStart() {
@ -153,7 +161,7 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
}
public void onDestroy() {
isDestroyedSubject.onNext(true);
isCreatedSubject.onNext(false);
}
public boolean onOptionsItemSelected(@NonNull final MenuItem item) {

View File

@ -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<OnBackPressedListener> onBackPressedListeners = new ArrayList<>();
@NonNull
@ -51,13 +53,21 @@ public class BaseActivity extends AppCompatActivity {
}
@NonNull
protected <T> Observable<T> untilStop(@NonNull final Observable<T> observable) {
@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));
}
@NonNull
public <T> Observable<T> untilStop(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
.takeUntil(isStartedSubject.filter(started -> !started));
}
@NonNull
protected <T> Observable<T> untilDestroy(@NonNull final Observable<T> observable) {
public <T> Observable<T> untilDestroy(@NonNull final Observable<T> observable) {
return observable.observeOn(AndroidSchedulers.mainThread())
.takeUntil(isCreatedSubject.filter(created -> !created));
}