UiBindable interface added
This commit is contained in:
parent
8a3d2079a6
commit
6b9f061004
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue