From e99bec084977b4118eb64320a4831f9c0cb1ff66 Mon Sep 17 00:00:00 2001 From: WeRockStar Date: Thu, 4 Oct 2018 21:20:23 +0700 Subject: [PATCH 01/34] Update gradle plugin --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index fd969ca..f6f90b2 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.2.0-rc02' + classpath 'com.android.tools.build:gradle:3.2.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From eb95eb32e7fd9cd03b3dcd800f51934b9391316d Mon Sep 17 00:00:00 2001 From: WeRockStar Date: Thu, 4 Oct 2018 21:22:20 +0700 Subject: [PATCH 02/34] Update RxJava and README.md --- README.md | 4 ++-- app/build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e2b045e..1e1d05a 100644 --- a/README.md +++ b/README.md @@ -35,11 +35,11 @@ Users switching from 1.x to 2.x have to re-organize their imports, but carefully Add this in your build.gradle ```groovy -compile 'io.reactivex.rxjava2:rxjava:2.1.1' +compile 'io.reactivex.rxjava2:rxjava:2.2.2' ``` If you are using RxAndroid also, then add the following ```groovy -compile 'io.reactivex.rxjava2:rxandroid:2.0.1' +compile 'io.reactivex.rxjava2:rxandroid:2.1.0' ``` # RxJava 2 Examples present in this sample project diff --git a/app/build.gradle b/app/build.gradle index 019375b..9c98181 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -29,7 +29,7 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.0.0-rc02' // RxJava2 Dependencies - implementation 'io.reactivex.rxjava2:rxjava:2.2.1' + implementation 'io.reactivex.rxjava2:rxjava:2.2.2' implementation 'io.reactivex.rxjava2:rxandroid:2.1.0' // FastAndroidNetworking Dependency From 1c5d1418cea505861fb7132a9a1f5accd510ca4e Mon Sep 17 00:00:00 2001 From: Mohammed Rampurawala Date: Wed, 5 Dec 2018 22:51:36 +0530 Subject: [PATCH 03/34] - Upgraded to Java 1.8 to support lambdas. - Added TakeWhile operator. - ObserverAdapter added to override only those methods needed from Observer. --- app/build.gradle | 4 + app/src/main/AndroidManifest.xml | 3 + .../android/samples/ui/OperatorsActivity.java | 5 + .../operators/TakeWhileExampleActivity.java | 93 +++++++++++++++++++ .../samples/utils/ObserverAdapter.java | 31 +++++++ .../rxjava2/android/samples/utils/Utils.java | 5 + .../main/res/layout/activity_operators.xml | 11 ++- app/src/main/res/values/strings.xml | 1 + 8 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeWhileExampleActivity.java create mode 100644 app/src/main/java/com/rxjava2/android/samples/utils/ObserverAdapter.java diff --git a/app/build.gradle b/app/build.gradle index 9c98181..fe13a5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,6 +17,10 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility = '1.8' + targetCompatibility = '1.8' + } } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ec63671..a737733 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -128,6 +128,9 @@ android:label="@string/compose" /> + + \ 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 0316ad0..4e99dc9 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 @@ -31,6 +31,7 @@ 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.TakeWhileExampleActivity; import com.rxjava2.android.samples.ui.operators.ThrottleFirstExampleActivity; import com.rxjava2.android.samples.ui.operators.ThrottleLastExampleActivity; import com.rxjava2.android.samples.ui.operators.TimerExampleActivity; @@ -170,4 +171,8 @@ public void startDelayActivity(View view) { public void startSwitchMapActivity(View view) { startActivity(new Intent(OperatorsActivity.this, SwitchMapExampleActivity.class)); } + + public void startTakeWhileActivity(View view) { + startActivity(new Intent(OperatorsActivity.this, TakeWhileExampleActivity.class)); + } } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeWhileExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeWhileExampleActivity.java new file mode 100644 index 0000000..6ca1450 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeWhileExampleActivity.java @@ -0,0 +1,93 @@ +package com.rxjava2.android.samples.ui.operators; + +import android.os.Bundle; +import android.util.Log; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; +import com.rxjava2.android.samples.utils.ObserverAdapter; + +import java.util.concurrent.TimeUnit; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import io.reactivex.Observable; +import io.reactivex.Observer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; +import io.reactivex.functions.BiFunction; +import io.reactivex.functions.Predicate; + +public class TakeWhileExampleActivity extends AppCompatActivity { + + private static final String TAG = TakeWhileExampleActivity.class.getSimpleName(); + + private Button btn; + + private TextView textView; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = findViewById(R.id.btn); + textView = findViewById(R.id.textView); + + btn.setOnClickListener(view -> { + doSomeWork(); + }); + } + + private void doSomeWork() { + getStringObservable() + //Delay item emission by one second + .zipWith(Observable.interval(0, 1, TimeUnit.SECONDS), new BiFunction() { + @Override + public String apply(String s, Long aLong) throws Exception { + return s; + } + }) + //Take the items until the condition is met. + .takeWhile(new Predicate() { + @Override + public boolean test(String s) throws Exception { + return !s.toLowerCase().contains("honey"); + } + }) + //We need to observe on MainThread because delay works on background thread to avoid UI blocking. + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getObserver()); + } + + private Observer getObserver() { + return new ObserverAdapter() { + @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 onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + + private Observable getStringObservable() { + return Observable.just("Alpha", "Beta", "Cupcake", "Doughnut", "Eclair", "Froyo", "GingerBread", + "Honeycomb", "Ice cream sandwich"); + } + +} diff --git a/app/src/main/java/com/rxjava2/android/samples/utils/ObserverAdapter.java b/app/src/main/java/com/rxjava2/android/samples/utils/ObserverAdapter.java new file mode 100644 index 0000000..546084a --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/utils/ObserverAdapter.java @@ -0,0 +1,31 @@ +package com.rxjava2.android.samples.utils; + +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; + +/** + * Adapter class for Observer to get the method only needed by the user. Instead of overriding each and every method. + * + * @param + */ +public abstract class ObserverAdapter implements Observer { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(T s) { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onComplete() { + + } +} diff --git a/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java b/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java index 04695b2..c0d7076 100644 --- a/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java +++ b/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java @@ -76,6 +76,11 @@ public static List convertApiUserListToUserList(List apiUserList) return userList; } + public static List convertApiUserListToApiUserList(List apiUserList) { + return apiUserList; + } + + public static List getUserListWhoLovesCricket() { List userList = new ArrayList<>(); diff --git a/app/src/main/res/layout/activity_operators.xml b/app/src/main/res/layout/activity_operators.xml index 7a3c41c..13a39b8 100644 --- a/app/src/main/res/layout/activity_operators.xml +++ b/app/src/main/res/layout/activity_operators.xml @@ -4,10 +4,10 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:fadeScrollbars="false" - android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" - android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" + android:paddingRight="@dimen/activity_horizontal_margin" + android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.rxjava2.android.samples.ui.OperatorsActivity"> +