``` class ConnectivityMonitor : ConnectivityMonito...
# rx
k
Copy code
class 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