kioba
04/11/2019, 5:10 PMclass ConnectivityMonitor : ConnectivityMonitorInterface, ConnectivityManager.NetworkCallback() {
override fun onConnectivity(): Observable<Unit> = connectionLost
.filter { (it is Available).not() }
.switchMap {
when(it) {
Available -> Observable.empty()
is Loosing -> Observable.empty()
Lost -> Observable.timer(5, TimeUnit.SECONDS).map { Unit }
}
}
private val connectionLost = PublishSubject.create<Connectivity>()
override fun onAvailable(network: Network?) {
super.onAvailable(network)
Timber.v("Network available")
connectionLost.onNext(Available)
}
override fun onLosing(network: Network?, maxMsToLive: Int) {
super.onLosing(network, maxMsToLive)
Timber.v("onLosing")
connectionLost.onNext(Loosing)
}
override fun onLost(network: Network?) {
super.onLost(network)
Timber.v("onLost")
connectionLost.onNext(Lost)
}
}
sealed class Connectivity
object Available : Connectivity()
object Loosing : Connectivity()
object Lost : Connectivity()
interface ConnectivityMonitorInterface {
fun onConnectivity() : Observable<Unit>
do you think it is something the above that you want to achieve?
here using the ConnectivityMonitor with the ConnectivityMonitorInterface does not expose any Subject