diff --git a/rxlifecycle/src/main/java/com/trello/rxlifecycle/TakeUntilGenerator.java b/rxlifecycle/src/main/java/com/trello/rxlifecycle/TakeUntilGenerator.java new file mode 100644 index 0000000..01779f1 --- /dev/null +++ b/rxlifecycle/src/main/java/com/trello/rxlifecycle/TakeUntilGenerator.java @@ -0,0 +1,62 @@ +package com.trello.rxlifecycle; + +import android.support.annotation.CheckResult; +import android.support.annotation.NonNull; +import rx.Observable; +import rx.exceptions.Exceptions; +import rx.functions.Func1; +import rx.functions.Func2; + +final class TakeUntilGenerator { + + @NonNull + @CheckResult + static Observable takeUntilEvent(@NonNull final Observable lifecycle, @NonNull final T event) { + return lifecycle.takeFirst(new Func1() { + @Override + public Boolean call(T lifecycleEvent) { + return lifecycleEvent.equals(event); + } + }); + } + + @NonNull + @CheckResult + static Observable takeUntilCorrespondingEvent(@NonNull final Observable lifecycle, + @NonNull final Func1 correspondingEvents) { + return Observable.combineLatest( + lifecycle.take(1).map(correspondingEvents), + lifecycle.skip(1), + new Func2() { + @Override + public Boolean call(T bindUntilEvent, T lifecycleEvent) { + return lifecycleEvent.equals(bindUntilEvent); + } + }) + .onErrorReturn(RESUME_FUNCTION) + .takeFirst(SHOULD_COMPLETE); + } + + private static final Func1 RESUME_FUNCTION = new Func1() { + @Override + public Boolean call(Throwable throwable) { + if (throwable instanceof OutsideLifecycleException) { + return true; + } + + Exceptions.propagate(throwable); + return false; + } + }; + + private static final Func1 SHOULD_COMPLETE = new Func1() { + @Override + public Boolean call(Boolean shouldComplete) { + return shouldComplete; + } + }; + + private TakeUntilGenerator() { + throw new AssertionError("No instances!"); + } +} diff --git a/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilCorrespondingEventObservableTransformer.java b/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilCorrespondingEventObservableTransformer.java index 9aece07..bb6652b 100644 --- a/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilCorrespondingEventObservableTransformer.java +++ b/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilCorrespondingEventObservableTransformer.java @@ -1,9 +1,9 @@ package com.trello.rxlifecycle; import rx.Observable; -import rx.exceptions.Exceptions; import rx.functions.Func1; -import rx.functions.Func2; + +import static com.trello.rxlifecycle.TakeUntilGenerator.takeUntilCorrespondingEvent; /** * Continues a subscription until it sees a particular lifecycle event. @@ -23,37 +23,6 @@ public UntilCorrespondingEventObservableTransformer(Observable lifecycle, Fun @Override public Observable call(Observable source) { - return source.takeUntil( - Observable.combineLatest( - this.sharedLifecycle.take(1).map(correspondingEvents), - this.sharedLifecycle.skip(1), - new Func2() { - @Override - public Boolean call(R bindUntilEvent, R lifecycleEvent) { - return lifecycleEvent.equals(bindUntilEvent); - } - }) - .onErrorReturn(RESUME_FUNCTION) - .takeFirst(SHOULD_COMPLETE) - ); + return source.takeUntil(takeUntilCorrespondingEvent(sharedLifecycle, correspondingEvents)); } - - private static final Func1 RESUME_FUNCTION = new Func1() { - @Override - public Boolean call(Throwable throwable) { - if (throwable instanceof OutsideLifecycleException) { - return true; - } - - Exceptions.propagate(throwable); - return false; - } - }; - - private static final Func1 SHOULD_COMPLETE = new Func1() { - @Override - public Boolean call(Boolean shouldComplete) { - return shouldComplete; - } - }; } diff --git a/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilCorrespondingEventSingleTransformer.java b/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilCorrespondingEventSingleTransformer.java index 36d46e7..c8a8413 100644 --- a/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilCorrespondingEventSingleTransformer.java +++ b/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilCorrespondingEventSingleTransformer.java @@ -2,9 +2,9 @@ import rx.Observable; import rx.Single; -import rx.exceptions.Exceptions; import rx.functions.Func1; -import rx.functions.Func2; + +import static com.trello.rxlifecycle.TakeUntilGenerator.takeUntilCorrespondingEvent; /** * Continues a subscription until it sees a particular lifecycle event. @@ -24,37 +24,6 @@ public UntilCorrespondingEventSingleTransformer(Observable lifecycle, Func1 call(Single source) { - return source.takeUntil( - Observable.combineLatest( - this.sharedLifecycle.take(1).map(correspondingEvents), - this.sharedLifecycle.skip(1), - new Func2() { - @Override - public Boolean call(R bindUntilEvent, R lifecycleEvent) { - return lifecycleEvent.equals(bindUntilEvent); - } - }) - .onErrorReturn(RESUME_FUNCTION) - .takeFirst(SHOULD_COMPLETE) - ); + return source.takeUntil(takeUntilCorrespondingEvent(sharedLifecycle, correspondingEvents)); } - - private static final Func1 RESUME_FUNCTION = new Func1() { - @Override - public Boolean call(Throwable throwable) { - if (throwable instanceof OutsideLifecycleException) { - return true; - } - - Exceptions.propagate(throwable); - return false; - } - }; - - private static final Func1 SHOULD_COMPLETE = new Func1() { - @Override - public Boolean call(Boolean shouldComplete) { - return shouldComplete; - } - }; } diff --git a/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilEventObservableTransformer.java b/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilEventObservableTransformer.java index 1caa6e8..7f26af3 100644 --- a/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilEventObservableTransformer.java +++ b/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilEventObservableTransformer.java @@ -1,7 +1,8 @@ package com.trello.rxlifecycle; import rx.Observable; -import rx.functions.Func1; + +import static com.trello.rxlifecycle.TakeUntilGenerator.takeUntilEvent; /** * Continues a subscription until it sees a particular lifecycle event. @@ -18,13 +19,6 @@ public UntilEventObservableTransformer(Observable lifecycle, R event) { @Override public Observable call(Observable source) { - return source.takeUntil( - lifecycle.takeFirst(new Func1() { - @Override - public Boolean call(R lifecycleEvent) { - return lifecycleEvent.equals(event); - } - }) - ); + return source.takeUntil(takeUntilEvent(lifecycle, event)); } } diff --git a/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilEventSingleTransformer.java b/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilEventSingleTransformer.java index fd9176b..2a65191 100644 --- a/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilEventSingleTransformer.java +++ b/rxlifecycle/src/main/java/com/trello/rxlifecycle/UntilEventSingleTransformer.java @@ -2,7 +2,8 @@ import rx.Observable; import rx.Single; -import rx.functions.Func1; + +import static com.trello.rxlifecycle.TakeUntilGenerator.takeUntilEvent; /** * Continues a subscription until it sees a particular lifecycle event. @@ -19,13 +20,6 @@ public UntilEventSingleTransformer(Observable lifecycle, R event) { @Override public Single call(Single source) { - return source.takeUntil( - lifecycle.takeFirst(new Func1() { - @Override - public Boolean call(R lifecycleEvent) { - return lifecycleEvent.equals(event); - } - }) - ); + return source.takeUntil(takeUntilEvent(lifecycle, event)); } }