Fix NetworkStateObserver
This commit is contained in:
@@ -7,6 +7,7 @@ import android.net.NetworkRequest
|
|||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import kotlinx.coroutines.channels.ProducerScope
|
import kotlinx.coroutines.channels.ProducerScope
|
||||||
import kotlinx.coroutines.channels.awaitClose
|
import kotlinx.coroutines.channels.awaitClose
|
||||||
|
import kotlinx.coroutines.channels.onSuccess
|
||||||
import kotlinx.coroutines.channels.trySendBlocking
|
import kotlinx.coroutines.channels.trySendBlocking
|
||||||
import kotlinx.coroutines.flow.FlowCollector
|
import kotlinx.coroutines.flow.FlowCollector
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
@@ -26,7 +27,8 @@ class NetworkStateObserver @Inject constructor(
|
|||||||
override val replayCache: List<Boolean>
|
override val replayCache: List<Boolean>
|
||||||
get() = listOf(value)
|
get() = listOf(value)
|
||||||
|
|
||||||
override var value: Boolean = connectivityManager.isNetworkAvailable
|
override val value: Boolean
|
||||||
|
get() = connectivityManager.isNetworkAvailable
|
||||||
|
|
||||||
override suspend fun collect(collector: FlowCollector<Boolean>): Nothing {
|
override suspend fun collect(collector: FlowCollector<Boolean>): Nothing {
|
||||||
collector.emit(value)
|
collector.emit(value)
|
||||||
@@ -44,9 +46,12 @@ class NetworkStateObserver @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class FlowNetworkCallback(
|
private inner class FlowNetworkCallback(
|
||||||
private val producerScope: ProducerScope<Boolean>,
|
private val producerScope: ProducerScope<Boolean>,
|
||||||
) : NetworkCallback() {
|
) : NetworkCallback() {
|
||||||
|
|
||||||
|
private var prevValue = value
|
||||||
|
|
||||||
override fun onAvailable(network: Network) = update()
|
override fun onAvailable(network: Network) = update()
|
||||||
|
|
||||||
override fun onLost(network: Network) = update()
|
override fun onLost(network: Network) = update()
|
||||||
@@ -55,9 +60,10 @@ class NetworkStateObserver @Inject constructor(
|
|||||||
|
|
||||||
private fun update() {
|
private fun update() {
|
||||||
val newValue = connectivityManager.isNetworkAvailable
|
val newValue = connectivityManager.isNetworkAvailable
|
||||||
if (value != newValue) {
|
if (newValue != prevValue) {
|
||||||
value = newValue
|
producerScope.trySendBlocking(newValue).onSuccess {
|
||||||
producerScope.trySendBlocking(newValue)
|
prevValue = newValue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user