package com.fernandocejas.example.frodo.sample; import android.view.View; import com.fernandocejas.frodo.annotation.RxLogObservable; import java.util.Arrays; import java.util.List; import rx.Observable; import rx.Subscriber; import rx.functions.Func0; import rx.schedulers.Schedulers; import static com.fernandocejas.frodo.annotation.RxLogObservable.Scope.EVENTS; import static com.fernandocejas.frodo.annotation.RxLogObservable.Scope.EVERYTHING; import static com.fernandocejas.frodo.annotation.RxLogObservable.Scope.NOTHING; import static com.fernandocejas.frodo.annotation.RxLogObservable.Scope.SCHEDULERS; import static com.fernandocejas.frodo.annotation.RxLogObservable.Scope.STREAM; public class ObservableSample { public ObservableSample() { } @RxLogObservable(EVERYTHING) public Observable<Integer> numbers() { return Observable.just(1, 2); } @RxLogObservable public Observable<Integer> moreNumbers() { return Observable.just(1, 2, 3, 4); } @RxLogObservable(STREAM) public Observable<String> names() { return Observable.just("Fernando", "Silvia"); } @RxLogObservable public Observable<String> error() { return Observable.error(new IllegalArgumentException("My error")); } @RxLogObservable(SCHEDULERS) public Observable<List<MyDummyClass>> list() { return Observable.just(buildDummyList()); } @RxLogObservable(EVENTS) public Observable<String> stringItemWithDefer() { return Observable.defer(new Func0<Observable<String>>() { @Override public Observable<String> call() { return Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { try { subscriber.onNext("String item Three"); subscriber.onCompleted(); } catch (Exception e) { subscriber.onError(e); } } }).subscribeOn(Schedulers.computation()); } }); } /** * Nothing should happen here when annotating this method with {@link RxLogObservable} * because it does not returns an {@link Observable}. */ @RxLogObservable(NOTHING) public List<MyDummyClass> buildDummyList() { return Arrays.asList(new MyDummyClass("Batman"), new MyDummyClass("Superman")); } @RxLogObservable public Observable<String> strings() { return Observable.just("Hello", "My", "Name", "Is", "Fernando"); } public Observable<String> stringsWithError() { return Observable.error(new IllegalArgumentException("My Subscriber error")); } @RxLogObservable public Observable<Void> doSomething(View view) { return Observable.just(null); } @RxLogObservable public Observable<String> sendNull() { return Observable.just(null); } @RxLogObservable public Observable<Void> doNothing() { return Observable.empty(); } public Observable<Integer> numbersBackpressure() { return Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { try { if (!subscriber.isUnsubscribed()) { for (int i = 1; i < 10000; i++) { subscriber.onNext(i); } subscriber.onCompleted(); } } catch (Exception e) { subscriber.onError(e); } } }); } public static final class MyDummyClass { private final String name; MyDummyClass(String name) { this.name = name; } @Override public String toString() { return "Name: " + name; } } }