diff --git a/frodo-android-sample/build.gradle b/frodo-android-sample/build.gradle index c221402..c19cbaf 100644 --- a/frodo-android-sample/build.gradle +++ b/frodo-android-sample/build.gradle @@ -56,6 +56,6 @@ android { } dependencies { - compile 'io.reactivex:rxjava:1.0.14' - compile 'io.reactivex:rxandroid:0.25.0' + compile 'io.reactivex:rxjava:1.2.6' + compile 'io.reactivex:rxandroid:1.2.1' } diff --git a/frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/DataPresenter.java b/frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/DataPresenter.java deleted file mode 100644 index f609cc1..0000000 --- a/frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/DataPresenter.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.fernandocejas.example.frodo; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; - -public class DataPresenter { - - public void getData() { - sleep(5); - } - - public void getData(String name) { - sleep(5); - } - - public void getData(String name, int quantity) { - sleep(5); - } - - public void getData(String name, int quantity, int count) { - sleep(5); - } - - public void printMessage(String tag, String message) { - sleep(10); - } - - public void anotherMethodOne() { - sleep(25); - } - - public void anotherMethodTwo() { - sleep(18); - } - - private void sleep(long millis) { - try { - Thread.sleep(millis); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - public void executeDiskIOTaskOnUiThread() { - try { - File file = File.createTempFile("test", ".txt"); - FileWriter writer = new FileWriter(file); - writer.write("This is Fernando Cejas testing something"); - writer.close(); - } catch (IOException e) { - e.printStackTrace(); - } finally { - } - } -} diff --git a/frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/SamplesActivity.java b/frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/SamplesActivity.java index ce259f9..5d5c1a4 100644 --- a/frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/SamplesActivity.java +++ b/frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/SamplesActivity.java @@ -5,11 +5,15 @@ import android.view.View; import android.widget.Button; import android.widget.Toast; + import com.fernandocejas.example.frodo.sample.MySubscriber; import com.fernandocejas.example.frodo.sample.MySubscriberBackpressure; import com.fernandocejas.example.frodo.sample.MySubscriberVoid; import com.fernandocejas.example.frodo.sample.ObservableSample; +import com.fernandocejas.example.frodo.sample.SingleSample; + import java.util.List; + import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; @@ -18,6 +22,7 @@ public class SamplesActivity extends Activity { private Button btnRxLogObservable; + private Button btnRxLogSingle; private Button btnRxLogSubscriber; private View.OnClickListener rxLogObservableListener = new View.OnClickListener() { @@ -26,74 +31,134 @@ public void onClick(View v) { ObservableSample observableSample = new ObservableSample(); observableSample.stringItemWithDefer() - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(); observableSample.numbers() - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Action1() { - @Override - public void call(Integer integer) { - toastMessage("onNext() Integer--> " + String.valueOf(integer)); - } - }); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Action1() { + @Override + public void call(Integer integer) { + toastMessage("onNext() Integer--> " + String.valueOf(integer)); + } + }); observableSample.moreNumbers().toList().toBlocking().single(); observableSample.names() - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Action1() { - @Override - public void call(String string) { - toastMessage("onNext() String--> " + string); - } - }); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Action1() { + @Override + public void call(String string) { + toastMessage("onNext() String--> " + string); + } + }); observableSample.error() - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - //nothing here - } - - @Override - public void onError(Throwable e) { - toastMessage("onError() --> " + e.getMessage()); - } - - @Override - public void onNext(String s) { - //nothing here - } - }); + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Subscriber() { + @Override + public void onCompleted() { + //nothing here + } + + @Override + public void onError(Throwable e) { + toastMessage("onError() --> " + e.getMessage()); + } + + @Override + public void onNext(String s) { + //nothing here + } + }); observableSample.list() - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Action1>() { - @Override - public void call(List myDummyClasses) { - toastMessage("onNext() List--> " + myDummyClasses.toString()); - } - }); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Action1>() { + @Override + public void call(List myDummyClasses) { + toastMessage("onNext() List--> " + myDummyClasses.toString()); + } + }); observableSample.doNothing() - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(); observableSample.doSomething(v) - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(); observableSample.sendNull() - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(); + } + }; + + private View.OnClickListener rxLogSingleListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + SingleSample singleSample = new SingleSample(); + + singleSample.stringItemWithDefer() + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(); + + singleSample.numbers() + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Action1() { + @Override + public void call(Integer integer) { + toastMessage("onNext() Integer--> " + String.valueOf(integer)); + } + }); + + singleSample.error() + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Subscriber() { + @Override + public void onCompleted() { + //nothing here + } + + @Override + public void onError(Throwable e) { + toastMessage("onError() --> " + e.getMessage()); + } + + @Override + public void onNext(String s) { + //nothing here + } + }); + + singleSample.list() + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Action1>() { + @Override + public void call(List myDummyClasses) { + toastMessage("onNext() List--> " + myDummyClasses.toString()); + } + }); + + singleSample.doSomething(v) + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(); + + singleSample.sendNull() + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(); } }; @@ -104,35 +169,35 @@ public void onClick(View v) { toastMessage("Subscribing to observables...Check logcat output..."); observableSample.strings() - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new MySubscriber()); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new MySubscriber()); observableSample.stringsWithError() - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new MySubscriber()); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new MySubscriber()); observableSample.numbersBackpressure() - .onBackpressureDrop() - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new MySubscriberBackpressure()); + .onBackpressureDrop() + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new MySubscriberBackpressure()); observableSample.doNothing() - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new MySubscriberVoid()); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new MySubscriberVoid()); observableSample.doSomething(v) - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new MySubscriberVoid()); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new MySubscriberVoid()); observableSample.sendNull() - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new MySubscriber()); + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new MySubscriber()); } }; @@ -145,9 +210,11 @@ protected void onCreate(Bundle savedInstanceState) { private void mapGUI() { this.btnRxLogObservable = (Button) findViewById(R.id.btnRxLogObservable); + this.btnRxLogSingle = (Button) findViewById(R.id.btnRxLogSingle); this.btnRxLogSubscriber = (Button) findViewById(R.id.btnRxLogSubscriber); this.btnRxLogObservable.setOnClickListener(rxLogObservableListener); + this.btnRxLogSingle.setOnClickListener(rxLogSingleListener); this.btnRxLogSubscriber.setOnClickListener(rxLogSubscriberListener); } diff --git a/frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/sample/SingleSample.java b/frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/sample/SingleSample.java new file mode 100644 index 0000000..f10cee2 --- /dev/null +++ b/frodo-android-sample/src/main/java/com/fernandocejas/example/frodo/sample/SingleSample.java @@ -0,0 +1,89 @@ +package com.fernandocejas.example.frodo.sample; + +import android.view.View; + +import com.fernandocejas.frodo.annotation.RxLogSingle; + +import java.util.Arrays; +import java.util.List; + +import rx.Single; +import rx.SingleSubscriber; +import rx.functions.Func0; +import rx.schedulers.Schedulers; + +import static com.fernandocejas.frodo.annotation.RxLogSingle.Scope.EVENTS; +import static com.fernandocejas.frodo.annotation.RxLogSingle.Scope.EVERYTHING; +import static com.fernandocejas.frodo.annotation.RxLogSingle.Scope.NOTHING; +import static com.fernandocejas.frodo.annotation.RxLogSingle.Scope.SCHEDULERS; + +public class SingleSample { + public SingleSample() { + } + + @RxLogSingle(EVERYTHING) + public Single numbers() { + return Single.just(1); + } + + @RxLogSingle + public Single error() { + return Single.error(new IllegalArgumentException("My error")); + } + + @RxLogSingle(SCHEDULERS) + public Single> list() { + return Single.just(buildDummyList()); + } + + @RxLogSingle(EVENTS) + public Single stringItemWithDefer() { + return Single.defer(new Func0>() { + @Override + public Single call() { + return Single.create(new Single.OnSubscribe() { + @Override + public void call(SingleSubscriber singleSubscriber) { + try { + singleSubscriber.onSuccess("String item Three"); + } catch (Exception e) { + singleSubscriber.onError(e); + } + } + }).subscribeOn(Schedulers.computation()); + } + }); + } + + /** + * Nothing should happen here when annotating this method with {@link RxLogSingle} + * because it does not returns an {@link Single}. + */ + @RxLogSingle(NOTHING) + public List buildDummyList() { + return Arrays.asList(new MyDummyClass("Batman"), new MyDummyClass("Superman")); + } + + @RxLogSingle + public Single doSomething(View view) { + return Single.just(null); + } + + @RxLogSingle + public Single sendNull() { + return Single.just(null); + } + + public static final class MyDummyClass { + private final String name; + + MyDummyClass(String name) { + this.name = name; + } + + @Override + public String toString() { + return "Name: " + name; + } + } +} diff --git a/frodo-android-sample/src/main/res/layout/activity_samples.xml b/frodo-android-sample/src/main/res/layout/activity_samples.xml index cc819fe..5e6ec73 100644 --- a/frodo-android-sample/src/main/res/layout/activity_samples.xml +++ b/frodo-android-sample/src/main/res/layout/activity_samples.xml @@ -34,6 +34,12 @@ android:layout_marginBottom="@dimen/button_vertical_margin" android:text="@string/btn_text_sample_rx_log_observable" /> +