/** * Returns an {@link rx.Observable.Transformer} that couples views with data that has been emitted by * the source {@link rx.Observable}. * * {@link #deliverLatestCache} keeps the latest onNext value and emits it each time a new view gets attached. * If a new onNext value appears while a view is attached, it will be delivered immediately. * * @param <T> the type of source observable emissions */ public <T> DeliverLatestCache<View, T> deliverLatestCache() { return new DeliverLatestCache<>(views); }
/** * Returns an {@link rx.Observable.Transformer} that couples views with data that has been emitted by * the source {@link rx.Observable}. * * {@link #deliverReplay} keeps all onNext values and emits them each time a new view gets attached. * If a new onNext value appears while a view is attached, it will be delivered immediately. * * @param <T> the type of source observable emissions */ public <T> DeliverReplay<View, T> deliverReplay() { return new DeliverReplay<>(views); }
/** * Returns an {@link rx.Observable.Transformer} that couples views with data that has been emitted by * the source {@link rx.Observable}. * * {@link #deliverFirst} delivers only the first onNext value that has been emitted by the source observable. * * @param <T> the type of source observable emissions */ public <T> DeliverFirst<View, T> deliverFirst() { return new DeliverFirst<>(views); }
DeliverFirst<Object, Integer> restartable = new DeliverFirst<>(view); Subscription subscription = restartable.call(subject) .subscribe(new Action1<Delivery<Object, Integer>>() { @Override deliveries.add(new Delivery<Object, Integer>(100, Notification.<Integer>createOnError(throwable)));
@Override public void call(Delivery<View, T> delivery) { delivery.split(onNext, onError); } };
new DeliverFirst<Object, Integer>(view) .call(subject) .subscribe(new Action1<Delivery<Object, Integer>>() { @Override
.compose(new DeliverReplay<Object, String>(view)) .subscribe(testObserver); addOnNext(onNext, 999, 0, 1, 2); addOnNext(onNext, 999, 3, 4, 5); addOnNext(onNext, 9999, 0, 1, 2, 3, 4, 5, 6, 7, 8);
@Test public void testSplitOnNext() throws Exception { testWithOnNextOnError(new Action2<Action2, Action2>() { @Override public void call(Action2 onNext, Action2 onError) { new Delivery(1, Notification.createOnNext(2)).split(onNext, onError); verify(onNext, times(1)).call(1, 2); } }); }
private void addOnNext(ArrayList<Delivery<Object, String>> onNext, Object view, int... values) { for (int value : values) onNext.add(new Delivery<>(view, Notification.createOnNext(Integer.toString(value)))); } }
DeliverFirst<Object, Integer> restartable = new DeliverFirst<>(view); Subscription subscription = restartable.call(subject) .subscribe(new Action1<Delivery<Object, Integer>>() { @Override deliveries.add(new Delivery<Object, Integer>(100, Notification.createOnNext(1)));
@Override public void call(Delivery<Object, Integer> delivery) { delivery.split( new Action2<Object, Integer>() { @Override public void call(Object o, Integer integer) { throw new RuntimeException(); } }, null ); } });
@Test public void testSplitOnComplete() throws Exception { testWithOnNextOnError(new Action2<Action2, Action2>() { @Override public void call(Action2 onNext, Action2 onError) { new Delivery(1, Notification.createOnCompleted()).split(onNext, onError); } }); } }
@Override public void call(Delivery<Object, Integer> delivery) { delivery.split( new Action2<Object, Integer>() { @Override public void call(Object o, Integer integer) { testSubscriber.onNext(new Delivery<>(o, Notification.createOnNext(integer))); } }, new Action2<Object, Throwable>() { @Override public void call(Object o, Throwable throwable) { testSubscriber.onNext(new Delivery<>(o, Notification.<Integer>createOnError(throwable))); } } ); } });
@Test public void testSplitOnError() throws Exception { testWithOnNextOnError(new Action2<Action2, Action2>() { @Override public void call(Action2 onNext, Action2 onError) { Throwable throwable = new Throwable(); new Delivery(1, Notification.createOnError(throwable)).split(onNext, onError); verify(onError, times(1)).call(1, throwable); } }); }
@Override public void call(Delivery<Object, Integer> delivery) { delivery.split( new Action2<Object, Integer>() { @Override public void call(Object o, Integer integer) { testSubscriber.onNext(new Delivery<>(o, Notification.createOnNext(integer))); } }, new Action2<Object, Throwable>() { @Override public void call(Object o, Throwable throwable) { testSubscriber.onNext(new Delivery<>(o, Notification.<Integer>createOnError(throwable))); } } ); } });
@Override public void call(Delivery<Object, Integer> delivery) { delivery.split( new Action2<Object, Integer>() { @Override public void call(Object o, Integer integer) { testSubscriber.onNext(new Delivery<>(o, Notification.createOnNext(integer))); } }, new Action2<Object, Throwable>() { @Override public void call(Object o, Throwable throwable) { testSubscriber.onNext(new Delivery<>(o, Notification.<Integer>createOnError(throwable))); } } ); } });
@Override public void call(Delivery<Object, Integer> delivery) { delivery.split( new Action2<Object, Integer>() { @Override public void call(Object o, Integer integer) { testSubscriber.onNext(new Delivery<>(o, Notification.createOnNext(integer))); } }, new Action2<Object, Throwable>() { @Override public void call(Object o, Throwable throwable) { testSubscriber.onNext(new Delivery<>(o, Notification.<Integer>createOnError(throwable))); } } ); } });