diff --git a/app/build.gradle b/app/build.gradle index fe13a5b..1417d5c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 28 - buildToolsVersion "28.0.2" + compileSdkVersion 30 defaultConfig { applicationId "com.rxjava2.android.samples" minSdkVersion 16 - targetSdkVersion 28 + targetSdkVersion 30 versionCode 1 versionName "1.0" } @@ -25,17 +24,21 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4' - androidTestImplementation 'androidx.test:runner:1.1.0-alpha4' - androidTestImplementation 'androidx.test:rules:1.1.0-alpha4' - implementation 'androidx.appcompat:appcompat:1.0.0-rc02' - implementation 'androidx.recyclerview:recyclerview:1.0.0-rc02' + + // AndroidX + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.recyclerview:recyclerview:1.2.0' // RxJava2 Dependencies - implementation 'io.reactivex.rxjava2:rxjava:2.2.2' - implementation 'io.reactivex.rxjava2:rxandroid:2.1.0' + implementation 'io.reactivex.rxjava2:rxjava:2.2.9' + implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' // FastAndroidNetworking Dependency implementation 'com.amitshekhar.android:rx2-android-networking:1.0.2' + + // Testing + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + androidTestImplementation 'androidx.test:runner:1.4.0-alpha06' + androidTestImplementation 'androidx.test:rules:1.4.0-alpha06' } diff --git a/app/src/main/java/com/rxjava2/android/samples/MyApplication.java b/app/src/main/java/com/rxjava2/android/samples/MyApplication.java index 781cb30..b3c2508 100644 --- a/app/src/main/java/com/rxjava2/android/samples/MyApplication.java +++ b/app/src/main/java/com/rxjava2/android/samples/MyApplication.java @@ -1,5 +1,6 @@ package com.rxjava2.android.samples; +import android.annotation.SuppressLint; import android.app.Application; import com.rxjava2.android.samples.model.Events; @@ -8,7 +9,6 @@ import java.util.concurrent.TimeUnit; import io.reactivex.Observable; -import io.reactivex.functions.Consumer; /** * Created by threshold on 2017/1/12. @@ -17,26 +17,23 @@ public class MyApplication extends Application { public static final String TAG = "MyApplication"; - private RxBus bus; + private RxBus rxBus; @Override public void onCreate() { super.onCreate(); - bus = new RxBus(); + rxBus = new RxBus(); } - public RxBus bus() { - return bus; + public RxBus getRxBus() { + return rxBus; } + @SuppressLint("CheckResult") public void sendAutoEvent() { + //noinspection ResultOfMethodCallIgnored Observable.timer(2, TimeUnit.SECONDS) - .subscribe(new Consumer() { - @Override - public void accept(Long aLong) { - bus.send(new Events.AutoEvent()); - } - }); + .subscribe(aLong -> rxBus.send(new Events.AutoEvent())); } } diff --git a/app/src/main/java/com/rxjava2/android/samples/model/ApiUser.java b/app/src/main/java/com/rxjava2/android/samples/model/ApiUser.java index 09039ef..02f7430 100644 --- a/app/src/main/java/com/rxjava2/android/samples/model/ApiUser.java +++ b/app/src/main/java/com/rxjava2/android/samples/model/ApiUser.java @@ -1,5 +1,7 @@ package com.rxjava2.android.samples.model; +import androidx.annotation.NonNull; + /** * Created by amitshekhar on 27/08/16. */ @@ -8,6 +10,7 @@ public class ApiUser { public String firstname; public String lastname; + @NonNull @Override public String toString() { return "ApiUser{" + diff --git a/app/src/main/java/com/rxjava2/android/samples/model/Car.java b/app/src/main/java/com/rxjava2/android/samples/model/Car.java index a5ecffa..1485027 100644 --- a/app/src/main/java/com/rxjava2/android/samples/model/Car.java +++ b/app/src/main/java/com/rxjava2/android/samples/model/Car.java @@ -1,9 +1,6 @@ package com.rxjava2.android.samples.model; -import java.util.concurrent.Callable; - import io.reactivex.Observable; -import io.reactivex.ObservableSource; /** * Created by amitshekhar on 30/08/16. @@ -17,12 +14,7 @@ public void setBrand(String brand) { } public Observable brandDeferObservable() { - return Observable.defer(new Callable>() { - @Override - public ObservableSource call() { - return Observable.just(brand); - } - }); + return Observable.defer(() -> Observable.just(brand)); } } 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 6fb84ad..d8dd844 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 @@ -1,5 +1,7 @@ package com.rxjava2.android.samples.model; +import androidx.annotation.NonNull; + /** * Created by amitshekhar on 27/08/16. */ @@ -18,6 +20,7 @@ public User(ApiUser apiUser) { this.lastname = apiUser.lastname; } + @NonNull @Override public String toString() { return "User{" + diff --git a/app/src/main/java/com/rxjava2/android/samples/model/UserDetail.java b/app/src/main/java/com/rxjava2/android/samples/model/UserDetail.java index 1be734b..c717f0e 100644 --- a/app/src/main/java/com/rxjava2/android/samples/model/UserDetail.java +++ b/app/src/main/java/com/rxjava2/android/samples/model/UserDetail.java @@ -1,5 +1,7 @@ package com.rxjava2.android.samples.model; +import androidx.annotation.NonNull; + /** * Created by amitshekhar on 04/02/17. */ @@ -10,6 +12,7 @@ public class UserDetail { public String firstname; public String lastname; + @NonNull @Override public String toString() { return "UserDetail{" + 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 3986c9a..0a3aea3 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 @@ -4,6 +4,8 @@ import android.os.Bundle; import android.view.View; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.ui.operators.AsyncSubjectExampleActivity; import com.rxjava2.android.samples.ui.operators.BehaviorSubjectExampleActivity; @@ -39,8 +41,6 @@ import com.rxjava2.android.samples.ui.operators.WindowExampleActivity; import com.rxjava2.android.samples.ui.operators.ZipExampleActivity; -import androidx.appcompat.app.AppCompatActivity; - public class OperatorsActivity extends AppCompatActivity { @Override diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java index fd392dd..7ad7bc2 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java @@ -4,6 +4,8 @@ import android.os.Bundle; import android.view.View; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.MyApplication; import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.ui.cache.CacheExampleActivity; @@ -13,8 +15,6 @@ import com.rxjava2.android.samples.ui.rxbus.RxBusActivity; import com.rxjava2.android.samples.ui.search.SearchActivity; -import androidx.appcompat.app.AppCompatActivity; - public class SelectionActivity extends AppCompatActivity { @Override @@ -36,7 +36,6 @@ public void startCacheActivity(View view) { } public void startRxBusActivity(View view) { - ((MyApplication) getApplication()).sendAutoEvent(); startActivity(new Intent(SelectionActivity.this, RxBusActivity.class)); } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/CacheExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/CacheExampleActivity.java index bd98f63..bceea49 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/cache/CacheExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/cache/CacheExampleActivity.java @@ -2,10 +2,12 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.ui.cache.model.Data; import com.rxjava2.android.samples.ui.cache.source.DataSource; @@ -14,7 +16,6 @@ import com.rxjava2.android.samples.ui.cache.source.NetworkDataSource; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -32,15 +33,10 @@ public class CacheExampleActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_example); - btn = (Button) findViewById(R.id.btn); - textView = (TextView) findViewById(R.id.textView); + btn = findViewById(R.id.btn); + textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); dataSource = new DataSource(new MemoryDataSource(), new DiskDataSource(), new NetworkDataSource()); } @@ -63,19 +59,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Data data) { + public void onNext(@NonNull Data data) { textView.append(" onNext : " + data.source); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext : " + data.source); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/model/Data.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/model/Data.java index 477144e..fb5de13 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/cache/model/Data.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/cache/model/Data.java @@ -1,10 +1,13 @@ package com.rxjava2.android.samples.ui.cache.model; +import androidx.annotation.NonNull; + public class Data { public String source; - @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException") + @NonNull + @SuppressWarnings({"MethodDoesntCallSuperMethod"}) @Override public Data clone() { return new Data(); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DataSource.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DataSource.java index 23403ff..c63ca91 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DataSource.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DataSource.java @@ -26,8 +26,7 @@ public Observable getDataFromMemory() { } public Observable getDataFromDisk() { - return diskDataSource.getData().doOnNext(data -> - memoryDataSource.cacheInMemory(data) + return diskDataSource.getData().doOnNext(memoryDataSource::cacheInMemory ); } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java index 89ab45b..80dd82f 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java @@ -2,15 +2,16 @@ import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Flowable; import io.reactivex.Observable; public class ComposeOperatorExampleActivity extends AppCompatActivity { - private RxSchedulers schedulers = new RxSchedulers(); + private final RxSchedulers schedulers = new RxSchedulers(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -21,11 +22,11 @@ protected void onCreate(Bundle savedInstanceState) { Compose for reusable code. */ Observable.just(1, 2, 3, 4, 5) - .compose(schedulers.applyObservableAsync()) + .compose(schedulers.applyObservableAsync()) .subscribe(/* */); Flowable.just(1, 2, 3, 4, 5) - .compose(schedulers.applyFlowableAsysnc()) + .compose(schedulers.applyFlowableAsysnc()) .subscribe(/* */); } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/compose/RxSchedulers.java b/app/src/main/java/com/rxjava2/android/samples/ui/compose/RxSchedulers.java index 6be576c..2678859 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/compose/RxSchedulers.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/compose/RxSchedulers.java @@ -1,11 +1,6 @@ package com.rxjava2.android.samples.ui.compose; -import org.reactivestreams.Publisher; - -import io.reactivex.Flowable; import io.reactivex.FlowableTransformer; -import io.reactivex.Observable; -import io.reactivex.ObservableSource; import io.reactivex.ObservableTransformer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -17,59 +12,29 @@ public class RxSchedulers { public ObservableTransformer applyObservableAsync() { - return new ObservableTransformer() { - @Override - public ObservableSource apply(Observable observable) { - return observable.subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - } - }; + return observable -> observable.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); } public ObservableTransformer applyObservableCompute() { - return new ObservableTransformer() { - @Override - public ObservableSource apply(Observable observable) { - return observable.subscribeOn(Schedulers.computation()) - .observeOn(AndroidSchedulers.mainThread()); - } - }; + return observable -> observable.subscribeOn(Schedulers.computation()) + .observeOn(AndroidSchedulers.mainThread()); } public ObservableTransformer applyObservableMainThread() { - return new ObservableTransformer() { - @Override - public ObservableSource apply(Observable observable) { - return observable.observeOn(AndroidSchedulers.mainThread()); - } - }; + return observable -> observable.observeOn(AndroidSchedulers.mainThread()); } public FlowableTransformer applyFlowableMainThread() { - return new FlowableTransformer() { - @Override - public Publisher apply(Flowable flowable) { - return flowable.observeOn(AndroidSchedulers.mainThread()); - } - }; + return flowable -> flowable.observeOn(AndroidSchedulers.mainThread()); } public FlowableTransformer applyFlowableAsysnc() { - return new FlowableTransformer() { - @Override - public Publisher apply(Flowable flowable) { - return flowable.observeOn(AndroidSchedulers.mainThread()); - } - }; + return flowable -> flowable.observeOn(AndroidSchedulers.mainThread()); } public FlowableTransformer applyFlowableCompute() { - return new FlowableTransformer() { - @Override - public Publisher apply(Flowable flowable) { - return flowable.observeOn(AndroidSchedulers.mainThread()); - } - }; + return flowable -> flowable.observeOn(AndroidSchedulers.mainThread()); } } 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 6878e3a..5f09429 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 @@ -5,6 +5,7 @@ import android.util.Pair; import android.view.View; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import com.rx2androidnetworking.Rx2AndroidNetworking; @@ -22,9 +23,7 @@ import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; -import io.reactivex.functions.BiFunction; import io.reactivex.functions.Function; -import io.reactivex.functions.Predicate; import io.reactivex.schedulers.Schedulers; /** @@ -51,28 +50,25 @@ public void map(View view) { .getObjectObservable(ApiUser.class) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .map(new Function() { - @Override - public User apply(ApiUser apiUser) { - // here we get ApiUser from server - User user = new User(apiUser); - // then by converting, we are returning user - return user; - } + .map(apiUser -> { + // here we get ApiUser from server + User user = new User(apiUser); + // then by converting, we are returning user + return user; }) .subscribe(new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { } @Override - public void onNext(User user) { + public void onNext(@NonNull User user) { Log.d(TAG, "user : " + user.toString()); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { Utils.logError(TAG, e); } @@ -116,24 +112,21 @@ private Observable> getFootballFansObservable() { private void findUsersWhoLovesBoth() { // here we are using zip operator to combine both request Observable.zip(getCricketFansObservable(), getFootballFansObservable(), - new BiFunction, List, List>() { - @Override - public List apply(List cricketFans, List footballFans) { - List userWhoLovesBoth = - filterUserWhoLovesBoth(cricketFans, footballFans); - return userWhoLovesBoth; - } + (cricketFans, footballFans) -> { + List userWhoLovesBoth = + filterUserWhoLovesBoth(cricketFans, footballFans); + return userWhoLovesBoth; }) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer>() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { } @Override - public void onNext(List users) { + public void onNext(@NonNull List users) { // do anything with user who loves both Log.d(TAG, "userList size : " + users.size()); for (User user : users) { @@ -142,7 +135,7 @@ public void onNext(List users) { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { Utils.logError(TAG, e); } @@ -183,36 +176,31 @@ private Observable> getAllMyFriendsObservable() { } public void flatMapAndFilter(View view) { + // flatMap - to return users one by one getAllMyFriendsObservable() - .flatMap(new Function, ObservableSource>() { // flatMap - to return users one by one - @Override - public ObservableSource apply(List usersList) { - return Observable.fromIterable(usersList); // returning user one by one from usersList. - } + .flatMap((Function, ObservableSource>) usersList -> { + return Observable.fromIterable(usersList); // returning user one by one from usersList. }) - .filter(new Predicate() { - @Override - public boolean test(User user) { - // filtering user who follows me. - return user.isFollowing; - } + .filter(user -> { + // filtering user who follows me. + return user.isFollowing; }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { } @Override - public void onNext(User user) { + public void onNext(@NonNull User user) { // only the user who is following me comes here one by one Log.d(TAG, "user : " + user.toString()); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { Utils.logError(TAG, e); } @@ -229,30 +217,28 @@ public void onComplete() { */ public void take(View view) { + // flatMap - to return users one by one getUserListObservable() - .flatMap(new Function, ObservableSource>() { // flatMap - to return users one by one - @Override - public ObservableSource apply(List usersList) { - return Observable.fromIterable(usersList); // returning user one by one from usersList. - } + .flatMap((Function, ObservableSource>) usersList -> { + return Observable.fromIterable(usersList); // returning user one by one from usersList. }) .take(4) // it will only emit first 4 users out of all .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { } @Override - public void onNext(User user) { + public void onNext(@NonNull User user) { // // only four user comes here one by one Log.d(TAG, "user : " + user.toString()); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { Utils.logError(TAG, e); } @@ -269,37 +255,32 @@ public void onComplete() { */ public void flatMap(View view) { + // flatMap - to return users one by one getUserListObservable() - .flatMap(new Function, ObservableSource>() { // flatMap - to return users one by one - @Override - public ObservableSource apply(List usersList) { - return Observable.fromIterable(usersList); // returning user one by one from usersList. - } + .flatMap((Function, ObservableSource>) usersList -> { + return Observable.fromIterable(usersList); // returning user one by one from usersList. }) - .flatMap(new Function>() { - @Override - public ObservableSource apply(User user) { - // here we get the user one by one - // and returns corresponding getUserDetailObservable - // for that userId - return getUserDetailObservable(user.id); - } + .flatMap((Function>) user -> { + // here we get the user one by one + // and returns corresponding getUserDetailObservable + // for that userId + return getUserDetailObservable(user.id); }) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { Utils.logError(TAG, e); } @Override - public void onNext(UserDetail userDetail) { + public void onNext(@NonNull UserDetail userDetail) { // do anything with userDetail Log.d(TAG, "userDetail : " + userDetail.toString()); } @@ -331,30 +312,22 @@ private Observable getUserDetailObservable(long id) { } public void flatMapWithZip(View view) { + // flatMap - to return users one by one getUserListObservable() - .flatMap(new Function, ObservableSource>() { // flatMap - to return users one by one - @Override - public ObservableSource apply(List usersList) { - return Observable.fromIterable(usersList); // returning user one by one from usersList. - } + .flatMap((Function, ObservableSource>) usersList -> { + return Observable.fromIterable(usersList); // returning user one by one from usersList. }) - .flatMap(new Function>>() { - @Override - public ObservableSource> apply(User user) { - // here we get the user one by one and then we are zipping - // two observable - one getUserDetailObservable (network call to get userDetail) - // and another Observable.just(user) - just to emit user - return Observable.zip(getUserDetailObservable(user.id), - Observable.just(user), - new BiFunction>() { - @Override - public Pair apply(UserDetail userDetail, User user) { - // runs when network call completes - // we get here userDetail for the corresponding user - return new Pair<>(userDetail, user); // returning the pair(userDetail, user) - } - }); - } + .flatMap((Function>>) user -> { + // here we get the user one by one and then we are zipping + // two observable - one getUserDetailObservable (network call to get userDetail) + // and another Observable.just(user) - just to emit user + return Observable.zip(getUserDetailObservable(user.id), + Observable.just(user), + (userDetail, user1) -> { + // runs when network call completes + // we get here userDetail for the corresponding user + return new Pair<>(userDetail, user1); // returning the pair(userDetail, user) + }); }) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) @@ -366,18 +339,18 @@ public void onComplete() { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { // handle error Utils.logError(TAG, e); } @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { } @Override - public void onNext(Pair pair) { + public void onNext(@NonNull Pair pair) { // here we are getting the userDetail for the corresponding user one by one UserDetail userDetail = pair.first; User user = pair.second; diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/AsyncSubjectExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/AsyncSubjectExampleActivity.java index d2243a2..3751767 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/AsyncSubjectExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/AsyncSubjectExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import io.reactivex.subjects.AsyncSubject; @@ -31,12 +32,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* An AsyncSubject emits the last value (and only the last value) emitted by the source @@ -68,19 +64,19 @@ private Observer getFirstObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " First onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" First onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " First onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" First onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " First onError : " + e.getMessage()); @@ -99,21 +95,21 @@ private Observer getSecondObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { textView.append(" Second onSubscribe : isDisposed :" + d.isDisposed()); Log.d(TAG, " Second onSubscribe : " + d.isDisposed()); textView.append(AppConstant.LINE_SEPARATOR); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" Second onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " Second onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" Second onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " Second onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/BehaviorSubjectExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/BehaviorSubjectExampleActivity.java index 9eeadd0..272e1f6 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/BehaviorSubjectExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/BehaviorSubjectExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import io.reactivex.subjects.BehaviorSubject; @@ -31,12 +32,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* When an observer subscribes to a BehaviorSubject, it begins by emitting the item most @@ -70,19 +66,19 @@ private Observer getFirstObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " First onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" First onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " First onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" First onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " First onError : " + e.getMessage()); @@ -101,21 +97,21 @@ private Observer getSecondObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { textView.append(" Second onSubscribe : isDisposed :" + d.isDisposed()); Log.d(TAG, " Second onSubscribe : " + d.isDisposed()); textView.append(AppConstant.LINE_SEPARATOR); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" Second onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " Second onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" Second onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " Second onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java index 9171136..da2f41b 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java @@ -2,16 +2,17 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.List; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; @@ -32,12 +33,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -67,12 +63,12 @@ private Observer> getObserver() { return new Observer>() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(List stringList) { + public void onNext(@NonNull List stringList) { textView.append(" onNext size : " + stringList.size()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext : size :" + stringList.size()); @@ -85,7 +81,7 @@ public void onNext(List stringList) { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java index 4ee612f..8984407 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java @@ -2,16 +2,17 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Completable; import io.reactivex.CompletableObserver; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -34,12 +35,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -58,7 +54,7 @@ private void doSomeWork() { private CompletableObserver getCompletableObserver() { return new CompletableObserver() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @@ -70,7 +66,7 @@ public void onComplete() { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java index 8bb3e2b..7295f51 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; @@ -30,12 +31,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -62,19 +58,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(String value) { + public void onNext(@NonNull String value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext : value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DebounceExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DebounceExampleActivity.java index 7837381..df14a7b 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DebounceExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DebounceExampleActivity.java @@ -2,19 +2,18 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; -import io.reactivex.ObservableEmitter; -import io.reactivex.ObservableOnSubscribe; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -37,12 +36,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -60,22 +54,19 @@ private void doSomeWork() { } private Observable getObservable() { - return Observable.create(new ObservableOnSubscribe() { - @Override - public void subscribe(ObservableEmitter emitter) throws Exception { - // send events with simulated time wait - emitter.onNext(1); // skip - Thread.sleep(400); - emitter.onNext(2); // deliver - Thread.sleep(505); - emitter.onNext(3); // skip - Thread.sleep(100); - emitter.onNext(4); // deliver - Thread.sleep(605); - emitter.onNext(5); // deliver - Thread.sleep(510); - emitter.onComplete(); - } + return Observable.create(emitter -> { + // send events with simulated time wait + emitter.onNext(1); // skip + Thread.sleep(400); + emitter.onNext(2); // deliver + Thread.sleep(505); + emitter.onNext(3); // skip + Thread.sleep(100); + emitter.onNext(4); // deliver + Thread.sleep(605); + emitter.onNext(5); // deliver + Thread.sleep(510); + emitter.onComplete(); }); } @@ -83,12 +74,12 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" onNext : "); textView.append(AppConstant.LINE_SEPARATOR); textView.append(" value : " + value); @@ -98,7 +89,7 @@ public void onNext(Integer value) { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java index 0e6249c..8ec09ca 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java @@ -2,15 +2,16 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.model.Car; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; @@ -31,12 +32,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -60,19 +56,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(String value) { + public void onNext(@NonNull String value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext : value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.java index 212092c..a374a12 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.java @@ -2,16 +2,17 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -35,12 +36,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -63,19 +59,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(String value) { + public void onNext(@NonNull String value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext : value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java index 9e51b3c..46f7d68 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java @@ -3,18 +3,16 @@ import android.os.Bundle; import android.os.SystemClock; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import java.util.concurrent.Callable; - -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; -import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableObserver; @@ -37,17 +35,13 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } @Override protected void onDestroy() { super.onDestroy(); + Log.d(TAG, " onDestroy"); disposables.clear(); // do not send event after activity has been destroyed } @@ -56,12 +50,14 @@ protected void onDestroy() { * disposables is cleared in onDestroy of this activity. */ void doSomeWork() { + Log.d(TAG, " doSomeWork"); disposables.add(sampleObservable() // Run on a background thread .subscribeOn(Schedulers.io()) // Be notified on the main thread .observeOn(AndroidSchedulers.mainThread()) .subscribeWith(new DisposableObserver() { + @Override public void onComplete() { textView.append(" onComplete"); @@ -70,14 +66,14 @@ public void onComplete() { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); } @Override - public void onNext(String value) { + public void onNext(@NonNull String value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext value : " + value); @@ -86,13 +82,10 @@ public void onNext(String value) { } static Observable sampleObservable() { - return Observable.defer(new Callable>() { - @Override - public ObservableSource call() { - // Do some long running operation - SystemClock.sleep(2000); - return Observable.just("one", "two", "three", "four", "five"); - } + return Observable.defer(() -> { + // Do some long running operation + SystemClock.sleep(2000); + return Observable.just("one", "two", "three", "four", "five"); }); } } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DistinctExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DistinctExampleActivity.java index af2c0e3..f45ec5a 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DistinctExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DistinctExampleActivity.java @@ -2,15 +2,16 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; @@ -31,12 +32,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -58,19 +54,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { Log.d(TAG, " onError : " + e.getMessage()); } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java index 35ddf9a..e49baed 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java @@ -2,18 +2,18 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Predicate; /** @@ -32,12 +32,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -46,12 +41,7 @@ public void onClick(View view) { */ private void doSomeWork() { Observable.just(1, 2, 3, 4, 5, 6) - .filter(new Predicate() { - @Override - public boolean test(Integer integer) { - return integer % 2 == 0; - } - }) + .filter(integer -> integer % 2 == 0) .subscribe(getObserver()); } @@ -60,12 +50,12 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" onNext : "); textView.append(AppConstant.LINE_SEPARATOR); textView.append(" value : " + value); @@ -75,7 +65,7 @@ public void onNext(Integer value) { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java index 2bf727f..de17f9d 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java @@ -2,18 +2,18 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Flowable; import io.reactivex.SingleObserver; import io.reactivex.disposables.Disposable; -import io.reactivex.functions.BiFunction; /** * Created by amitshekhar on 27/08/16. @@ -31,12 +31,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -44,14 +39,10 @@ public void onClick(View view) { */ private void doSomeWork() { - Flowable observable = Flowable.just(1, 2, 3, 4); + Flowable flowable = Flowable.just(1, 2, 3, 4); - observable.reduce(50, new BiFunction() { - @Override - public Integer apply(Integer t1, Integer t2) { - return t1 + t2; - } - }).subscribe(getObserver()); + //noinspection Convert2MethodRef + flowable.reduce(50, (t1, t2) -> t1 + t2).subscribe(getObserver()); } @@ -59,19 +50,19 @@ private SingleObserver getObserver() { return new SingleObserver() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onSuccess(Integer value) { + public void onSuccess(@NonNull Integer value) { textView.append(" onSuccess : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onSuccess : value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java index 36baeaf..ef50202 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java @@ -2,16 +2,17 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; @@ -35,17 +36,13 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } @Override protected void onDestroy() { super.onDestroy(); + Log.d(TAG, "onDestroy"); disposables.clear(); // clearing it : do not emit after destroy } @@ -54,6 +51,7 @@ protected void onDestroy() { * which start immediately */ private void doSomeWork() { + Log.d(TAG, "doSomeWork"); disposables.add(getObservable() // Run on a background thread .subscribeOn(Schedulers.io()) @@ -70,14 +68,14 @@ private DisposableObserver getObserver() { return new DisposableObserver() { @Override - public void onNext(Long value) { + public void onNext(@NonNull Long value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext : value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/LastOperatorExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/LastOperatorExampleActivity.java index 5cc3087..6d9b591 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/LastOperatorExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/LastOperatorExampleActivity.java @@ -2,15 +2,16 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.SingleObserver; import io.reactivex.disposables.Disposable; @@ -20,7 +21,7 @@ */ public class LastOperatorExampleActivity extends AppCompatActivity { - private static final String TAG = DistinctExampleActivity.class.getSimpleName(); + private static final String TAG = LastOperatorExampleActivity.class.getSimpleName(); Button btn; TextView textView; @@ -32,12 +33,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -56,12 +52,12 @@ private SingleObserver getObserver() { return new SingleObserver() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onSuccess(String value) { + public void onSuccess(@NonNull String value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext value : " + value); @@ -69,7 +65,7 @@ public void onSuccess(String value) { @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java index 29794ca..0d3ac24 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java @@ -2,10 +2,12 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.model.ApiUser; import com.rxjava2.android.samples.model.User; @@ -14,14 +16,10 @@ import java.util.List; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; -import io.reactivex.ObservableEmitter; -import io.reactivex.ObservableOnSubscribe; 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; /** @@ -40,12 +38,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -60,24 +53,15 @@ private void doSomeWork() { .subscribeOn(Schedulers.io()) // Be notified on the main thread .observeOn(AndroidSchedulers.mainThread()) - .map(new Function, List>() { - - @Override - public List apply(List apiUsers) { - return Utils.convertApiUserListToUserList(apiUsers); - } - }) + .map(Utils::convertApiUserListToUserList) .subscribe(getObserver()); } private Observable> getObservable() { - return Observable.create(new ObservableOnSubscribe>() { - @Override - public void subscribe(ObservableEmitter> e) { - if (!e.isDisposed()) { - e.onNext(Utils.getApiUserList()); - e.onComplete(); - } + return Observable.create(source -> { + if (!source.isDisposed()) { + source.onNext(Utils.getApiUserList()); + source.onComplete(); } }); } @@ -86,12 +70,12 @@ private Observer> getObserver() { return new Observer>() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(List userList) { + public void onNext(@NonNull List userList) { textView.append(" onNext"); textView.append(AppConstant.LINE_SEPARATOR); for (User user : userList) { @@ -102,7 +86,7 @@ public void onNext(List userList) { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java index 01551bf..740bff7 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; @@ -30,12 +31,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -60,19 +56,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(String value) { + public void onNext(@NonNull String value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext : value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java index d03266b..2546137 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import io.reactivex.subjects.PublishSubject; @@ -31,12 +32,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* PublishSubject emits to an observer only those items that are emitted @@ -67,19 +63,19 @@ private Observer getFirstObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " First onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" First onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " First onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" First onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " First onError : " + e.getMessage()); @@ -98,21 +94,21 @@ private Observer getSecondObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { textView.append(" Second onSubscribe : isDisposed :" + d.isDisposed()); Log.d(TAG, " Second onSubscribe : " + d.isDisposed()); textView.append(AppConstant.LINE_SEPARATOR); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" Second onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " Second onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" Second onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " Second onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java index aa8aec1..c3dd2db 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java @@ -2,18 +2,18 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.MaybeObserver; import io.reactivex.Observable; import io.reactivex.disposables.Disposable; -import io.reactivex.functions.BiFunction; /** * Created by amitshekhar on 27/08/16. @@ -31,25 +31,16 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* * simple example using reduce to add all the number */ private void doSomeWork() { + //noinspection Convert2MethodRef getObservable() - .reduce(new BiFunction() { - @Override - public Integer apply(Integer t1, Integer t2) { - return t1 + t2; - } - }) + .reduce((t1, t2) -> t1 + t2) .subscribe(getObserver()); } @@ -60,19 +51,19 @@ private Observable getObservable() { private MaybeObserver getObserver() { return new MaybeObserver() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onSuccess(Integer value) { + public void onSuccess(@NonNull Integer value) { textView.append(" onSuccess : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onSuccess : value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java index c1ce888..fa7bcff 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import io.reactivex.observables.ConnectableObservable; @@ -31,12 +32,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* Using replay operator, replay ensure that all observers see the same sequence @@ -68,19 +64,19 @@ private Observer getFirstObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " First onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" First onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " First onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" First onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " First onError : " + e.getMessage()); @@ -99,21 +95,21 @@ private Observer getSecondObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { textView.append(" Second onSubscribe : isDisposed :" + d.isDisposed()); Log.d(TAG, " Second onSubscribe : " + d.isDisposed()); textView.append(AppConstant.LINE_SEPARATOR); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" Second onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " Second onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" Second onError : " + e.getMessage()); Log.d(TAG, " Second onError : " + e.getMessage()); } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplaySubjectExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplaySubjectExampleActivity.java index 34bb5e4..b75c109 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplaySubjectExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplaySubjectExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import io.reactivex.subjects.ReplaySubject; @@ -31,12 +32,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* ReplaySubject emits to any observer all of the items that were emitted @@ -66,19 +62,19 @@ private Observer getFirstObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " First onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" First onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " First onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" First onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " First onError : " + e.getMessage()); @@ -97,21 +93,21 @@ private Observer getSecondObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { textView.append(" Second onSubscribe : isDisposed :" + d.isDisposed()); Log.d(TAG, " Second onSubscribe : " + d.isDisposed()); textView.append(AppConstant.LINE_SEPARATOR); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" Second onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " Second onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" Second onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " Second onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ScanExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ScanExampleActivity.java index 0c263c2..9b8310e 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ScanExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ScanExampleActivity.java @@ -2,19 +2,19 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -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.schedulers.Schedulers; public class ScanExampleActivity extends AppCompatActivity { @@ -30,27 +30,18 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* Using scan operator, it sends also the previous result */ private void doSomeWork() { + //noinspection Convert2MethodRef getObservable() // Run on a background thread .subscribeOn(Schedulers.io()) // Be notified on the main thread .observeOn(AndroidSchedulers.mainThread()) - .scan(new BiFunction() { - @Override - public Integer apply(Integer int1, Integer int2) { - return int1 + int2; - } - }) + .scan((int1, int2) -> int1 + int2) .subscribe(getObserver()); } @@ -62,19 +53,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.java index 6329b1b..0e67224 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -32,12 +33,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -60,19 +56,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(String value) { + public void onNext(@NonNull String value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext : value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java index 403f070..1a11e14 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Single; import io.reactivex.SingleObserver; import io.reactivex.disposables.Disposable; @@ -30,12 +31,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -49,19 +45,19 @@ private void doSomeWork() { private SingleObserver getSingleObserver() { return new SingleObserver() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onSuccess(String value) { + public void onSuccess(@NonNull String value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java index 06ad8eb..0a0b48d 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -32,12 +33,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* Using skip operator, it will not emit @@ -61,19 +57,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); 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 index d787bc5..3b45307 100644 --- 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 @@ -2,18 +2,19 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.Random; import java.util.concurrent.TimeUnit; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.Observer; @@ -39,12 +40,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* whenever a new item is emitted by the source Observable, it will unsubscribe to and stop @@ -55,14 +51,11 @@ public void onClick(View view) { */ 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()); - } + .switchMap((Function>) 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()) @@ -76,19 +69,19 @@ private Observable getObservable() { private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(String value) { + public void onNext(@NonNull String value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java index 74b4b9f..41f14af 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java @@ -2,14 +2,15 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -32,12 +33,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* Using take operator, it only emits @@ -61,19 +57,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeOperatorBaseActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeOperatorBaseActivity.java index a078b5b..3a5426c 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeOperatorBaseActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeOperatorBaseActivity.java @@ -5,12 +5,14 @@ import android.widget.Button; import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import com.rxjava2.android.samples.utils.ObserverAdapter; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; @@ -47,7 +49,7 @@ public void onSubscribe(Disposable d) { } @Override - public void onNext(String value) { + public void onNext(@NonNull String value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext value : " + value); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeUntilExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeUntilExampleActivity.java index e0313d0..14dc6c0 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeUntilExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeUntilExampleActivity.java @@ -9,7 +9,6 @@ import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.functions.BiFunction; public class TakeUntilExampleActivity extends TakeOperatorBaseActivity { @@ -30,12 +29,7 @@ public void onComplete() { 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; - } - }) + .zipWith(Observable.interval(0, 1, TimeUnit.SECONDS), (s, aLong) -> s) //Will receive the items from Strings observable until timerObservable doesn't start emitting data. .takeUntil(timerObservable) //We need to observe on MainThread because delay works on background thread to avoid UI blocking. 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 index 213b779..28ff1ba 100644 --- 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 @@ -4,8 +4,6 @@ import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.functions.BiFunction; -import io.reactivex.functions.Predicate; public class TakeWhileExampleActivity extends TakeOperatorBaseActivity { @@ -15,19 +13,9 @@ public class TakeWhileExampleActivity extends TakeOperatorBaseActivity { protected 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; - } - }) + .zipWith(Observable.interval(0, 1, TimeUnit.SECONDS), (s, aLong) -> 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"); - } - }) + .takeWhile(s -> !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()); 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 a009cc1..b4d8771 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 @@ -2,19 +2,18 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; -import io.reactivex.ObservableEmitter; -import io.reactivex.ObservableOnSubscribe; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -38,12 +37,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -62,25 +56,22 @@ private void doSomeWork() { } private Observable getObservable() { - return Observable.create(new ObservableOnSubscribe() { - @Override - public void subscribe(ObservableEmitter emitter) throws Exception { - // send events with simulated time wait - Thread.sleep(0); - emitter.onNext(1); // deliver - emitter.onNext(2); // skip - Thread.sleep(505); - emitter.onNext(3); // deliver - Thread.sleep(99); - emitter.onNext(4); // skip - Thread.sleep(100); - emitter.onNext(5); // skip - emitter.onNext(6); // skip - Thread.sleep(305); - emitter.onNext(7); // deliver - Thread.sleep(510); - emitter.onComplete(); - } + return Observable.create(emitter -> { + // send events with simulated time wait + Thread.sleep(0); + emitter.onNext(1); // deliver + emitter.onNext(2); // skip + Thread.sleep(505); + emitter.onNext(3); // deliver + Thread.sleep(99); + emitter.onNext(4); // skip + Thread.sleep(100); + emitter.onNext(5); // skip + emitter.onNext(6); // skip + Thread.sleep(305); + emitter.onNext(7); // deliver + Thread.sleep(510); + emitter.onComplete(); }); } @@ -88,12 +79,12 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" onNext : "); textView.append(AppConstant.LINE_SEPARATOR); textView.append(" value : " + value); @@ -103,7 +94,7 @@ public void onNext(Integer value) { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java index b48e208..936ed09 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java @@ -2,19 +2,18 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; -import io.reactivex.ObservableEmitter; -import io.reactivex.ObservableOnSubscribe; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -37,12 +36,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -61,25 +55,22 @@ private void doSomeWork() { } private Observable getObservable() { - return Observable.create(new ObservableOnSubscribe() { - @Override - public void subscribe(ObservableEmitter emitter) throws Exception { - // send events with simulated time wait - Thread.sleep(0); - emitter.onNext(1); // skip - emitter.onNext(2); // deliver - Thread.sleep(505); - emitter.onNext(3); // skip - Thread.sleep(99); - emitter.onNext(4); // skip - Thread.sleep(100); - emitter.onNext(5); // skip - emitter.onNext(6); // deliver - Thread.sleep(305); - emitter.onNext(7); // deliver - Thread.sleep(510); - emitter.onComplete(); - } + return Observable.create(emitter -> { + // send events with simulated time wait + Thread.sleep(0); + emitter.onNext(1); // skip + emitter.onNext(2); // deliver + Thread.sleep(505); + emitter.onNext(3); // skip + Thread.sleep(99); + emitter.onNext(4); // skip + Thread.sleep(100); + emitter.onNext(5); // skip + emitter.onNext(6); // deliver + Thread.sleep(305); + emitter.onNext(7); // deliver + Thread.sleep(510); + emitter.onComplete(); }); } @@ -87,12 +78,12 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Integer value) { + public void onNext(@NonNull Integer value) { textView.append(" onNext : "); textView.append(AppConstant.LINE_SEPARATOR); textView.append(" value : " + value); @@ -102,7 +93,7 @@ public void onNext(Integer value) { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.java index cbfa1e1..be2f358 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.java @@ -2,16 +2,17 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -34,12 +35,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -62,19 +58,19 @@ private Observer getObserver() { return new Observer() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(Long value) { + public void onNext(@NonNull Long value) { textView.append(" onNext : value : " + value); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onNext : value : " + value); } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java index 881db12..4f94969 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java @@ -1,17 +1,18 @@ package com.rxjava2.android.samples.ui.operators; +import android.annotation.SuppressLint; import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; @@ -30,12 +31,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -44,34 +40,32 @@ public void onClick(View view) { * Observable windows and emit these windows rather than * emitting the items one at a time */ + @SuppressLint("CheckResult") protected void doSomeWork() { - - Observable.interval(1, TimeUnit.SECONDS).take(12) + //noinspection ResultOfMethodCallIgnored + Observable.interval(1, TimeUnit.SECONDS) + .take(12) .window(3, TimeUnit.SECONDS) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(getConsumer()); } + @SuppressLint("CheckResult") public Consumer> getConsumer() { - return new Consumer>() { - @Override - public void accept(Observable observable) { - Log.d(TAG, "Sub Divide begin...."); - textView.append("Sub Divide begin ...."); - textView.append(AppConstant.LINE_SEPARATOR); - observable - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(Long value) { - Log.d(TAG, "Next:" + value); - textView.append("Next:" + value); - textView.append(AppConstant.LINE_SEPARATOR); - } - }); - } + return observable -> { + Log.d(TAG, "Sub Divide begin...."); + textView.append("Sub Divide begin ...."); + textView.append(AppConstant.LINE_SEPARATOR); + //noinspection ResultOfMethodCallIgnored + observable + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(value -> { + Log.d(TAG, "Next:" + value); + textView.append("Next:" + value); + textView.append(AppConstant.LINE_SEPARATOR); + }); }; } } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java index 11cb394..9f6f38a 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java @@ -2,10 +2,12 @@ import android.os.Bundle; import android.util.Log; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.model.User; import com.rxjava2.android.samples.utils.AppConstant; @@ -13,14 +15,11 @@ import java.util.List; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.Observable; -import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; -import io.reactivex.functions.BiFunction; import io.reactivex.schedulers.Schedulers; /** @@ -39,12 +38,7 @@ protected void onCreate(Bundle savedInstanceState) { btn = findViewById(R.id.btn); textView = findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); + btn.setOnClickListener(view -> doSomeWork()); } /* @@ -55,12 +49,7 @@ public void onClick(View view) { */ private void doSomeWork() { Observable.zip(getCricketFansObservable(), getFootballFansObservable(), - new BiFunction, List, List>() { - @Override - public List apply(List cricketFans, List footballFans) { - return Utils.filterUserWhoLovesBoth(cricketFans, footballFans); - } - }) + Utils::filterUserWhoLovesBoth) // Run on a background thread .subscribeOn(Schedulers.io()) // Be notified on the main thread @@ -69,25 +58,19 @@ public List apply(List cricketFans, List footballFans) { } private Observable> getCricketFansObservable() { - return Observable.create(new ObservableOnSubscribe>() { - @Override - public void subscribe(ObservableEmitter> e) { - if (!e.isDisposed()) { - e.onNext(Utils.getUserListWhoLovesCricket()); - e.onComplete(); - } + return Observable.create((ObservableOnSubscribe>) source -> { + if (!source.isDisposed()) { + source.onNext(Utils.getUserListWhoLovesCricket()); + source.onComplete(); } }).subscribeOn(Schedulers.io()); } private Observable> getFootballFansObservable() { - return Observable.create(new ObservableOnSubscribe>() { - @Override - public void subscribe(ObservableEmitter> e) { - if (!e.isDisposed()) { - e.onNext(Utils.getUserListWhoLovesFootball()); - e.onComplete(); - } + return Observable.create((ObservableOnSubscribe>) source -> { + if (!source.isDisposed()) { + source.onNext(Utils.getUserListWhoLovesFootball()); + source.onComplete(); } }).subscribeOn(Schedulers.io()); } @@ -96,12 +79,12 @@ private Observer> getObserver() { return new Observer>() { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { Log.d(TAG, " onSubscribe : " + d.isDisposed()); } @Override - public void onNext(List userList) { + public void onNext(@NonNull List userList) { textView.append(" onNext"); textView.append(AppConstant.LINE_SEPARATOR); for (User user : userList) { @@ -112,7 +95,7 @@ public void onNext(List userList) { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { textView.append(" onError : " + e.getMessage()); textView.append(AppConstant.LINE_SEPARATOR); Log.d(TAG, " onError : " + e.getMessage()); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java index e9c89a9..67bfe04 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java @@ -4,6 +4,7 @@ import android.view.View; import android.widget.ProgressBar; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -28,8 +29,9 @@ public class PaginationActivity extends AppCompatActivity { public static final String TAG = PaginationActivity.class.getSimpleName(); - private CompositeDisposable compositeDisposable = new CompositeDisposable(); - private PublishProcessor paginator = PublishProcessor.create(); + private final CompositeDisposable compositeDisposable = new CompositeDisposable(); + @SuppressWarnings("SpellCheckingInspection") + private final PublishProcessor paginator = PublishProcessor.create(); private PaginationAdapter paginationAdapter; private RecyclerView recyclerView; private ProgressBar progressBar; @@ -67,7 +69,7 @@ protected void onDestroy() { private void setUpLoadMoreListener() { recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override - public void onScrolled(RecyclerView recyclerView, + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationAdapter.java b/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationAdapter.java index ddc0402..1acce48 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationAdapter.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationAdapter.java @@ -5,13 +5,14 @@ import android.view.ViewGroup; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + import com.rxjava2.android.samples.R; import java.util.ArrayList; import java.util.List; -import androidx.recyclerview.widget.RecyclerView; - /** * Created by amitshekhar on 15/03/17. */ @@ -28,13 +29,14 @@ void addItems(List items) { this.items.addAll(items); } + @NonNull @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return ItemViewHolder.create(parent); } @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { ((ItemViewHolder) holder).bind(items.get(position)); } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBus.java b/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBus.java index cdc81b0..8af646b 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBus.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBus.java @@ -12,7 +12,7 @@ public class RxBus { public RxBus() { } - private PublishSubject bus = PublishSubject.create(); + private final PublishSubject bus = PublishSubject.create(); public void send(Object o) { bus.onNext(o); diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java index a991e5e..9bd5b22 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java @@ -1,22 +1,23 @@ package com.rxjava2.android.samples.ui.rxbus; +import android.annotation.SuppressLint; import android.os.Bundle; -import android.view.View; import android.widget.Button; import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; + import com.rxjava2.android.samples.MyApplication; import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.model.Events; -import androidx.appcompat.app.AppCompatActivity; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; -import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 06/02/17. + * https://blog.mindorks.com/implementing-eventbus-with-rxjava-rxbus-e6c940a94bd8 */ public class RxBusActivity extends AppCompatActivity { @@ -32,37 +33,33 @@ protected void onDestroy() { disposables.clear(); // do not send event after activity has been destroyed } + @SuppressLint("SetTextI18n") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rxbus); + + ((MyApplication) getApplication()).sendAutoEvent(); + textView = findViewById(R.id.textView); button = findViewById(R.id.button); disposables.add(((MyApplication) getApplication()) - .bus() + .getRxBus() .toObservable() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(Object object) { - if (object instanceof Events.AutoEvent) { - textView.setText("Auto Event Received"); - } else if (object instanceof Events.TapEvent) { - textView.setText("Tap Event Received"); - } + .subscribe(object -> { + if (object instanceof Events.AutoEvent) { + textView.setText("Auto Event Received"); + } else if (object instanceof Events.TapEvent) { + textView.setText("Tap Event Received"); } })); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((MyApplication) getApplication()) - .bus() - .send(new Events.TapEvent()); - } - }); + button.setOnClickListener(v -> ((MyApplication) getApplication()) + .getRxBus() + .send(new Events.TapEvent())); } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.java index d9353c9..356dfbe 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.java @@ -1,5 +1,6 @@ package com.rxjava2.android.samples.ui.search; +import android.annotation.SuppressLint; import android.os.Bundle; import android.widget.SearchView; import android.widget.TextView; @@ -13,10 +14,7 @@ import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.annotations.NonNull; -import io.reactivex.functions.Consumer; import io.reactivex.functions.Function; -import io.reactivex.functions.Predicate; import io.reactivex.schedulers.Schedulers; /** @@ -39,54 +37,39 @@ protected void onCreate(Bundle savedInstanceState) { setUpSearchObservable(); } + @SuppressLint("CheckResult") private void setUpSearchObservable() { + //noinspection ResultOfMethodCallIgnored RxSearchObservable.fromView(searchView) .debounce(300, TimeUnit.MILLISECONDS) - .filter(new Predicate() { - @Override - public boolean test(String text) { - if (text.isEmpty()) { - textViewResult.setText(""); - return false; - } else { - return true; - } + .filter(text -> { + if (text.isEmpty()) { + textViewResult.setText(""); + return false; + } else { + return true; } }) .distinctUntilChanged() - .switchMap(new Function>() { - @Override - public ObservableSource apply(String query) { - return dataFromNetwork(query) - .doOnError(throwable -> { - // handle error - }) - // continue emission in case of error also - .onErrorReturn(throwable -> ""); - } - }) + .switchMap((Function>) query -> dataFromNetwork(query) + .doOnError(throwable -> { + // handle error + }) + // continue emission in case of error also + .onErrorReturn(throwable -> "")) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(String result) { - textViewResult.setText(result); - } - }); + .subscribe(result -> textViewResult.setText(result)); } /** * Simulation of network data + * Reverse the query string */ private Observable dataFromNetwork(final String query) { return Observable.just(true) .delay(2, TimeUnit.SECONDS) - .map(new Function() { - @Override - public String apply(@NonNull Boolean value) { - return query; - } - }); + .map(value -> new StringBuilder(query).reverse().toString()); } } 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 index 546084a..1f2a13a 100644 --- a/app/src/main/java/com/rxjava2/android/samples/utils/ObserverAdapter.java +++ b/app/src/main/java/com/rxjava2/android/samples/utils/ObserverAdapter.java @@ -1,5 +1,7 @@ package com.rxjava2.android.samples.utils; +import androidx.annotation.NonNull; + import io.reactivex.Observer; import io.reactivex.disposables.Disposable; @@ -10,17 +12,17 @@ */ public abstract class ObserverAdapter implements Observer { @Override - public void onSubscribe(Disposable d) { + public void onSubscribe(@NonNull Disposable d) { } @Override - public void onNext(T s) { + public void onNext(@NonNull T s) { } @Override - public void onError(Throwable e) { + public void onError(@NonNull Throwable e) { } 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 c0d7076..6d289aa 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 @@ -18,6 +18,7 @@ private Utils() { // This class in not publicly instantiable. } + @SuppressWarnings("unused") public static List getUserList() { List userList = new ArrayList<>(); @@ -76,8 +77,9 @@ public static List convertApiUserListToUserList(List apiUserList) return userList; } + @SuppressWarnings("unused") public static List convertApiUserListToApiUserList(List apiUserList) { - return apiUserList; + return apiUserList; } @@ -122,7 +124,7 @@ public static List getUserListWhoLovesFootball() { public static List filterUserWhoLovesBoth(List cricketFans, List footballFans) { - List userWhoLovesBoth = new ArrayList(); + List userWhoLovesBoth = new ArrayList<>(); for (User cricketFan : cricketFans) { for (User footballFan : footballFans) { if (cricketFan.id == footballFan.id) { diff --git a/app/src/main/res/layout/activity_example.xml b/app/src/main/res/layout/activity_example.xml index 9012a9e..5d4db2b 100644 --- a/app/src/main/res/layout/activity_example.xml +++ b/app/src/main/res/layout/activity_example.xml @@ -23,7 +23,7 @@ diff --git a/build.gradle b/build.gradle index f6f90b2..d0ddbb3 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.2.0' + classpath 'com.android.tools.build:gradle:4.2.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cd03b6a..ae32e27 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip +