diff --git a/app/build.gradle b/app/build.gradle index fe13a5b..642bb95 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,8 +1,10 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'kotlin-android' android { compileSdkVersion 28 - buildToolsVersion "28.0.2" + buildToolsVersion "28.0.3" defaultConfig { applicationId "com.rxjava2.android.samples" @@ -26,16 +28,23 @@ 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' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-beta01' + androidTestImplementation 'androidx.test:runner:1.2.0-beta01' + androidTestImplementation 'androidx.test:rules:1.2.0-beta01' + implementation 'androidx.appcompat:appcompat:1.1.0-alpha05' + implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha05' // 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.7' + implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' // FastAndroidNetworking Dependency implementation 'com.amitshekhar.android:rx2-android-networking:1.0.2' + + // kotlin + implementation "androidx.core:core-ktx:1.0.2" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} +repositories { + mavenCentral() } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 720343a..da23f81 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,8 +5,7 @@ - - - @@ -45,99 +35,22 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/MyApplication.java b/app/src/main/java/com/rxjava2/android/samples/MyApplication.java deleted file mode 100644 index 781cb30..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/MyApplication.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.rxjava2.android.samples; - -import android.app.Application; - -import com.rxjava2.android.samples.model.Events; -import com.rxjava2.android.samples.ui.rxbus.RxBus; - -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.functions.Consumer; - -/** - * Created by threshold on 2017/1/12. - */ - -public class MyApplication extends Application { - - public static final String TAG = "MyApplication"; - private RxBus bus; - - @Override - public void onCreate() { - super.onCreate(); - bus = new RxBus(); - } - - public RxBus bus() { - return bus; - } - - public void sendAutoEvent() { - Observable.timer(2, TimeUnit.SECONDS) - .subscribe(new Consumer() { - @Override - public void accept(Long aLong) { - bus.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 deleted file mode 100644 index 09039ef..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/model/ApiUser.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.rxjava2.android.samples.model; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class ApiUser { - public long id; - public String firstname; - public String lastname; - - @Override - public String toString() { - return "ApiUser{" + - "id=" + id + - ", firstname='" + firstname + '\'' + - ", lastname='" + lastname + '\'' + - '}'; - } -} diff --git a/app/src/main/java/com/rxjava2/android/samples/model/ApiUser.kt b/app/src/main/java/com/rxjava2/android/samples/model/ApiUser.kt new file mode 100644 index 0000000..939b190 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/model/ApiUser.kt @@ -0,0 +1,8 @@ +package com.rxjava2.android.samples.model + +/** + * Created by amitshekhar on 27/08/16. + */ +data class ApiUser(var id: Long = 0L, + var firstname: String, + var lastname: String) \ No newline at end of file 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 deleted file mode 100644 index a5ecffa..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/model/Car.java +++ /dev/null @@ -1,28 +0,0 @@ -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. - */ -public class Car { - - private String brand; - - public void setBrand(String brand) { - this.brand = brand; - } - - public Observable brandDeferObservable() { - return Observable.defer(new Callable>() { - @Override - public ObservableSource call() { - return Observable.just(brand); - } - }); - } - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/model/Events.java b/app/src/main/java/com/rxjava2/android/samples/model/Events.java deleted file mode 100644 index d4541b4..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/model/Events.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.rxjava2.android.samples.model; - -/** - * Created by amitshekhar on 06/02/17. - */ - -public class Events { - - private Events() { - - } - - public static class TapEvent { - - } - - public static class AutoEvent { - - } - -} 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 deleted file mode 100644 index 6fb84ad..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/model/User.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.rxjava2.android.samples.model; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class User { - public long id; - public String firstname; - public String lastname; - public boolean isFollowing; - - public User() { - } - - public User(ApiUser apiUser) { - this.id = apiUser.id; - this.firstname = apiUser.firstname; - this.lastname = apiUser.lastname; - } - - @Override - public String toString() { - return "User{" + - "id=" + id + - ", firstname='" + firstname + '\'' + - ", lastname='" + lastname + '\'' + - ", isFollowing=" + isFollowing + - '}'; - } - - @Override - public int hashCode() { - return (int) id + firstname.hashCode() + lastname.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof User) { - User user = (User) obj; - - return this.id == user.id - && this.firstname.equals(user.firstname) - && this.lastname.equals(user.lastname); - } - - return false; - } -} diff --git a/app/src/main/java/com/rxjava2/android/samples/model/User.kt b/app/src/main/java/com/rxjava2/android/samples/model/User.kt new file mode 100644 index 0000000..e04b22f --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/model/User.kt @@ -0,0 +1,10 @@ +package com.rxjava2.android.samples.model + +/** + * Created by amitshekhar on 27/08/16. + */ + +data class User(var id: Long = 0L, + var firstname: String, + var lastname: String, + var isFollowing: Boolean = false) 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 deleted file mode 100644 index 1be734b..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/model/UserDetail.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.rxjava2.android.samples.model; - -/** - * Created by amitshekhar on 04/02/17. - */ - -public class UserDetail { - - public long id; - public String firstname; - public String lastname; - - @Override - public String toString() { - return "UserDetail{" + - "id=" + id + - ", firstname='" + firstname + '\'' + - ", lastname='" + lastname + '\'' + - '}'; - } -} diff --git a/app/src/main/java/com/rxjava2/android/samples/model/UserDetail.kt b/app/src/main/java/com/rxjava2/android/samples/model/UserDetail.kt new file mode 100644 index 0000000..bdb2e4e --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/model/UserDetail.kt @@ -0,0 +1,9 @@ +package com.rxjava2.android.samples.model + +/** + * Created by amitshekhar on 04/02/17. + */ + +data class UserDetail(var id: Long = 0L, + var firstname: String, + var lastname: String) 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 deleted file mode 100644 index 3986c9a..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.rxjava2.android.samples.ui; - -import android.content.Intent; -import android.os.Bundle; -import android.view.View; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.ui.operators.AsyncSubjectExampleActivity; -import com.rxjava2.android.samples.ui.operators.BehaviorSubjectExampleActivity; -import com.rxjava2.android.samples.ui.operators.BufferExampleActivity; -import com.rxjava2.android.samples.ui.operators.CompletableObserverExampleActivity; -import com.rxjava2.android.samples.ui.operators.ConcatExampleActivity; -import com.rxjava2.android.samples.ui.operators.DebounceExampleActivity; -import com.rxjava2.android.samples.ui.operators.DeferExampleActivity; -import com.rxjava2.android.samples.ui.operators.DelayExampleActivity; -import com.rxjava2.android.samples.ui.operators.DisposableExampleActivity; -import com.rxjava2.android.samples.ui.operators.DistinctExampleActivity; -import com.rxjava2.android.samples.ui.operators.FilterExampleActivity; -import com.rxjava2.android.samples.ui.operators.FlowableExampleActivity; -import com.rxjava2.android.samples.ui.operators.IntervalExampleActivity; -import com.rxjava2.android.samples.ui.operators.LastOperatorExampleActivity; -import com.rxjava2.android.samples.ui.operators.MapExampleActivity; -import com.rxjava2.android.samples.ui.operators.MergeExampleActivity; -import com.rxjava2.android.samples.ui.operators.PublishSubjectExampleActivity; -import com.rxjava2.android.samples.ui.operators.ReduceExampleActivity; -import com.rxjava2.android.samples.ui.operators.ReplayExampleActivity; -import com.rxjava2.android.samples.ui.operators.ReplaySubjectExampleActivity; -import com.rxjava2.android.samples.ui.operators.ScanExampleActivity; -import com.rxjava2.android.samples.ui.operators.SimpleExampleActivity; -import com.rxjava2.android.samples.ui.operators.SingleObserverExampleActivity; -import com.rxjava2.android.samples.ui.operators.SkipExampleActivity; -import com.rxjava2.android.samples.ui.operators.SwitchMapExampleActivity; -import com.rxjava2.android.samples.ui.operators.TakeExampleActivity; -import com.rxjava2.android.samples.ui.operators.TakeUntilExampleActivity; -import com.rxjava2.android.samples.ui.operators.TakeWhileExampleActivity; -import com.rxjava2.android.samples.ui.operators.ThrottleFirstExampleActivity; -import com.rxjava2.android.samples.ui.operators.ThrottleLastExampleActivity; -import com.rxjava2.android.samples.ui.operators.TimerExampleActivity; -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 - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_operators); - } - - public void startSimpleActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, SimpleExampleActivity.class)); - } - - public void startMapActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, MapExampleActivity.class)); - } - - public void startZipActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, ZipExampleActivity.class)); - } - - public void startDisposableActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, DisposableExampleActivity.class)); - } - - public void startTakeActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, TakeExampleActivity.class)); - } - - public void startTimerActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, TimerExampleActivity.class)); - } - - public void startIntervalActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, IntervalExampleActivity.class)); - } - - public void startSingleObserverActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, SingleObserverExampleActivity.class)); - } - - public void startCompletableObserverActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, CompletableObserverExampleActivity.class)); - } - - public void startFlowableActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, FlowableExampleActivity.class)); - } - - public void startReduceActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, ReduceExampleActivity.class)); - } - - public void startBufferActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, BufferExampleActivity.class)); - } - - public void startFilterActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, FilterExampleActivity.class)); - } - - public void startSkipActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, SkipExampleActivity.class)); - } - - public void startScanActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, ScanExampleActivity.class)); - } - - public void startReplayActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, ReplayExampleActivity.class)); - } - - public void startConcatActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, ConcatExampleActivity.class)); - } - - public void startMergeActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, MergeExampleActivity.class)); - } - - public void startDeferActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, DeferExampleActivity.class)); - } - - public void startDistinctActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, DistinctExampleActivity.class)); - } - - public void startLastOperatorActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, LastOperatorExampleActivity.class)); - } - - public void startReplaySubjectActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, ReplaySubjectExampleActivity.class)); - } - - public void startPublishSubjectActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, PublishSubjectExampleActivity.class)); - } - - public void startBehaviorSubjectActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, BehaviorSubjectExampleActivity.class)); - } - - public void startAsyncSubjectActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, AsyncSubjectExampleActivity.class)); - } - - public void startThrottleFirstActivity(View view) { - startActivity(new Intent(OperatorsActivity.this,ThrottleFirstExampleActivity.class)); - } - - public void startThrottleLastActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, ThrottleLastExampleActivity.class)); - } - - public void startDebounceActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, DebounceExampleActivity.class)); - } - - public void startWindowActivity(View view) { - startActivity(new Intent(OperatorsActivity.this,WindowExampleActivity.class)); - } - - public void startDelayActivity(View view) { - startActivity(new Intent(OperatorsActivity.this,DelayExampleActivity.class)); - } - - public void startSwitchMapActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, SwitchMapExampleActivity.class)); - } - - public void startTakeWhileActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, TakeWhileExampleActivity.class)); - } - - public void startTakeUntilActivity(View view) { - startActivity(new Intent(OperatorsActivity.this, TakeUntilExampleActivity.class)); - } -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.kt new file mode 100644 index 0000000..73e0203 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.kt @@ -0,0 +1,49 @@ +package com.rxjava2.android.samples.ui + +import android.content.Intent +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.* + +class OperatorsActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_operators) + } + + fun startSimpleActivity(view: View) { + startActivity(Intent(this@OperatorsActivity, SimpleExampleActivity::class.java)) + } + + fun startMapActivity(view: View) { + startActivity(Intent(this@OperatorsActivity, MapExampleActivity::class.java)) + } + + fun startZipActivity(view: View) { + startActivity(Intent(this@OperatorsActivity, ZipExampleActivity::class.java)) + } + + fun startTimerActivity(view: View) { + startActivity(Intent(this@OperatorsActivity, TimerExampleActivity::class.java)) + } + + fun startFilterActivity(view: View) { + startActivity(Intent(this@OperatorsActivity, FilterExampleActivity::class.java)) + } + + fun startConcatActivity(view: View) { + startActivity(Intent(this@OperatorsActivity, ConcatExampleActivity::class.java)) + } + + fun startMergeActivity(view: View) { + startActivity(Intent(this@OperatorsActivity, MergeExampleActivity::class.java)) + } + + fun startDelayActivity(view: View) { + startActivity(Intent(this@OperatorsActivity, DelayExampleActivity::class.java)) + } + +} 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 deleted file mode 100644 index fd392dd..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.rxjava2.android.samples.ui; - -import android.content.Intent; -import android.os.Bundle; -import android.view.View; - -import com.rxjava2.android.samples.MyApplication; -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.ui.cache.CacheExampleActivity; -import com.rxjava2.android.samples.ui.compose.ComposeOperatorExampleActivity; -import com.rxjava2.android.samples.ui.networking.NetworkingActivity; -import com.rxjava2.android.samples.ui.pagination.PaginationActivity; -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 - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_selection); - } - - public void startOperatorsActivity(View view) { - startActivity(new Intent(SelectionActivity.this, OperatorsActivity.class)); - } - - public void startNetworkingActivity(View view) { - startActivity(new Intent(SelectionActivity.this, NetworkingActivity.class)); - } - - public void startCacheActivity(View view) { - startActivity(new Intent(SelectionActivity.this, CacheExampleActivity.class)); - } - - public void startRxBusActivity(View view) { - ((MyApplication) getApplication()).sendAutoEvent(); - startActivity(new Intent(SelectionActivity.this, RxBusActivity.class)); - } - - public void startPaginationActivity(View view) { - startActivity(new Intent(SelectionActivity.this, PaginationActivity.class)); - } - - public void startComposeOperator(View view) { - startActivity(new Intent(SelectionActivity.this, ComposeOperatorExampleActivity.class)); - } - - public void startSearchActivity(View view) { - startActivity(new Intent(SelectionActivity.this, SearchActivity.class)); - } - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.kt new file mode 100644 index 0000000..bad3749 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.kt @@ -0,0 +1,32 @@ +package com.rxjava2.android.samples.ui + +import android.content.Intent +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.networking.NetworkingActivity +import com.rxjava2.android.samples.ui.search.SearchActivity + +class SelectionActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_selection) + } + + fun startOperatorsActivity(view: View) { + startActivity(Intent(this@SelectionActivity, OperatorsActivity::class.java)) + } + + fun startNetworkingActivity(view: View) { + startActivity(Intent(this@SelectionActivity, NetworkingActivity::class.java)) + } + + fun startSearchActivity(view: View) { + startActivity(Intent(this@SelectionActivity, SearchActivity::class.java)) + } + +} \ No newline at end of file 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 deleted file mode 100644 index bd98f63..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/cache/CacheExampleActivity.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.rxjava2.android.samples.ui.cache; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.ui.cache.model.Data; -import com.rxjava2.android.samples.ui.cache.source.DataSource; -import com.rxjava2.android.samples.ui.cache.source.DiskDataSource; -import com.rxjava2.android.samples.ui.cache.source.MemoryDataSource; -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; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; - -public class CacheExampleActivity extends AppCompatActivity { - - private static final String TAG = CacheExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - DataSource dataSource; - - @Override - 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.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - - dataSource = new DataSource(new MemoryDataSource(), new DiskDataSource(), new NetworkDataSource()); - } - - private void doSomeWork() { - - Observable memory = dataSource.getDataFromMemory(); - Observable disk = dataSource.getDataFromDisk(); - Observable network = dataSource.getDataFromNetwork(); - - Observable.concat(memory, disk, network) - .firstElement() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .toObservable() - .subscribe(getObserver()); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(Data data) { - textView.append(" onNext : " + data.source); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext : " + data.source); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - -} \ No newline at end of file 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 deleted file mode 100644 index 477144e..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/cache/model/Data.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.rxjava2.android.samples.ui.cache.model; - -public class Data { - - public String source; - - @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException") - @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 deleted file mode 100644 index 23403ff..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DataSource.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.rxjava2.android.samples.ui.cache.source; - -import com.rxjava2.android.samples.ui.cache.model.Data; - -import io.reactivex.Observable; - -/** - * The DataSource to handle 3 data sources - memory, disk, network - */ -public class DataSource { - - private final MemoryDataSource memoryDataSource; - private final DiskDataSource diskDataSource; - private final NetworkDataSource networkDataSource; - - public DataSource(MemoryDataSource memoryDataSource, - DiskDataSource diskDataSource, - NetworkDataSource networkDataSource) { - this.memoryDataSource = memoryDataSource; - this.diskDataSource = diskDataSource; - this.networkDataSource = networkDataSource; - } - - public Observable getDataFromMemory() { - return memoryDataSource.getData(); - } - - public Observable getDataFromDisk() { - return diskDataSource.getData().doOnNext(data -> - memoryDataSource.cacheInMemory(data) - ); - } - - public Observable getDataFromNetwork() { - return networkDataSource.getData().doOnNext(data -> { - diskDataSource.saveToDisk(data); - memoryDataSource.cacheInMemory(data); - }); - } - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DiskDataSource.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DiskDataSource.java deleted file mode 100644 index 29f5bfa..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DiskDataSource.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.rxjava2.android.samples.ui.cache.source; - -import com.rxjava2.android.samples.ui.cache.model.Data; - -import io.reactivex.Observable; - -/** - * Class to simulate Disk DataSource - */ -public class DiskDataSource { - - private Data data; - - public Observable getData() { - return Observable.create(emitter -> { - if (data != null) { - emitter.onNext(data); - } - emitter.onComplete(); - }); - } - - public void saveToDisk(Data data) { - this.data = data.clone(); - this.data.source = "disk"; - } - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/MemoryDataSource.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/MemoryDataSource.java deleted file mode 100644 index 2742f26..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/MemoryDataSource.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.rxjava2.android.samples.ui.cache.source; - -import com.rxjava2.android.samples.ui.cache.model.Data; - -import io.reactivex.Observable; - -/** - * Class to simulate InMemory DataSource - */ -public class MemoryDataSource { - - private Data data; - - public Observable getData() { - return Observable.create(emitter -> { - if (data != null) { - emitter.onNext(data); - } - emitter.onComplete(); - }); - } - - public void cacheInMemory(Data data) { - this.data = data.clone(); - this.data.source = "memory"; - } - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/NetworkDataSource.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/NetworkDataSource.java deleted file mode 100644 index d903fb0..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/NetworkDataSource.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.rxjava2.android.samples.ui.cache.source; - -import com.rxjava2.android.samples.ui.cache.model.Data; - -import io.reactivex.Observable; - - -/** - * Class to simulate Network DataSource - */ -public class NetworkDataSource { - - public Observable getData() { - return Observable.create(emitter -> { - Data data = new Data(); - data.source = "network"; - emitter.onNext(data); - emitter.onComplete(); - }); - } - -} 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 deleted file mode 100644 index 89ab45b..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.rxjava2.android.samples.ui.compose; - -import android.os.Bundle; - -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(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_compose_operator_example); - - /* - Compose for reusable code. - */ - Observable.just(1, 2, 3, 4, 5) - .compose(schedulers.applyObservableAsync()) - .subscribe(/* */); - - Flowable.just(1, 2, 3, 4, 5) - .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 deleted file mode 100644 index 6be576c..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/compose/RxSchedulers.java +++ /dev/null @@ -1,75 +0,0 @@ -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; - -/** - * Created by werockstar on 5/19/2017. - */ - -public class RxSchedulers { - - public ObservableTransformer applyObservableAsync() { - return new ObservableTransformer() { - @Override - public ObservableSource apply(Observable observable) { - return 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()); - } - }; - } - - public ObservableTransformer applyObservableMainThread() { - return new ObservableTransformer() { - @Override - public ObservableSource apply(Observable observable) { - return observable.observeOn(AndroidSchedulers.mainThread()); - } - }; - } - - public FlowableTransformer applyFlowableMainThread() { - return new FlowableTransformer() { - @Override - public Publisher apply(Flowable flowable) { - return flowable.observeOn(AndroidSchedulers.mainThread()); - } - }; - } - - public FlowableTransformer applyFlowableAsysnc() { - return new FlowableTransformer() { - @Override - public Publisher apply(Flowable flowable) { - return flowable.observeOn(AndroidSchedulers.mainThread()); - } - }; - } - - public FlowableTransformer applyFlowableCompute() { - return new FlowableTransformer() { - @Override - public Publisher apply(Flowable flowable) { - return 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 deleted file mode 100644 index a425a96..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.java +++ /dev/null @@ -1,386 +0,0 @@ -package com.rxjava2.android.samples.ui.networking; - -import android.os.Bundle; -import android.util.Log; -import android.util.Pair; -import android.view.View; - -import com.rx2androidnetworking.Rx2AndroidNetworking; -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.model.ApiUser; -import com.rxjava2.android.samples.model.User; -import com.rxjava2.android.samples.model.UserDetail; -import com.rxjava2.android.samples.utils.Utils; - -import java.util.ArrayList; -import java.util.List; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.ObservableSource; -import io.reactivex.Observer; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.functions.BiFunction; -import io.reactivex.functions.Function; -import io.reactivex.functions.Predicate; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by amitshekhar on 04/02/17. - */ - -public class NetworkingActivity extends AppCompatActivity { - - public static final String TAG = NetworkingActivity.class.getSimpleName(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_networking); - } - - /** - * Map Operator Example - */ - public void map(View view) { - Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUser/{userId}") - .addPathParameter("userId", "1") - .build() - .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; - } - }) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(User user) { - Log.d(TAG, "user : " + user.toString()); - } - - @Override - public void onError(Throwable e) { - Utils.logError(TAG, e); - } - - @Override - public void onComplete() { - Log.d(TAG, "onComplete"); - } - }); - } - - - /** - * zip Operator Example - */ - - /** - * This observable return the list of User who loves cricket - */ - private Observable> getCricketFansObservable() { - return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllCricketFans") - .build() - .getObjectListObservable(User.class); - } - - /* - * This observable return the list of User who loves Football - */ - private Observable> getFootballFansObservable() { - return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllFootballFans") - .build() - .getObjectListObservable(User.class); - } - - /* - * This do the complete magic, make both network call - * and then returns the list of user who loves both - * Using zip operator to get both response at a time - */ - 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; - } - }) - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(List users) { - // do anything with user who loves both - Log.d(TAG, "userList size : " + users.size()); - for (User user : users) { - Log.d(TAG, "user : " + user.toString()); - } - } - - @Override - public void onError(Throwable e) { - Utils.logError(TAG, e); - } - - @Override - public void onComplete() { - Log.d(TAG, "onComplete"); - } - }); - } - - private List filterUserWhoLovesBoth(List cricketFans, List footballFans) { - List userWhoLovesBoth = new ArrayList<>(); - - for (User footballFan : footballFans) { - if (cricketFans.contains(footballFan)) { - userWhoLovesBoth.add(footballFan); - } - } - - return userWhoLovesBoth; - } - - - public void zip(View view) { - findUsersWhoLovesBoth(); - } - - - /** - * flatMap and filter Operators Example - */ - - private Observable> getAllMyFriendsObservable() { - return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllFriends/{userId}") - .addPathParameter("userId", "1") - .build() - .getObjectListObservable(User.class); - } - - public void flatMapAndFilter(View view) { - 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. - } - }) - .filter(new Predicate() { - @Override - public boolean test(User user) { - // filtering user who follows me. - return user.isFollowing; - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(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) { - Utils.logError(TAG, e); - } - - @Override - public void onComplete() { - Log.d(TAG, "onComplete"); - } - }); - } - - - /** - * take Operator Example - */ - - public void take(View view) { - 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. - } - }) - .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) { - - } - - @Override - public void onNext(User user) { - // // only four user comes here one by one - Log.d(TAG, "user : " + user.toString()); - } - - @Override - public void onError(Throwable e) { - Utils.logError(TAG, e); - } - - @Override - public void onComplete() { - Log.d(TAG, "onComplete"); - } - }); - } - - - /** - * flatMap Operator Example - */ - - public void flatMap(View view) { - 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(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); - } - }) - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer() { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onError(Throwable e) { - Utils.logError(TAG, e); - } - - @Override - public void onNext(UserDetail userDetail) { - // do anything with userDetail - Log.d(TAG, "userDetail : " + userDetail.toString()); - } - - @Override - public void onComplete() { - Log.d(TAG, "onComplete"); - } - }); - } - - /** - * flatMapWithZip Operator Example - */ - - private Observable> getUserListObservable() { - return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}") - .addPathParameter("pageNumber", "0") - .addQueryParameter("limit", "10") - .build() - .getObjectListObservable(User.class); - } - - private Observable getUserDetailObservable(long id) { - return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUserDetail/{userId}") - .addPathParameter("userId", String.valueOf(id)) - .build() - .getObjectObservable(UserDetail.class); - } - - public void flatMapWithZip(View view) { - 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(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) - } - }); - } - }) - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>() { - @Override - public void onComplete() { - // do something onCompleted - Log.d(TAG, "onComplete"); - } - - @Override - public void onError(Throwable e) { - // handle error - Utils.logError(TAG, e); - } - - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(Pair pair) { - // here we are getting the userDetail for the corresponding user one by one - UserDetail userDetail = pair.first; - User user = pair.second; - Log.d(TAG, "user : " + user.toString()); - Log.d(TAG, "userDetail : " + userDetail.toString()); - } - }); - } -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.kt new file mode 100644 index 0000000..60c977e --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.kt @@ -0,0 +1,245 @@ +package com.rxjava2.android.samples.ui.networking + +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.appcompat.app.AppCompatActivity +import com.rx2androidnetworking.Rx2AndroidNetworking +import com.rxjava2.android.samples.R +import com.rxjava2.android.samples.model.ApiUser +import com.rxjava2.android.samples.model.User +import com.rxjava2.android.samples.model.UserDetail +import com.rxjava2.android.samples.utils.Utils +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 + +/** + * Created by amitshekhar on 04/02/17. + */ + +class NetworkingActivity : AppCompatActivity() { + + companion object { + const val TAG = "NetworkingActivity" + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_networking) + } + + /** + * zip Operator Example + */ + + /** + * This observable return the list of User who loves cricket + */ + private fun getCricketFansObservable(): Observable> { + return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllCricketFans") + .build() + .getObjectListObservable(User::class.java) + .subscribeOn(Schedulers.io()) + } + + /** + * This observable return the list of User who loves Football + */ + private fun getFootballFansObservable(): Observable> { + return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllFootballFans") + .build() + .getObjectListObservable(User::class.java) + .subscribeOn(Schedulers.io()) + } + + /** + * flatMap and filter Operators Example + */ + private fun getAllMyFriendsObservable(): Observable> { + return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllFriends/{userId}") + .addPathParameter("userId", "1") + .build() + .getObjectListObservable(User::class.java) + } + + /** + * flatMapWithZip Operator Example + */ + private fun getUserListObservable(): Observable> { + return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}") + .addPathParameter("pageNumber", "0") + .addQueryParameter("limit", "10") + .build() + .getObjectListObservable(User::class.java) + } + + /** + * Map Operator Example + */ + fun map(view: View) { + Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUser/{userId}") + .addPathParameter("userId", "1") + .build() + .getObjectObservable(ApiUser::class.java) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .map { apiUser -> + // here we get ApiUser from server + // then by converting, we are returning user + User(apiUser.id, apiUser.firstname, apiUser.lastname) + } + .subscribe(object : Observer { + + override fun onSubscribe(d: Disposable) { + + } + + override fun onNext(user: User) { + Log.d(TAG, "user : $user") + } + + override fun onError(e: Throwable) { + Utils.logError(TAG, e) + } + + override fun onComplete() { + Log.d(TAG, "onComplete") + } + }) + } + + /** + * This do the complete magic, make both network call + * and then returns the list of user who loves both + * Using zip operator to get both response at a time + */ + private fun findUsersWhoLovesBoth() { + // here we are using zip operator to combine both request + Observable.zip(getCricketFansObservable(), getFootballFansObservable(), + BiFunction, List, List> { cricketFans, footballFans -> + return@BiFunction Utils.filterUserWhoLovesBoth(cricketFans, footballFans) + }) + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Observer> { + + override fun onSubscribe(d: Disposable) { + + } + + override fun onNext(users: List) { + // do anything with user who loves both + Log.d(TAG, "userList size : " + users.size) + for (user in users) { + Log.d(TAG, "user : $user") + } + } + + override fun onError(e: Throwable) { + Utils.logError(TAG, e) + } + + override fun onComplete() { + Log.d(TAG, "onComplete") + } + }) + } + + fun zip(view: View) { + findUsersWhoLovesBoth() + } + + fun flatMapAndFilter(view: View) { + getAllMyFriendsObservable() + .flatMap { usersList -> + // flatMap - to return users one by one + Observable.fromIterable(usersList) // returning user one by one from usersList. + } + .filter { user -> + // filtering user who follows me. + return@filter user.isFollowing + } + .toList() + .toObservable() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Observer> { + + override fun onSubscribe(d: Disposable) { + + } + + override fun onNext(users: List) { + // only the user who is following will be in the list + Log.d(TAG, "userList size : " + users.size) + for (user in users) { + Log.d(TAG, "user : $user") + } + } + + override fun onError(e: Throwable) { + Utils.logError(TAG, e) + } + + override fun onComplete() { + Log.d(TAG, "onComplete") + } + }) + } + + /** + * flatMap Operator Example + */ + fun flatMap(view: View) { + getUserListObservable() + .flatMap { usersList -> + // flatMap - to return users one by one + Observable.fromIterable(usersList) // returning user one by one from usersList. + } + .flatMap { user -> + // here we get the user one by one + // and returns corresponding getUserDetailObservable + // for that userId + getUserDetailObservable(user.id) + } + .toList() + .toObservable() + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(object : Observer> { + + override fun onSubscribe(d: Disposable) { + + } + + override fun onError(e: Throwable) { + Utils.logError(TAG, e) + } + + override fun onNext(userDetailList: List) { + // do anything with userDetail list + + Log.d(TAG, "userDetailList size : " + userDetailList.size) + for (userDetail in userDetailList) { + Log.d(TAG, "userDetail : $userDetail") + } + } + + override fun onComplete() { + Log.d(TAG, "onComplete") + } + }) + } + + private fun getUserDetailObservable(id: Long): Observable { + return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUserDetail/{userId}") + .addPathParameter("userId", id.toString()) + .build() + .getObjectObservable(UserDetail::class.java) + } + +} 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 deleted file mode 100644 index d2243a2..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/AsyncSubjectExampleActivity.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; -import io.reactivex.subjects.AsyncSubject; - -/** - * Created by amitshekhar on 17/12/16. - */ - -public class AsyncSubjectExampleActivity extends AppCompatActivity { - - private static final String TAG = AsyncSubjectExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* An AsyncSubject emits the last value (and only the last value) emitted by the source - * Observable, and only after that source Observable completes. (If the source Observable - * does not emit any values, the AsyncSubject also completes without emitting any values.) - */ - private void doSomeWork() { - - AsyncSubject source = AsyncSubject.create(); - - source.subscribe(getFirstObserver()); // it will emit only 4 and onComplete - - source.onNext(1); - source.onNext(2); - source.onNext(3); - - /* - * it will emit 4 and onComplete for second observer also. - */ - source.subscribe(getSecondObserver()); - - source.onNext(4); - source.onComplete(); - - } - - - private Observer getFirstObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " First onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(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) { - textView.append(" First onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " First onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" First onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " First onComplete"); - } - }; - } - - private Observer getSecondObserver() { - return new Observer() { - - @Override - public void onSubscribe(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) { - textView.append(" Second onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" Second onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" Second onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index 9eeadd0..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/BehaviorSubjectExampleActivity.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; -import io.reactivex.subjects.BehaviorSubject; - -/** - * Created by amitshekhar on 17/12/16. - */ - -public class BehaviorSubjectExampleActivity extends AppCompatActivity { - - private static final String TAG = BehaviorSubjectExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* When an observer subscribes to a BehaviorSubject, it begins by emitting the item most - * recently emitted by the source Observable (or a seed/default value if none has yet been - * emitted) and then continues to emit any other items emitted later by the source Observable(s). - * It is different from Async Subject as async emits the last value (and only the last value) - * but the Behavior Subject emits the last and the subsequent values also. - */ - private void doSomeWork() { - - BehaviorSubject source = BehaviorSubject.create(); - - source.subscribe(getFirstObserver()); // it will get 1, 2, 3, 4 and onComplete - - source.onNext(1); - source.onNext(2); - source.onNext(3); - - /* - * it will emit 3(last emitted), 4 and onComplete for second observer also. - */ - source.subscribe(getSecondObserver()); - - source.onNext(4); - source.onComplete(); - - } - - - private Observer getFirstObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " First onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(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) { - textView.append(" First onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " First onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" First onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " First onComplete"); - } - }; - } - - private Observer getSecondObserver() { - return new Observer() { - - @Override - public void onSubscribe(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) { - textView.append(" Second onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" Second onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" Second onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index 9171136..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.List; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class BufferExampleActivity extends AppCompatActivity { - - private static final String TAG = BufferExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * simple example using buffer operator - bundles all emitted values into a list - */ - private void doSomeWork() { - - Observable> buffered = getObservable().buffer(3, 1); - - // 3 means, it takes max of three from its start index and create list - // 1 means, it jumps one step every time - // so the it gives the following list - // 1 - one, two, three - // 2 - two, three, four - // 3 - three, four, five - // 4 - four, five - // 5 - five - - buffered.subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.just("one", "two", "three", "four", "five"); - } - - private Observer> getObserver() { - return new Observer>() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(List stringList) { - textView.append(" onNext size : " + stringList.size()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext : size :" + stringList.size()); - for (String value : stringList) { - textView.append(" value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " : value :" + value); - } - - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index 4ee612f..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.concurrent.TimeUnit; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Completable; -import io.reactivex.CompletableObserver; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class CompletableObserverExampleActivity extends AppCompatActivity { - - private static final String TAG = CompletableObserverExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * simple example using CompletableObserver - */ - private void doSomeWork() { - Completable completable = Completable.timer(1000, TimeUnit.MILLISECONDS); - - completable - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getCompletableObserver()); - } - - private CompletableObserver getCompletableObserver() { - return new CompletableObserver() { - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - }; - } - -} \ No newline at end of file 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 deleted file mode 100644 index 8bb3e2b..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class ConcatExampleActivity extends AppCompatActivity { - - private static final String TAG = ConcatExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * Using concat operator to combine Observable : concat maintain - * the order of Observable. - * It will emit all the 7 values in order - * here - first "A1", "A2", "A3", "A4" and then "B1", "B2", "B3" - * first all from the first Observable and then - * all from the second Observable all in order - */ - private void doSomeWork() { - final String[] aStrings = {"A1", "A2", "A3", "A4"}; - final String[] bStrings = {"B1", "B2", "B3"}; - - final Observable aObservable = Observable.fromArray(aStrings); - final Observable bObservable = Observable.fromArray(bStrings); - - Observable.concat(aObservable, bObservable) - .subscribe(getObserver()); - } - - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(String value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext : value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.kt new file mode 100644 index 0000000..328739e --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.kt @@ -0,0 +1,79 @@ +package com.rxjava2.android.samples.ui.operators + +import android.os.Bundle +import android.util.Log +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 io.reactivex.Observable +import io.reactivex.Observer +import io.reactivex.disposables.Disposable + +/** + * Created by amitshekhar on 27/08/16. + */ +class ConcatExampleActivity : AppCompatActivity() { + + companion object { + private const val TAG = "ConcatExampleActivity" + } + + private lateinit var btn: Button + private lateinit var textView: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_example) + btn = findViewById(R.id.btn) + textView = findViewById(R.id.textView) + btn.setOnClickListener { + doSomeWork() + } + } + + /* + * Using concat operator to combine Observable : concat maintain + * the order of Observable. + * It will emit all the 7 values in order + * here - first "A1", "A2", "A3", "A4" and then "B1", "B2", "B3" + * first all from the first Observable and then + * all from the second Observable all in order + */ + private fun doSomeWork() { + val observableA = Observable.fromArray("A1", "A2", "A3", "A4") + val observableB = Observable.fromArray("B1", "B2", "B3", "B4") + + Observable.concat(observableA, observableB) + .subscribe(getObserver()) + } + + private fun getObserver(): Observer { + return object : Observer { + + override fun onSubscribe(d: Disposable) { + Log.d(TAG, " onSubscribe : " + d.isDisposed) + } + + override fun onNext(value: String) { + textView.append(" onNext : value : $value") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onNext : value : $value") + } + + override fun onError(e: Throwable) { + textView.append(" onError : " + e.message) + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onError : " + e.message) + } + + override fun onComplete() { + textView.append(" onComplete") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onComplete") + } + } + } + +} \ No newline at end of file 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 deleted file mode 100644 index 7837381..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DebounceExampleActivity.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.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; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by amitshekhar on 22/12/16. - */ - -public class DebounceExampleActivity extends AppCompatActivity { - - private static final String TAG = DebounceExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * Using debounce() -> only emit an item from an Observable if a particular time-span has - * passed without it emitting another item, so it will emit 2, 4, 5 as we have simulated it. - */ - private void doSomeWork() { - getObservable() - .debounce(500, TimeUnit.MILLISECONDS) - // Run on a background thread - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getObserver()); - } - - 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(); - } - }); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(Integer value) { - textView.append(" onNext : "); - textView.append(AppConstant.LINE_SEPARATOR); - textView.append(" value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext "); - Log.d(TAG, " value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - -} \ No newline at end of file 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 deleted file mode 100644 index 0e6249c..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.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; - -/** - * Created by amitshekhar on 30/08/16. - */ -public class DeferExampleActivity extends AppCompatActivity { - - private static final String TAG = DeferExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * Defer used for Deferring Observable code until subscription in RxJava - */ - private void doSomeWork() { - - Car car = new Car(); - - Observable brandDeferObservable = car.brandDeferObservable(); - - car.setBrand("BMW"); // Even if we are setting the brand after creating Observable - // we will get the brand as BMW. - // If we had not used defer, we would have got null as the brand. - - brandDeferObservable - .subscribe(getObserver()); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(String value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext : value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index 212092c..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.concurrent.TimeUnit; - -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.schedulers.Schedulers; - -/** - * Created by amitshekhar on 05/03/17. - */ - -public class DelayExampleActivity extends AppCompatActivity { - - private static final String TAG = DelayExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * simple example using delay to emit after 2 second - */ - private void doSomeWork() { - getObservable().delay(2, TimeUnit.SECONDS) - // Run on a background thread - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.just("Amit"); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(String value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext : value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.kt new file mode 100644 index 0000000..0029323 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.kt @@ -0,0 +1,86 @@ +package com.rxjava2.android.samples.ui.operators + +import android.os.Bundle +import android.util.Log +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 io.reactivex.Observable +import io.reactivex.Observer +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers +import java.util.concurrent.TimeUnit + +/** + * Created by amitshekhar on 05/03/17. + */ + +class DelayExampleActivity : AppCompatActivity() { + + companion object { + private const val TAG = "DelayExampleActivity" + } + + private lateinit var btn: Button + private lateinit var textView: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_example) + btn = findViewById(R.id.btn) + textView = findViewById(R.id.textView) + + btn.setOnClickListener { + doSomeWork() + } + } + + /* + * simple example using delay to emit after 2 second + */ + private fun doSomeWork() { + getObservable() + .delay(2, TimeUnit.SECONDS) + // Run on a background thread + .subscribeOn(Schedulers.io()) + // Be notified on the main thread + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getObserver()) + } + + + private fun getObservable(): Observable { + return Observable.just("Amit") + } + + private fun getObserver(): Observer { + return object : Observer { + + override fun onSubscribe(d: Disposable) { + Log.d(TAG, " onSubscribe : " + d.isDisposed) + } + + override fun onNext(value: String) { + textView.append(" onNext : value : $value") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onNext : value : $value") + } + + override fun onError(e: Throwable) { + textView.append(" onError : " + e.message) + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onError : " + e.message) + } + + override fun onComplete() { + textView.append(" onComplete") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onComplete") + } + } + } + +} \ No newline at end of file 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 deleted file mode 100644 index 9e51b3c..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -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 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; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class DisposableExampleActivity extends AppCompatActivity { - - private static final String TAG = DisposableExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - private final CompositeDisposable disposables = new CompositeDisposable(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - disposables.clear(); // do not send event after activity has been destroyed - } - - /* - * Example to understand how to use disposables. - * disposables is cleared in onDestroy of this activity. - */ - void 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"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onNext(String value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext value : " + 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"); - } - }); - } -} 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 deleted file mode 100644 index af2c0e3..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DistinctExampleActivity.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; - -/** - * Created by techteam on 13/09/16. - */ -public class DistinctExampleActivity extends AppCompatActivity { - - private static final String TAG = DistinctExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * distinct() suppresses duplicate items emitted by the source Observable. - */ - private void doSomeWork() { - - getObservable() - .distinct() - .subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.just(1, 2, 1, 1, 2, 3, 4, 6, 4); - } - - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(Integer value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - Log.d(TAG, " onComplete"); - } - }; - } -} \ No newline at end of file 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 deleted file mode 100644 index 35ddf9a..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Predicate; - - -/** - * Created by amitshekhar on 27/08/16. - */ -public class FilterExampleActivity extends AppCompatActivity { - - private static final String TAG = FilterExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * simple example by using filter operator to emit only even value - * - */ - private void doSomeWork() { - Observable.just(1, 2, 3, 4, 5, 6) - .filter(new Predicate() { - @Override - public boolean test(Integer integer) { - return integer % 2 == 0; - } - }) - .subscribe(getObserver()); - } - - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(Integer value) { - textView.append(" onNext : "); - textView.append(AppConstant.LINE_SEPARATOR); - textView.append(" value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext "); - Log.d(TAG, " value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.kt new file mode 100644 index 0000000..7465d46 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.kt @@ -0,0 +1,81 @@ +package com.rxjava2.android.samples.ui.operators + +import android.os.Bundle +import android.util.Log +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 io.reactivex.Observable +import io.reactivex.Observer +import io.reactivex.disposables.Disposable + + +/** + * Created by amitshekhar on 27/08/16. + */ +class FilterExampleActivity : AppCompatActivity() { + + companion object { + private const val TAG = "FilterExampleActivity" + } + + private lateinit var btn: Button + private lateinit var textView: TextView + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_example) + btn = findViewById(R.id.btn) + textView = findViewById(R.id.textView) + + btn.setOnClickListener { + doSomeWork() + } + } + + /* + * simple example by using filter operator to emit only even value + * + */ + private fun doSomeWork() { + Observable.just(1, 2, 3, 4, 5, 6) + .filter { value -> + return@filter value % 2 == 0 + } + .subscribe(getObserver()) + } + + private fun getObserver(): Observer { + return object : Observer { + + override fun onSubscribe(d: Disposable) { + Log.d(TAG, " onSubscribe : " + d.isDisposed) + } + + override fun onNext(value: Int) { + textView.append(" onNext : ") + textView.append(AppConstant.LINE_SEPARATOR) + textView.append(" value : $value") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onNext ") + Log.d(TAG, " value : $value") + } + + override fun onError(e: Throwable) { + textView.append(" onError : " + e.message) + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onError : " + e.message) + } + + override fun onComplete() { + textView.append(" onComplete") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onComplete") + } + } + } + +} \ No newline at end of file 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 deleted file mode 100644 index 2bf727f..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import 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. - */ -public class FlowableExampleActivity extends AppCompatActivity { - - private static final String TAG = FlowableExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * simple example using Flowable - */ - private void doSomeWork() { - - Flowable observable = Flowable.just(1, 2, 3, 4); - - observable.reduce(50, new BiFunction() { - @Override - public Integer apply(Integer t1, Integer t2) { - return t1 + t2; - } - }).subscribe(getObserver()); - - } - - private SingleObserver getObserver() { - - return new SingleObserver() { - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onSuccess(Integer value) { - textView.append(" onSuccess : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onSuccess : value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - }; - } -} \ No newline at end of file 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 deleted file mode 100644 index 36baeaf..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.concurrent.TimeUnit; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.CompositeDisposable; -import io.reactivex.observers.DisposableObserver; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class IntervalExampleActivity extends AppCompatActivity { - - private static final String TAG = IntervalExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - private final CompositeDisposable disposables = new CompositeDisposable(); - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - disposables.clear(); // clearing it : do not emit after destroy - } - - /* - * simple example using interval to run task at an interval of 2 sec - * which start immediately - */ - private void doSomeWork() { - disposables.add(getObservable() - // Run on a background thread - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .subscribeWith(getObserver())); - } - - private Observable getObservable() { - return Observable.interval(0, 2, TimeUnit.SECONDS); - } - - private DisposableObserver getObserver() { - return new DisposableObserver() { - - @Override - public void onNext(Long value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext : value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index 5cc3087..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/LastOperatorExampleActivity.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.SingleObserver; -import io.reactivex.disposables.Disposable; - -/** - * Created by techteam on 13/09/16. - */ -public class LastOperatorExampleActivity extends AppCompatActivity { - - private static final String TAG = DistinctExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * last() emits only the last item emitted by the Observable. - */ - private void doSomeWork() { - getObservable().last("A1") // the default item ("A1") to emit if the source ObservableSource is empty - .subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.just("A1", "A2", "A3", "A4", "A5", "A6"); - } - - private SingleObserver getObserver() { - return new SingleObserver() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onSuccess(String value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext value : " + value); - } - - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - }; - } -} 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 deleted file mode 100644 index 29794ca..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.model.ApiUser; -import com.rxjava2.android.samples.model.User; -import com.rxjava2.android.samples.utils.AppConstant; -import com.rxjava2.android.samples.utils.Utils; - -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; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class MapExampleActivity extends AppCompatActivity { - - private static final String TAG = MapExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * Here we are getting ApiUser Object from api server - * then we are converting it into User Object because - * may be our database support User Not ApiUser Object - * Here we are using Map Operator to do that - */ - private void doSomeWork() { - getObservable() - // Run on a background thread - .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); - } - }) - .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(); - } - } - }); - } - - private Observer> getObserver() { - return new Observer>() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(List userList) { - textView.append(" onNext"); - textView.append(AppConstant.LINE_SEPARATOR); - for (User user : userList) { - textView.append(" firstname : " + user.firstname); - textView.append(AppConstant.LINE_SEPARATOR); - } - Log.d(TAG, " onNext : " + userList.size()); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.kt new file mode 100644 index 0000000..efc4d15 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.kt @@ -0,0 +1,100 @@ +package com.rxjava2.android.samples.ui.operators + +import android.os.Bundle +import android.util.Log +import android.widget.Button +import android.widget.TextView +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 +import com.rxjava2.android.samples.utils.AppConstant +import com.rxjava2.android.samples.utils.Utils +import io.reactivex.Observable +import io.reactivex.Observer +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers + +/** + * Created by amitshekhar on 27/08/16. + */ +class MapExampleActivity : AppCompatActivity() { + + companion object { + private const val TAG = "MapExampleActivity" + } + + private lateinit var btn: Button + private lateinit var textView: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_example) + btn = findViewById(R.id.btn) + textView = findViewById(R.id.textView) + + btn.setOnClickListener { + doSomeWork() + } + } + + /* + * Here we are getting ApiUser Object from api server + * then we are converting it into User Object because + * may be our database support User Not ApiUser Object + * Here we are using Map Operator to do that + */ + private fun doSomeWork() { + getObservable() + // Run on a background thread + .subscribeOn(Schedulers.io()) + // Be notified on the main thread + .observeOn(AndroidSchedulers.mainThread()) + .map { apiUsers -> + return@map Utils.convertApiUserListToUserList(apiUsers) + } + .subscribe(getObserver()) + } + + private fun getObservable(): Observable> { + return Observable.create { e -> + if (!e.isDisposed) { + e.onNext(Utils.getApiUserList()) + e.onComplete() + } + } + } + + private fun getObserver(): Observer> { + return object : Observer> { + + override fun onSubscribe(d: Disposable) { + Log.d(TAG, " onSubscribe : " + d.isDisposed) + } + + override fun onNext(userList: List) { + textView.append(" onNext") + textView.append(AppConstant.LINE_SEPARATOR) + for (user in userList) { + textView.append(" firstname : ${user.firstname}") + textView.append(AppConstant.LINE_SEPARATOR) + } + Log.d(TAG, " onNext : " + userList.size) + } + + override fun onError(e: Throwable) { + textView.append(" onError : " + e.message) + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onError : " + e.message) + } + + override fun onComplete() { + textView.append(" onComplete") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onComplete") + } + } + } + +} \ No newline at end of file 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 deleted file mode 100644 index 01551bf..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; - -/** - * Created by amitshekhar on 28/08/16. - */ -public class MergeExampleActivity extends AppCompatActivity { - - private static final String TAG = MergeExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * Using merge operator to combine Observable : merge does not maintain - * the order of Observable. - * It will emit all the 7 values may not be in order - * Ex - "A1", "B1", "A2", "A3", "A4", "B2", "B3" - may be anything - */ - private void doSomeWork() { - final String[] aStrings = {"A1", "A2", "A3", "A4"}; - final String[] bStrings = {"B1", "B2", "B3"}; - - final Observable aObservable = Observable.fromArray(aStrings); - final Observable bObservable = Observable.fromArray(bStrings); - - Observable.merge(aObservable, bObservable) - .subscribe(getObserver()); - } - - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(String value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext : value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.kt new file mode 100644 index 0000000..ecf7bff --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.kt @@ -0,0 +1,78 @@ +package com.rxjava2.android.samples.ui.operators + +import android.os.Bundle +import android.util.Log +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 io.reactivex.Observable +import io.reactivex.Observer +import io.reactivex.disposables.Disposable + +/** + * Created by amitshekhar on 28/08/16. + */ +class MergeExampleActivity : AppCompatActivity() { + + companion object { + private const val TAG = "MergeExampleActivity" + } + + private lateinit var btn: Button + private lateinit var textView: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_example) + btn = findViewById(R.id.btn) + textView = findViewById(R.id.textView) + + btn.setOnClickListener { + doSomeWork() + } + } + + /* + * Using merge operator to combine Observable : merge does not maintain + * the order of Observable. + * It will emit all the 7 values may not be in order + * Ex - "A1", "B1", "A2", "A3", "A4", "B2", "B3" - may be anything + */ + private fun doSomeWork() { + val observableA = Observable.fromArray("A1", "A2", "A3", "A4") + val observableB = Observable.fromArray("B1", "B2", "B3", "B4") + + Observable.merge(observableA, observableB) + .subscribe(getObserver()) + } + + private fun getObserver(): Observer { + return object : Observer { + + override fun onSubscribe(d: Disposable) { + Log.d(TAG, " onSubscribe : " + d.isDisposed) + } + + override fun onNext(value: String) { + textView.append(" onNext : value : $value") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onNext : value : $value") + } + + override fun onError(e: Throwable) { + textView.append(" onError : " + e.message) + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onError : " + e.message) + } + + override fun onComplete() { + textView.append(" onComplete") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onComplete") + } + } + } + +} \ No newline at end of file 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 deleted file mode 100644 index d03266b..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; -import io.reactivex.subjects.PublishSubject; - -/** - * Created by amitshekhar on 17/12/16. - */ - -public class PublishSubjectExampleActivity extends AppCompatActivity { - - private static final String TAG = PublishSubjectExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* PublishSubject emits to an observer only those items that are emitted - * by the source Observable, subsequent to the time of the subscription. - */ - private void doSomeWork() { - - PublishSubject source = PublishSubject.create(); - - source.subscribe(getFirstObserver()); // it will get 1, 2, 3, 4 and onComplete - - source.onNext(1); - source.onNext(2); - source.onNext(3); - - /* - * it will emit 4 and onComplete for second observer also. - */ - source.subscribe(getSecondObserver()); - - source.onNext(4); - source.onComplete(); - - } - - - private Observer getFirstObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " First onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(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) { - textView.append(" First onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " First onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" First onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " First onComplete"); - } - }; - } - - private Observer getSecondObserver() { - return new Observer() { - - @Override - public void onSubscribe(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) { - textView.append(" Second onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" Second onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" Second onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index aa8aec1..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import 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. - */ -public class ReduceExampleActivity extends AppCompatActivity { - - private static final String TAG = ReduceExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * simple example using reduce to add all the number - */ - private void doSomeWork() { - getObservable() - .reduce(new BiFunction() { - @Override - public Integer apply(Integer t1, Integer t2) { - return t1 + t2; - } - }) - .subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.just(1, 2, 3, 4); - } - - private MaybeObserver getObserver() { - return new MaybeObserver() { - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onSuccess(Integer value) { - textView.append(" onSuccess : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onSuccess : value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index c1ce888..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; -import io.reactivex.observables.ConnectableObservable; -import io.reactivex.subjects.PublishSubject; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class ReplayExampleActivity extends AppCompatActivity { - - private static final String TAG = ReplayExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* Using replay operator, replay ensure that all observers see the same sequence - * of emitted items, even if they subscribe after the Observable has begun emitting items - */ - private void doSomeWork() { - - PublishSubject source = PublishSubject.create(); - ConnectableObservable connectableObservable = source.replay(3); // bufferSize = 3 to retain 3 values to replay - connectableObservable.connect(); // connecting the connectableObservable - - connectableObservable.subscribe(getFirstObserver()); - - source.onNext(1); - source.onNext(2); - source.onNext(3); - source.onNext(4); - source.onComplete(); - - /* - * it will emit 2, 3, 4 as (count = 3), retains the 3 values for replay - */ - connectableObservable.subscribe(getSecondObserver()); - - } - - - private Observer getFirstObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " First onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(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) { - textView.append(" First onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " First onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" First onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " First onComplete"); - } - }; - } - - private Observer getSecondObserver() { - return new Observer() { - - @Override - public void onSubscribe(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) { - textView.append(" Second onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" Second onError : " + e.getMessage()); - Log.d(TAG, " Second onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" Second onComplete"); - Log.d(TAG, " Second onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index 34bb5e4..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplaySubjectExampleActivity.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; -import io.reactivex.subjects.ReplaySubject; - -/** - * Created by amitshekhar on 17/12/16. - */ - -public class ReplaySubjectExampleActivity extends AppCompatActivity { - - private static final String TAG = ReplaySubjectExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* ReplaySubject emits to any observer all of the items that were emitted - * by the source Observable, regardless of when the observer subscribes. - */ - private void doSomeWork() { - - ReplaySubject source = ReplaySubject.create(); - - source.subscribe(getFirstObserver()); // it will get 1, 2, 3, 4 - - source.onNext(1); - source.onNext(2); - source.onNext(3); - source.onNext(4); - source.onComplete(); - - /* - * it will emit 1, 2, 3, 4 for second observer also as we have used replay - */ - source.subscribe(getSecondObserver()); - - } - - - private Observer getFirstObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " First onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(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) { - textView.append(" First onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " First onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" First onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " First onComplete"); - } - }; - } - - private Observer getSecondObserver() { - return new Observer() { - - @Override - public void onSubscribe(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) { - textView.append(" Second onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" Second onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" Second onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " Second onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index 0c263c2..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ScanExampleActivity.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import 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 { - - private static final String TAG = ScanExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* Using scan operator, it sends also the previous result */ - private void doSomeWork() { - 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; - } - }) - .subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.just(1, 2, 3, 4, 5); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(Integer value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index 6329b1b..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import 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.schedulers.Schedulers; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class SimpleExampleActivity extends AppCompatActivity { - - private static final String TAG = SimpleExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * simple example to emit two value one by one - */ - private void doSomeWork() { - getObservable() - // Run on a background thread - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.just("Cricket", "Football"); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(String value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext : value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.kt new file mode 100644 index 0000000..37842eb --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.kt @@ -0,0 +1,82 @@ +package com.rxjava2.android.samples.ui.operators + +import android.os.Bundle +import android.util.Log +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 io.reactivex.Observable +import io.reactivex.Observer +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers + +/** + * Created by amitshekhar on 27/08/16. + */ +class SimpleExampleActivity : AppCompatActivity() { + + companion object { + private const val TAG = "SimpleExampleActivity" + } + + private lateinit var btn: Button + private lateinit var textView: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_example) + btn = findViewById(R.id.btn) + textView = findViewById(R.id.textView) + + btn.setOnClickListener { + doSomeWork() + } + } + + /* + * simple example to emit two value one by one + */ + private fun doSomeWork() { + getObservable() + // Run on a background thread + .subscribeOn(Schedulers.io()) + // Be notified on the main thread + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getObserver()) + } + + private fun getObservable(): Observable { + return Observable.just("Cricket", "Football") + } + + private fun getObserver(): Observer { + return object : Observer { + + override fun onSubscribe(d: Disposable) { + Log.d(TAG, " onSubscribe : " + d.isDisposed) + } + + override fun onNext(value: String) { + textView.append(" onNext : value : $value") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onNext : value : $value") + } + + override fun onError(e: Throwable) { + textView.append(" onError : " + e.message) + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onError : " + e.message) + } + + override fun onComplete() { + textView.append(" onComplete") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onComplete") + } + } + } + +} \ No newline at end of file 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 deleted file mode 100644 index 403f070..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Single; -import io.reactivex.SingleObserver; -import io.reactivex.disposables.Disposable; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class SingleObserverExampleActivity extends AppCompatActivity { - - private static final String TAG = SingleObserverExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * simple example using SingleObserver - */ - private void doSomeWork() { - Single.just("Amit") - .subscribe(getSingleObserver()); - } - - private SingleObserver getSingleObserver() { - return new SingleObserver() { - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onSuccess(String value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - }; - } - -} \ No newline at end of file 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 deleted file mode 100644 index 06ad8eb..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import 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.schedulers.Schedulers; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class SkipExampleActivity extends AppCompatActivity { - - private static final String TAG = SkipExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* Using skip operator, it will not emit - * the first 2 values. - */ - private void doSomeWork() { - getObservable() - // Run on a background thread - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .skip(2) - .subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.just(1, 2, 3, 4, 5); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(Integer value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index d787bc5..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.Random; -import java.util.concurrent.TimeUnit; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.ObservableSource; -import io.reactivex.Observer; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.functions.Function; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by thanhtuan on 26/04/18. - */ -public class SwitchMapExampleActivity extends AppCompatActivity { - - private static final String TAG = SwitchMapExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* whenever a new item is emitted by the source Observable, it will unsubscribe to and stop - * mirroring the Observable that was generated from the previously-emitted item, - * and begin only mirroring the current one. - * - * Result: 5x - */ - private void doSomeWork() { - getObservable() - .switchMap(new Function>() { - @Override - public ObservableSource apply(Integer integer) { - int delay = new Random().nextInt(2); - - return Observable.just(integer.toString() + "x") - .delay(delay, TimeUnit.SECONDS, Schedulers.io()); - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.just(1, 2, 3, 4, 5); - } - - private Observer getObserver() { - return new Observer() { - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(String value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java deleted file mode 100644 index 74b4b9f..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import 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.schedulers.Schedulers; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class TakeExampleActivity extends AppCompatActivity { - - private static final String TAG = TakeExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* Using take operator, it only emits - * required number of values. here only 3 out of 5 - */ - private void doSomeWork() { - getObservable() - // Run on a background thread - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .take(3) - .subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.just(1, 2, 3, 4, 5); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(Integer value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file 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 deleted file mode 100644 index a078b5b..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeOperatorBaseActivity.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; -import com.rxjava2.android.samples.utils.ObserverAdapter; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; - -public abstract class TakeOperatorBaseActivity extends AppCompatActivity { - private static final String TAG = TakeWhileExampleActivity.class.getSimpleName(); - - private Button btn; - - protected TextView textView; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(view -> { - doSomeWork(); - }); - } - - /** - * Need to be override based on the operation. - */ - abstract void doSomeWork(); - - protected Observer getObserver() { - return new ObserverAdapter() { - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(String value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext value : " + value); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - - protected Observable getStringObservable() { - return Observable.just("Alpha", "Beta", "Cupcake", "Doughnut", "Eclair", "Froyo", "GingerBread", - "Honeycomb", "Ice cream sandwich"); - } - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeUntilExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeUntilExampleActivity.java deleted file mode 100644 index e0313d0..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeUntilExampleActivity.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.util.Log; - -import com.rxjava2.android.samples.utils.AppConstant; -import com.rxjava2.android.samples.utils.ObserverAdapter; - -import java.util.concurrent.TimeUnit; - -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.functions.BiFunction; - -public class TakeUntilExampleActivity extends TakeOperatorBaseActivity { - - private static final String TAG = TakeWhileExampleActivity.class.getSimpleName(); - - @Override - protected void doSomeWork() { - Observable timerObservable = Observable.timer(5, TimeUnit.SECONDS); - timerObservable.subscribe(new ObserverAdapter() { - @Override - public void onComplete() { - String print = " Timer completed"; - textView.append(print); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, print); - } - }); - - 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; - } - }) - //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. - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getObserver()); - } -} 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 deleted file mode 100644 index 213b779..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeWhileExampleActivity.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import java.util.concurrent.TimeUnit; - -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 { - - private static final String TAG = TakeWhileExampleActivity.class.getSimpleName(); - - @Override - 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; - } - }) - //Take the items until the condition is met. - .takeWhile(new Predicate() { - @Override - public boolean test(String s) throws Exception { - return !s.toLowerCase().contains("honey"); - } - }) - //We need to observe on MainThread because delay works on background thread to avoid UI blocking. - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getObserver()); - } -} 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 deleted file mode 100644 index a009cc1..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleFirstExampleActivity.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.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; -import io.reactivex.schedulers.Schedulers; - - -/** - * Created by threshold on 2017/1/11. - */ - -public class ThrottleFirstExampleActivity extends AppCompatActivity { - - private static final String TAG = ThrottleFirstExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * Using throttleFirst() -> if the source Observable has emitted no items since - * the last time it was sampled, the Observable that results from this operator - * will emit no item for that sampling period. - */ - private void doSomeWork() { - getObservable() - .throttleFirst(500, TimeUnit.MILLISECONDS) - // Run on a background thread - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getObserver()); - } - - 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(); - } - }); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(Integer value) { - textView.append(" onNext : "); - textView.append(AppConstant.LINE_SEPARATOR); - textView.append(" value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext "); - Log.d(TAG, " value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - -} \ No newline at end of file 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 deleted file mode 100644 index b48e208..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.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; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by amitshekhar on 22/12/16. - */ - -public class ThrottleLastExampleActivity extends AppCompatActivity { - - private static final String TAG = ThrottleLastExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * Using throttleLast() -> emit the most recent items emitted by an Observable within - * periodic time intervals, so here it will emit 2, 6 and 7 as we have simulated it to be the - * last the element in the interval of 500 millis - */ - private void doSomeWork() { - getObservable() - .throttleLast(500, TimeUnit.MILLISECONDS) - // Run on a background thread - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getObserver()); - } - - 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(); - } - }); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(Integer value) { - textView.append(" onNext : "); - textView.append(AppConstant.LINE_SEPARATOR); - textView.append(" value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext "); - Log.d(TAG, " value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - -} \ No newline at end of file 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 deleted file mode 100644 index cbfa1e1..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.concurrent.TimeUnit; - -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.schedulers.Schedulers; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class TimerExampleActivity extends AppCompatActivity { - - private static final String TAG = TimerExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * simple example using timer to do something after 2 second - */ - private void doSomeWork() { - getObservable() - // Run on a background thread - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getObserver()); - } - - private Observable getObservable() { - return Observable.timer(2, TimeUnit.SECONDS); - } - - private Observer getObserver() { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(Long value) { - textView.append(" onNext : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onNext : value : " + value); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.kt new file mode 100644 index 0000000..dd810a8 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.kt @@ -0,0 +1,84 @@ +package com.rxjava2.android.samples.ui.operators + +import android.os.Bundle +import android.util.Log +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 io.reactivex.Observable +import io.reactivex.Observer +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers +import java.util.concurrent.TimeUnit + +/** + * Created by amitshekhar on 27/08/16. + */ +class TimerExampleActivity : AppCompatActivity() { + + companion object { + private const val TAG = "TimerExampleActivity" + } + + private lateinit var btn: Button + private lateinit var textView: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_example) + btn = findViewById(R.id.btn) + textView = findViewById(R.id.textView) + + btn.setOnClickListener { + doSomeWork() + } + } + + /* + * simple example using timer to do something after 2 second + */ + private fun doSomeWork() { + getObservable() + // Run on a background thread + .subscribeOn(Schedulers.io()) + // Be notified on the main thread + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getObserver()) + } + + private fun getObservable(): Observable { + return Observable.timer(2, TimeUnit.SECONDS) + } + + private fun getObserver(): Observer { + return object : Observer { + + override fun onSubscribe(d: Disposable) { + Log.d(TAG, " onSubscribe : " + d.isDisposed) + } + + override fun onNext(value: Long) { + textView.append(" onNext : value : $value") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onNext : value : $value") + } + + override fun onError(e: Throwable) { + textView.append(" onError : " + e.message) + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onError : " + e.message) + } + + override fun onComplete() { + textView.append(" onComplete") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onComplete") + } + } + } + + +} \ No newline at end of file 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 deleted file mode 100644 index 881db12..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.concurrent.TimeUnit; - -import androidx.appcompat.app.AppCompatActivity; -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.functions.Consumer; -import io.reactivex.schedulers.Schedulers; - -public class WindowExampleActivity extends AppCompatActivity { - - private static final String TAG = WindowExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * Example using window operator -> It periodically - * subdivide items from an Observable into - * Observable windows and emit these windows rather than - * emitting the items one at a time - */ - protected void doSomeWork() { - - Observable.interval(1, TimeUnit.SECONDS).take(12) - .window(3, TimeUnit.SECONDS) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getConsumer()); - } - - 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); - } - }); - } - }; - } -} 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 deleted file mode 100644 index 11cb394..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.rxjava2.android.samples.ui.operators; - -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.model.User; -import com.rxjava2.android.samples.utils.AppConstant; -import com.rxjava2.android.samples.utils.Utils; - -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; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class ZipExampleActivity extends AppCompatActivity { - - private static final String TAG = ZipExampleActivity.class.getSimpleName(); - Button btn; - TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = findViewById(R.id.btn); - textView = findViewById(R.id.textView); - - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /* - * Here we are getting two user list - * One, the list of cricket fans - * Another one, the list of football fans - * Then we are finding the list of users who loves both - */ - private void doSomeWork() { - Observable.zip(getCricketFansObservable(), getFootballFansObservable(), - new BiFunction, List, List>() { - @Override - public List apply(List cricketFans, List footballFans) { - return Utils.filterUserWhoLovesBoth(cricketFans, footballFans); - } - }) - // Run on a background thread - .subscribeOn(Schedulers.io()) - // Be notified on the main thread - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(getObserver()); - } - - private Observable> getCricketFansObservable() { - return Observable.create(new ObservableOnSubscribe>() { - @Override - public void subscribe(ObservableEmitter> e) { - if (!e.isDisposed()) { - e.onNext(Utils.getUserListWhoLovesCricket()); - e.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(); - } - } - }).subscribeOn(Schedulers.io()); - } - - private Observer> getObserver() { - return new Observer>() { - - @Override - public void onSubscribe(Disposable d) { - Log.d(TAG, " onSubscribe : " + d.isDisposed()); - } - - @Override - public void onNext(List userList) { - textView.append(" onNext"); - textView.append(AppConstant.LINE_SEPARATOR); - for (User user : userList) { - textView.append(" firstname : " + user.firstname); - textView.append(AppConstant.LINE_SEPARATOR); - } - Log.d(TAG, " onNext : " + userList.size()); - } - - @Override - public void onError(Throwable e) { - textView.append(" onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onError : " + e.getMessage()); - } - - @Override - public void onComplete() { - textView.append(" onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, " onComplete"); - } - }; - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.kt new file mode 100644 index 0000000..0d20b65 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.kt @@ -0,0 +1,110 @@ +package com.rxjava2.android.samples.ui.operators + +import android.os.Bundle +import android.util.Log +import android.widget.Button +import android.widget.TextView +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 +import com.rxjava2.android.samples.utils.Utils +import io.reactivex.Observable +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 + +/** + * Created by amitshekhar on 27/08/16. + */ +class ZipExampleActivity : AppCompatActivity() { + + companion object { + private const val TAG = "ZipExampleActivity" + } + + private lateinit var btn: Button + private lateinit var textView: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_example) + btn = findViewById(R.id.btn) + textView = findViewById(R.id.textView) + + btn.setOnClickListener { + doSomeWork() + } + } + + /* + * Here we are getting two user list + * One, the list of cricket fans + * Another one, the list of football fans + * Then we are finding the list of users who loves both + */ + private fun doSomeWork() { + Observable.zip(getCricketFansObservable(), getFootballFansObservable(), + BiFunction, List, List> { cricketFans, footballFans -> + return@BiFunction Utils.filterUserWhoLovesBoth(cricketFans, footballFans) + }) + // Run on a background thread + .subscribeOn(Schedulers.io()) + // Be notified on the main thread + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(getObserver()) + } + + private fun getCricketFansObservable(): Observable> { + return Observable.create(ObservableOnSubscribe> { e -> + if (!e.isDisposed) { + e.onNext(Utils.getUserListWhoLovesCricket()) + e.onComplete() + } + }).subscribeOn(Schedulers.io()) + } + + private fun getFootballFansObservable(): Observable> { + return Observable.create(ObservableOnSubscribe> { e -> + if (!e.isDisposed) { + e.onNext(Utils.getUserListWhoLovesFootball()) + e.onComplete() + } + }).subscribeOn(Schedulers.io()) + } + + private fun getObserver(): Observer> { + return object : Observer> { + + override fun onSubscribe(d: Disposable) { + Log.d(TAG, " onSubscribe : " + d.isDisposed) + } + + override fun onNext(userList: List) { + textView.append(" onNext") + textView.append(AppConstant.LINE_SEPARATOR) + for (user in userList) { + textView.append(" firstname : ${user.firstname}") + textView.append(AppConstant.LINE_SEPARATOR) + } + Log.d(TAG, " onNext : " + userList.size) + } + + override fun onError(e: Throwable) { + textView.append(" onError : " + e.message) + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onError : " + e.message) + } + + override fun onComplete() { + textView.append(" onComplete") + textView.append(AppConstant.LINE_SEPARATOR) + Log.d(TAG, " onComplete") + } + } + } + +} \ No newline at end of file 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 deleted file mode 100644 index 202be46..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.rxjava2.android.samples.ui.pagination; - -import android.os.Bundle; -import android.view.View; -import android.widget.ProgressBar; - -import com.rxjava2.android.samples.R; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import io.reactivex.Single; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.CompositeDisposable; -import io.reactivex.disposables.Disposable; -import io.reactivex.processors.PublishProcessor; -import io.reactivex.schedulers.Schedulers; - -/** - * Created by amitshekhar on 15/03/17. - */ - -public class PaginationActivity extends AppCompatActivity { - - public static final String TAG = PaginationActivity.class.getSimpleName(); - private CompositeDisposable compositeDisposable = new CompositeDisposable(); - private PublishProcessor paginator = PublishProcessor.create(); - private PaginationAdapter paginationAdapter; - private RecyclerView recyclerView; - private ProgressBar progressBar; - private boolean loading = false; - private int pageNumber = 1; - private final int VISIBLE_THRESHOLD = 1; - private int lastVisibleItem, totalItemCount; - private LinearLayoutManager layoutManager; - - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_pagination); - recyclerView = findViewById(R.id.recyclerView); - progressBar = findViewById(R.id.progressBar); - layoutManager = new LinearLayoutManager(this); - layoutManager.setOrientation(RecyclerView.VERTICAL); - recyclerView.setLayoutManager(layoutManager); - paginationAdapter = new PaginationAdapter(); - recyclerView.setAdapter(paginationAdapter); - setUpLoadMoreListener(); - subscribeForData(); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - compositeDisposable.clear(); - } - - /** - * setting listener to get callback for load more - */ - private void setUpLoadMoreListener() { - recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(RecyclerView recyclerView, - int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - - totalItemCount = layoutManager.getItemCount(); - lastVisibleItem = layoutManager - .findLastVisibleItemPosition(); - if (!loading - && totalItemCount <= (lastVisibleItem + VISIBLE_THRESHOLD)) { - pageNumber++; - paginator.onNext(pageNumber); - loading = true; - } - } - }); - } - - /** - * subscribing for data - */ - private void subscribeForData() { - - Disposable disposable = paginator - .onBackpressureDrop() - .doOnNext(page -> { - loading = true; - progressBar.setVisibility(View.VISIBLE); - }) - .concatMapSingle(page -> dataFromNetwork(page) - .subscribeOn(Schedulers.io()) - .doOnError(throwable -> { - // handle error - })) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(items -> { - paginationAdapter.addItems(items); - paginationAdapter.notifyDataSetChanged(); - loading = false; - progressBar.setVisibility(View.INVISIBLE); - }); - - compositeDisposable.add(disposable); - - paginator.onNext(pageNumber); - - } - - /** - * Simulation of network data - */ - private Single> dataFromNetwork(final int page) { - return Single.just(true) - .delay(2, TimeUnit.SECONDS) - .map(value -> { - List items = new ArrayList<>(); - for (int i = 1; i <= 10; i++) { - items.add("Item " + (page * 10 + i)); - } - return items; - }); - } -} 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 deleted file mode 100644 index ddc0402..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationAdapter.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.rxjava2.android.samples.ui.pagination; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -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. - */ - -public class PaginationAdapter extends RecyclerView.Adapter { - - List items = new ArrayList<>(); - - public PaginationAdapter() { - - } - - void addItems(List items) { - this.items.addAll(items); - } - - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return ItemViewHolder.create(parent); - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - ((ItemViewHolder) holder).bind(items.get(position)); - } - - @Override - public int getItemCount() { - return items.size(); - } - - private static class ItemViewHolder extends RecyclerView.ViewHolder { - ItemViewHolder(View itemView) { - super(itemView); - } - - static ItemViewHolder create(ViewGroup parent) { - return new ItemViewHolder( - LayoutInflater.from(parent.getContext()).inflate(R.layout.item_pagination, parent, false)); - } - - void bind(String content) { - ((TextView) itemView).setText(content); - } - } -} 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 deleted file mode 100644 index cdc81b0..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBus.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.rxjava2.android.samples.ui.rxbus; - -import io.reactivex.Observable; -import io.reactivex.subjects.PublishSubject; - -/** - * Created by amitshekhar on 06/02/17. - */ - -public class RxBus { - - public RxBus() { - } - - private PublishSubject bus = PublishSubject.create(); - - public void send(Object o) { - bus.onNext(o); - } - - public Observable toObservable() { - return bus; - } - - public boolean hasObservers() { - return bus.hasObservers(); - } -} 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 deleted file mode 100644 index a991e5e..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.rxjava2.android.samples.ui.rxbus; - -import android.os.Bundle; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -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. - */ - -public class RxBusActivity extends AppCompatActivity { - - public static final String TAG = RxBusActivity.class.getSimpleName(); - TextView textView; - Button button; - private final CompositeDisposable disposables = new CompositeDisposable(); - - @Override - protected void onDestroy() { - super.onDestroy(); - disposables.clear(); // do not send event after activity has been destroyed - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_rxbus); - textView = findViewById(R.id.textView); - button = findViewById(R.id.button); - - disposables.add(((MyApplication) getApplication()) - .bus() - .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"); - } - } - })); - - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ((MyApplication) getApplication()) - .bus() - .send(new Events.TapEvent()); - } - }); - } - - - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/search/RxSearchObservable.java b/app/src/main/java/com/rxjava2/android/samples/ui/search/RxSearchObservable.java deleted file mode 100644 index 9189214..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/search/RxSearchObservable.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.rxjava2.android.samples.ui.search; - -import android.widget.SearchView; - -import io.reactivex.Observable; -import io.reactivex.subjects.PublishSubject; - -/** - * Created by amitshekhar on 15/10/17. - */ - -public class RxSearchObservable { - - private RxSearchObservable() { - // no instance - } - - public static Observable fromView(SearchView searchView) { - - final PublishSubject subject = PublishSubject.create(); - - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String s) { - subject.onNext(s); - return true; - } - - @Override - public boolean onQueryTextChange(String text) { - subject.onNext(text); - return true; - } - }); - - return subject; - } -} 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 deleted file mode 100644 index 9086b01..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.rxjava2.android.samples.ui.search; - -import android.os.Bundle; -import android.widget.SearchView; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; - -import java.util.concurrent.TimeUnit; - -import androidx.appcompat.app.AppCompatActivity; -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; - -/** - * Created by amitshekhar on 15/10/17. - */ - -public class SearchActivity extends AppCompatActivity { - - public static final String TAG = SearchActivity.class.getSimpleName(); - private SearchView searchView; - private TextView textViewResult; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_search); - searchView = findViewById(R.id.searchView); - textViewResult = findViewById(R.id.textViewResult); - - setUpSearchObservable(); - } - - private void setUpSearchObservable() { - 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; - } - } - }) - .distinctUntilChanged() - .switchMap(new Function>() { - @Override - public ObservableSource apply(String query) { - return dataFromNetwork(query); - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Consumer() { - @Override - public void accept(String result) { - textViewResult.setText(result); - } - }); - } - - /** - * Simulation of network data - */ - 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; - } - }); - } - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.kt b/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.kt new file mode 100644 index 0000000..4f42b78 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.kt @@ -0,0 +1,73 @@ +package com.rxjava2.android.samples.ui.search + +import android.annotation.SuppressLint +import android.os.Bundle +import android.widget.SearchView +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import com.rxjava2.android.samples.R +import com.rxjava2.android.samples.utils.getQueryTextChangeObservable +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers +import java.util.concurrent.TimeUnit + +/** + * Created by amitshekhar on 15/10/17. + */ +@SuppressLint("CheckResult") +class SearchActivity : AppCompatActivity() { + + companion object { + const val TAG = "SearchActivity" + } + + private lateinit var searchView: SearchView + private lateinit var textViewResult: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_search) + searchView = findViewById(R.id.searchView) + textViewResult = findViewById(R.id.textViewResult) + setUpSearchObservable() + } + + private fun setUpSearchObservable() { + searchView.getQueryTextChangeObservable() + .debounce(300, TimeUnit.MILLISECONDS) + .filter { text -> + if (text.isEmpty()) { + runOnUiThread { textViewResult.text = "" } + return@filter false + } else { + return@filter true + } + } + .distinctUntilChanged() + .switchMap { query -> + dataFromNetwork(query) + .doOnError { + // handle error + } + .onErrorReturn { "" } + } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { result -> + textViewResult.text = result + } + } + + /** + * Simulation of network data + */ + private fun dataFromNetwork(query: String): Observable { + return Observable.just(true) + .delay(2, TimeUnit.SECONDS) + .map { + query + } + } + +} diff --git a/app/src/main/java/com/rxjava2/android/samples/utils/AppConstant.java b/app/src/main/java/com/rxjava2/android/samples/utils/AppConstant.java deleted file mode 100644 index 4a8b40f..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/utils/AppConstant.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.rxjava2.android.samples.utils; - -/** - * Created by amitshekhar on 30/08/16. - */ -public final class AppConstant { - - private AppConstant() { - // This class in not publicly instantiable. - } - - public static final String LINE_SEPARATOR = "\n"; - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/utils/AppConstant.kt b/app/src/main/java/com/rxjava2/android/samples/utils/AppConstant.kt new file mode 100644 index 0000000..3116840 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/utils/AppConstant.kt @@ -0,0 +1,10 @@ +package com.rxjava2.android.samples.utils + +/** + * Created by amitshekhar on 30/08/16. + */ +object AppConstant { + + const val LINE_SEPARATOR = "\n" + +} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/utils/Extensions.kt b/app/src/main/java/com/rxjava2/android/samples/utils/Extensions.kt new file mode 100644 index 0000000..b604516 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/utils/Extensions.kt @@ -0,0 +1,25 @@ +package com.rxjava2.android.samples.utils + +import android.widget.SearchView +import io.reactivex.Observable +import io.reactivex.subjects.PublishSubject + +fun SearchView.getQueryTextChangeObservable(): Observable { + + val subject = PublishSubject.create() + + setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String?): Boolean { + subject.onComplete() + return true + } + + override fun onQueryTextChange(newText: String): Boolean { + subject.onNext(newText) + return true + } + }) + + return subject + +} \ No newline at end of file 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 deleted file mode 100644 index 546084a..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/utils/ObserverAdapter.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.rxjava2.android.samples.utils; - -import io.reactivex.Observer; -import io.reactivex.disposables.Disposable; - -/** - * Adapter class for Observer to get the method only needed by the user. Instead of overriding each and every method. - * - * @param - */ -public abstract class ObserverAdapter implements Observer { - @Override - public void onSubscribe(Disposable d) { - - } - - @Override - public void onNext(T s) { - - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } -} diff --git a/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java b/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java deleted file mode 100644 index c0d7076..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java +++ /dev/null @@ -1,156 +0,0 @@ -package com.rxjava2.android.samples.utils; - -import android.util.Log; - -import com.androidnetworking.error.ANError; -import com.rxjava2.android.samples.model.ApiUser; -import com.rxjava2.android.samples.model.User; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by amitshekhar on 27/08/16. - */ -public class Utils { - - private Utils() { - // This class in not publicly instantiable. - } - - public static List getUserList() { - - List userList = new ArrayList<>(); - - User userOne = new User(); - userOne.firstname = "Amit"; - userOne.lastname = "Shekhar"; - userList.add(userOne); - - User userTwo = new User(); - userTwo.firstname = "Manish"; - userTwo.lastname = "Kumar"; - userList.add(userTwo); - - User userThree = new User(); - userThree.firstname = "Sumit"; - userThree.lastname = "Kumar"; - userList.add(userThree); - - return userList; - } - - public static List getApiUserList() { - - List apiUserList = new ArrayList<>(); - - ApiUser apiUserOne = new ApiUser(); - apiUserOne.firstname = "Amit"; - apiUserOne.lastname = "Shekhar"; - apiUserList.add(apiUserOne); - - ApiUser apiUserTwo = new ApiUser(); - apiUserTwo.firstname = "Manish"; - apiUserTwo.lastname = "Kumar"; - apiUserList.add(apiUserTwo); - - ApiUser apiUserThree = new ApiUser(); - apiUserThree.firstname = "Sumit"; - apiUserThree.lastname = "Kumar"; - apiUserList.add(apiUserThree); - - return apiUserList; - } - - public static List convertApiUserListToUserList(List apiUserList) { - - List userList = new ArrayList<>(); - - for (ApiUser apiUser : apiUserList) { - User user = new User(); - user.firstname = apiUser.firstname; - user.lastname = apiUser.lastname; - userList.add(user); - } - - return userList; - } - - public static List convertApiUserListToApiUserList(List apiUserList) { - return apiUserList; - } - - - public static List getUserListWhoLovesCricket() { - - List userList = new ArrayList<>(); - - User userOne = new User(); - userOne.id = 1; - userOne.firstname = "Amit"; - userOne.lastname = "Shekhar"; - userList.add(userOne); - - User userTwo = new User(); - userTwo.id = 2; - userTwo.firstname = "Manish"; - userTwo.lastname = "Kumar"; - userList.add(userTwo); - - return userList; - } - - - public static List getUserListWhoLovesFootball() { - - List userList = new ArrayList<>(); - - User userOne = new User(); - userOne.id = 1; - userOne.firstname = "Amit"; - userOne.lastname = "Shekhar"; - userList.add(userOne); - - User userTwo = new User(); - userTwo.id = 3; - userTwo.firstname = "Sumit"; - userTwo.lastname = "Kumar"; - userList.add(userTwo); - - return userList; - } - - - public static List filterUserWhoLovesBoth(List cricketFans, List footballFans) { - List userWhoLovesBoth = new ArrayList(); - for (User cricketFan : cricketFans) { - for (User footballFan : footballFans) { - if (cricketFan.id == footballFan.id) { - userWhoLovesBoth.add(cricketFan); - } - } - } - return userWhoLovesBoth; - } - - public static void logError(String TAG, Throwable e) { - if (e instanceof ANError) { - ANError anError = (ANError) e; - if (anError.getErrorCode() != 0) { - // received ANError from server - // error.getErrorCode() - the ANError code from server - // error.getErrorBody() - the ANError body from server - // error.getErrorDetail() - just a ANError detail - Log.d(TAG, "onError errorCode : " + anError.getErrorCode()); - Log.d(TAG, "onError errorBody : " + anError.getErrorBody()); - Log.d(TAG, "onError errorDetail : " + anError.getErrorDetail()); - } else { - // error.getErrorDetail() : connectionError, parseError, requestCancelledError - Log.d(TAG, "onError errorDetail : " + anError.getErrorDetail()); - } - } else { - Log.d(TAG, "onError errorMessage : " + e.getMessage()); - } - } - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/utils/Utils.kt b/app/src/main/java/com/rxjava2/android/samples/utils/Utils.kt new file mode 100644 index 0000000..bcf28a0 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/utils/Utils.kt @@ -0,0 +1,117 @@ +package com.rxjava2.android.samples.utils + +import android.util.Log +import com.androidnetworking.error.ANError +import com.rxjava2.android.samples.model.ApiUser +import com.rxjava2.android.samples.model.User +import java.util.* + +/** + * Created by amitshekhar on 27/08/16. + */ +object Utils { + + fun getUserList(): List { + + val userList = ArrayList() + + val userOne = User(firstname = "Amit", lastname = "Shekhar") + userList.add(userOne) + + val userTwo = User(firstname = "Manish", lastname = "Kumar") + userList.add(userTwo) + + val userThree = User(firstname = "Sumit", lastname = "Kumar") + userList.add(userThree) + + return userList + } + + fun getApiUserList(): List { + + val apiUserList = ArrayList() + + val apiUserOne = ApiUser(firstname = "Amit", lastname = "Shekhar") + apiUserList.add(apiUserOne) + + val apiUserTwo = ApiUser(firstname = "Manish", lastname = "Kumar") + apiUserList.add(apiUserTwo) + + val apiUserThree = ApiUser(firstname = "Sumit", lastname = "Kumar") + apiUserList.add(apiUserThree) + + return apiUserList + } + + + fun getUserListWhoLovesCricket(): List { + + val userList = ArrayList() + + val userOne = User(id = 1, firstname = "Amit", lastname = "Shehkar") + userList.add(userOne) + + val userTwo = User(id = 2, firstname = "Manish", lastname = "Kumar") + userList.add(userTwo) + + return userList + } + + + fun getUserListWhoLovesFootball(): List { + + val userList = ArrayList() + + val userOne = User(id = 1, firstname = "Amit", lastname = "Shehkar") + userList.add(userOne) + + val userTwo = User(id = 3, firstname = "Sumit", lastname = "Kumar") + userList.add(userTwo) + + return userList + } + + fun convertApiUserListToUserList(apiUserList: List): List { + + val userList = ArrayList() + + for (apiUser in apiUserList) { + val user = User(apiUser.id, apiUser.firstname, apiUser.lastname) + userList.add(user) + } + + return userList + } + + fun filterUserWhoLovesBoth(cricketFans: List, footballFans: List): List { + val userWhoLovesBoth = ArrayList() + + for (footballFan in footballFans) { + if (cricketFans.contains(footballFan)) { + userWhoLovesBoth.add(footballFan) + } + } + + return userWhoLovesBoth + } + + fun logError(TAG: String, e: Throwable) { + if (e is ANError) { + if (e.errorCode != 0) { + // received ANError from server + // error.getErrorCode() - the ANError code from server + // error.getErrorBody() - the ANError body from server + // error.getErrorDetail() - just a ANError detail + Log.d(TAG, "onError errorCode : " + e.errorCode) + Log.d(TAG, "onError errorBody : " + e.errorBody) + Log.d(TAG, "onError errorDetail : " + e.errorDetail) + } else { + // error.getErrorDetail() : connectionError, parseError, requestCancelledError + Log.d(TAG, "onError errorDetail : " + e.errorDetail) + } + } else { + Log.d(TAG, "onError errorMessage : " + e.message) + } + } + +} diff --git a/app/src/main/res/layout/activity_compose_operator_example.xml b/app/src/main/res/layout/activity_compose_operator_example.xml deleted file mode 100644 index 0f6e27c..0000000 --- a/app/src/main/res/layout/activity_compose_operator_example.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/layout/activity_networking.xml b/app/src/main/res/layout/activity_networking.xml index 12893a1..2521380 100644 --- a/app/src/main/res/layout/activity_networking.xml +++ b/app/src/main/res/layout/activity_networking.xml @@ -7,12 +7,12 @@ + android:paddingBottom="@dimen/activity_vertical_margin">