Skip to content

Instantly share code, notes, and snippets.

@Gizmodo
Created February 2, 2022 08:47
Show Gist options
  • Save Gizmodo/8b5e7c4681f3b1086bf9acf21c7f1044 to your computer and use it in GitHub Desktop.
Save Gizmodo/8b5e7c4681f3b1086bf9acf21c7f1044 to your computer and use it in GitHub Desktop.
@file:Suppress("UNCHECKED_CAST")
package com.example.fragmentvm.utils
import androidx.lifecycle.MutableLiveData
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.*
import io.reactivex.rxjava3.schedulers.Schedulers
internal object RxUtils {
fun <T> applyObservableScheduler(): ObservableTransformer<T, T> {
return ObservableTransformer { upstream ->
upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
}
fun <T> applyObservableScheduler(loading: MutableLiveData<Boolean>): ObservableTransformer<T, T> {
return ObservableTransformer { upstream ->
upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { loading.postValue(true) }
.doFinally { loading.postValue(false) }
}
}
fun <T> applyFlowableScheduler(): FlowableTransformer<T, T> {
return FlowableTransformer<Flowable<*>, Flowable<*>> { upstream ->
upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
} as FlowableTransformer<T, T>
}
fun <T> applyFlowableScheduler(loading: MutableLiveData<Boolean>): FlowableTransformer<T, T> {
return FlowableTransformer<Flowable<*>, Flowable<*>> { upstream ->
upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe { loading.postValue(true) }
.doFinally { loading.postValue(false) }
} as FlowableTransformer<T, T>
}
fun <T> applySingleScheduler(): SingleTransformer<T, T> {
return SingleTransformer<Single<*>, Single<*>> { upstream ->
upstream.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
} as SingleTransformer<T, T>
}
fun <T> applySingleScheduler(loading: MutableLiveData<Boolean>): SingleTransformer<T, T> {
return SingleTransformer<Single<*>, Single<*>> { upstream ->
upstream.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.doOnSubscribe { loading.postValue(true) }
.doFinally { loading.postValue(false) }
} as SingleTransformer<T, T>
}
fun applyCompletableScheduler(): CompletableTransformer {
return CompletableTransformer { upstream ->
upstream.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
}
}
fun applyCompletableScheduler(loading: MutableLiveData<Boolean>): CompletableTransformer {
return CompletableTransformer { upstream ->
upstream.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.doOnSubscribe { loading.postValue(true) }
.doFinally { loading.postValue(false) }
}
}
fun <T> applyMaybeScheduler(): MaybeTransformer<T, T> {
return MaybeTransformer<Maybe<*>, Maybe<*>> { upstream ->
upstream.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
} as MaybeTransformer<T, T>
}
fun <T> applyMaybeScheduler(loading: MutableLiveData<Boolean>): MaybeTransformer<T, T> {
return MaybeTransformer<Maybe<*>, Maybe<*>> { upstream ->
upstream.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.doOnSubscribe { loading.postValue(true) }
.doFinally { loading.postValue(false) }
} as MaybeTransformer<T, T>
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment