From 1ff147f78fa46f4c8155c84466b97f2df82a7b26 Mon Sep 17 00:00:00 2001 From: roman-yu Date: Tue, 16 Jan 2018 12:13:51 +0800 Subject: [PATCH 01/47] Fix throttleFirst comment. --- .../ui/operators/ThrottleFirstExampleActivity.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleFirstExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleFirstExampleActivity.java index 28c6ae7..941dd4d 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleFirstExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleFirstExampleActivity.java @@ -67,15 +67,15 @@ private Observable getObservable() { public void subscribe(ObservableEmitter emitter) throws Exception { // send events with simulated time wait Thread.sleep(0); - emitter.onNext(1); // skip - emitter.onNext(2); // deliver + emitter.onNext(1); // deliver + emitter.onNext(2); // skip Thread.sleep(505); - emitter.onNext(3); // skip + emitter.onNext(3); // deliver Thread.sleep(99); emitter.onNext(4); // skip Thread.sleep(100); emitter.onNext(5); // skip - emitter.onNext(6); // deliver + emitter.onNext(6); // skip Thread.sleep(305); emitter.onNext(7); // deliver Thread.sleep(510); From 1ef6be3f5fc63f8ea6f3c1ed5e8b52d9ed68f2ca Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Sat, 3 Feb 2018 09:38:37 +0530 Subject: [PATCH 02/47] Add Kotlin MVP link --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index cba8124..d0fe653 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,9 @@ RxJava1 -> RxJava2 ### Check out an awesome MVP architecture based project which uses RxJava2, Dagger2. * [Android-MVP-Architecture](https://github.com/MindorksOpenSource/android-mvp-architecture) +### Check out an awesome Kotlin MVP architecture based project which uses RxJava2, Dagger2. +* [Android-Kotli-MVP-Architecture](https://github.com/MindorksOpenSource/android-kotlin-mvp-architecture) + ### Check out an awesome library for fast and simple networking in Android. * [Fast Android Networking Library](https://github.com/amitshekhariitbhu/Fast-Android-Networking) From 8a6c7168f44b5664313618aa5ed866ca1242d426 Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Sat, 3 Feb 2018 09:39:03 +0530 Subject: [PATCH 03/47] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d0fe653..6073ac1 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ RxJava1 -> RxJava2 * [Android-MVP-Architecture](https://github.com/MindorksOpenSource/android-mvp-architecture) ### Check out an awesome Kotlin MVP architecture based project which uses RxJava2, Dagger2. -* [Android-Kotli-MVP-Architecture](https://github.com/MindorksOpenSource/android-kotlin-mvp-architecture) +* [Android-Kotlin-MVP-Architecture](https://github.com/MindorksOpenSource/android-kotlin-mvp-architecture) ### Check out an awesome library for fast and simple networking in Android. * [Fast Android Networking Library](https://github.com/amitshekhariitbhu/Fast-Android-Networking) From 60231d1c1609f711f1537becc187fc6ae2894922 Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Mon, 26 Feb 2018 11:02:02 +0530 Subject: [PATCH 04/47] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6073ac1..8bc969b 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![Open Source Love](https://badges.frapsoft.com/os/v1/open-source.svg?v=102)](https://opensource.org/licenses/Apache-2.0) [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/LICENSE) -### [Get the complete RxJava Course Here](https://mindorks.com/course/learn-rxjava) +### Get the complete RxJava Course [here](https://mindorks.com/course/learn-rxjava) ## How to use RxJava 2 in Android Application ## How to migrate from RxJava 1.0 to RxJava 2.0 From 04e14e6bd676c763cc4fc998e82031a21f380ccb Mon Sep 17 00:00:00 2001 From: Amadeu Cavalcante Date: Fri, 2 Mar 2018 10:01:04 -0300 Subject: [PATCH 05/47] Update Highlights Exemples Added PublishSubjectExampleActivity to highlights exemple section --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8bc969b..59faf32 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,7 @@ RxJava1 -> RxJava2 * [PaginationActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java) - Pagination for loadMore in RecyclerView * [ComposeOperatorExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java) - Compose operator for reusable * [Search Implementation](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.java) - Using `debounce`, `switchMap`, `distinctUntilChanged`, [Blog for reference](https://blog.mindorks.com/implement-search-using-rxjava-operators-c8882b64fe1d) +* [PublishSubjectExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java) ### TODO From 56cfab0a81fbf00a3e07449cbafc8eeaab7f884b Mon Sep 17 00:00:00 2001 From: sdsyjh Date: Tue, 6 Mar 2018 15:45:34 +0800 Subject: [PATCH 06/47] grandle failed. --- gradle.properties | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/gradle.properties b/gradle.properties index 1f8fad9..aac7c9b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,17 +1,17 @@ -## Project-wide Gradle settings. -# +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html -# + # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx1024m -XX:MaxPermSize=256m -# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -# +org.gradle.jvmargs=-Xmx1536m + # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -#Fri Jan 06 16:06:01 CST 2017 -systemProp.http.proxyHost=127.0.0.1 -systemProp.http.proxyPort=1086 From 00283015825bd68afd068d24e49bb7b867b404f8 Mon Sep 17 00:00:00 2001 From: Chandler Date: Wed, 4 Apr 2018 22:58:36 +1200 Subject: [PATCH 07/47] Optimize time complexity of filterUserWhoLovesBoth --- .../rxjava2/android/samples/model/User.java | 18 ++++++++++++++++++ .../ui/networking/NetworkingActivity.java | 10 +++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/rxjava2/android/samples/model/User.java b/app/src/main/java/com/rxjava2/android/samples/model/User.java index bb11397..6fb84ad 100644 --- a/app/src/main/java/com/rxjava2/android/samples/model/User.java +++ b/app/src/main/java/com/rxjava2/android/samples/model/User.java @@ -27,4 +27,22 @@ public String toString() { ", isFollowing=" + isFollowing + '}'; } + + @Override + public int hashCode() { + return (int) id + firstname.hashCode() + lastname.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof User) { + User user = (User) obj; + + return this.id == user.id + && this.firstname.equals(user.firstname) + && this.lastname.equals(user.lastname); + } + + return false; + } } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.java index f651870..d643ae3 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.java @@ -152,13 +152,13 @@ public void onComplete() { private List filterUserWhoLovesBoth(List cricketFans, List footballFans) { List userWhoLovesBoth = new ArrayList<>(); - for (User cricketFan : cricketFans) { - for (User footballFan : footballFans) { - if (cricketFan.id == footballFan.id) { - userWhoLovesBoth.add(cricketFan); - } + + for (User footballFan : footballFans) { + if (cricketFans.contains(footballFan)) { + userWhoLovesBoth.add(footballFan); } } + return userWhoLovesBoth; } From 1c323b5510d6bcf2034b9915085ecbe3b60c8580 Mon Sep 17 00:00:00 2001 From: Thanh Tuan Date: Thu, 26 Apr 2018 17:10:13 +0700 Subject: [PATCH 08/47] implement switch map operator sample --- README.md | 2 + app/src/main/AndroidManifest.xml | 2 + .../android/samples/ui/OperatorsActivity.java | 4 + .../operators/SwitchMapExampleActivity.java | 105 ++++++++++++++++++ .../main/res/layout/activity_operators.xml | 7 ++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 121 insertions(+) create mode 100644 app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java diff --git a/README.md b/README.md index cba8124..fd697b0 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ RxJava1 -> RxJava2 * `Concat` -> emit the emissions from two or more Observables without interleaving them * `Replay` -> ensure that all observers see the same sequence of emitted items, even if they subscribe after the Observable has begun emitting items * `Merge` -> combine multiple Observables into one by merging their emissions +* `SwitchMap` -> ransform the items emitted by an Observable into Observables, and mirror those items emitted by the most-recently transformed Observable # Highlights of the examples : @@ -101,6 +102,7 @@ RxJava1 -> RxJava2 * [ConcatExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java) - Using `concat` Operator * [MergeExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java) - Using `merge` Operator * [DeferExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java) - Using `defer` Observable +* [SwitchMapExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java) - Using `switchMap` Observable * [IntervalExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java) - Using `Interval` * [RxBusActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java) - RxBus, RxJava2Bus, EventBus, RxEventBus, [Blog for reference](https://blog.mindorks.com/implementing-eventbus-with-rxjava-rxbus-e6c940a94bd8) * [PaginationActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java) - Pagination for loadMore in RecyclerView diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c61e200..ec63671 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -126,6 +126,8 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java index 63df8a2..674d760 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java @@ -30,6 +30,7 @@ import com.rxjava2.android.samples.ui.operators.SimpleExampleActivity; import com.rxjava2.android.samples.ui.operators.SingleObserverExampleActivity; import com.rxjava2.android.samples.ui.operators.SkipExampleActivity; +import com.rxjava2.android.samples.ui.operators.SwitchMapExampleActivity; import com.rxjava2.android.samples.ui.operators.TakeExampleActivity; import com.rxjava2.android.samples.ui.operators.ThrottleFirstExampleActivity; import com.rxjava2.android.samples.ui.operators.ThrottleLastExampleActivity; @@ -165,4 +166,7 @@ public void startDelayActivity(View view) { startActivity(new Intent(OperatorsActivity.this,DelayExampleActivity.class)); } + public void startSwitchMapActivity(View view) { + startActivity(new Intent(OperatorsActivity.this, SwitchMapExampleActivity.class)); + } } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java new file mode 100644 index 0000000..127d611 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java @@ -0,0 +1,105 @@ +package com.rxjava2.android.samples.ui.operators; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; + +import java.util.Random; +import java.util.concurrent.TimeUnit; + +import io.reactivex.Observable; +import io.reactivex.ObservableSource; +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.functions.Function; +import io.reactivex.schedulers.Schedulers; + +/** + * Created by thanhtuan on 26/04/18. + */ +public class SwitchMapExampleActivity extends AppCompatActivity { + + private static final String TAG = SwitchMapExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } + + /* whenever a new item is emitted by the source Observable, it will unsubscribe to and stop + * mirroring the Observable that was generated from the previously-emitted item, + * and begin only mirroring the current one. + * + * Result: 5x + */ + private void doSomeWork() { + getObservable() + .switchMap(new Function>() { + @Override + public ObservableSource apply(Integer integer) { + int delay = new Random().nextInt(2); + + return Observable.just(integer.toString() + "x") + .delay(delay, TimeUnit.SECONDS, Schedulers.io()); + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getObserver()); + } + + private Observable getObservable() { + return Observable.just(1, 2, 3, 4, 5); + } + + private Observer getObserver() { + return new Observer() { + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(String value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } +} diff --git a/app/src/main/res/layout/activity_operators.xml b/app/src/main/res/layout/activity_operators.xml index 1c453de..7a3c41c 100644 --- a/app/src/main/res/layout/activity_operators.xml +++ b/app/src/main/res/layout/activity_operators.xml @@ -225,5 +225,12 @@ android:text="@string/delay" android:textColor="@android:color/black" /> +