diff --git a/app/src/main/java/org/koitharu/kotatsu/core/os/NetworkStateObserver.kt b/app/src/main/java/org/koitharu/kotatsu/core/os/NetworkStateObserver.kt index 159ef8a4f..6baefd34d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/os/NetworkStateObserver.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/os/NetworkStateObserver.kt @@ -7,6 +7,7 @@ import android.net.NetworkRequest import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.channels.ProducerScope import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.channels.onSuccess import kotlinx.coroutines.channels.trySendBlocking import kotlinx.coroutines.flow.FlowCollector import kotlinx.coroutines.flow.StateFlow @@ -26,7 +27,8 @@ class NetworkStateObserver @Inject constructor( override val replayCache: List get() = listOf(value) - override var value: Boolean = connectivityManager.isNetworkAvailable + override val value: Boolean + get() = connectivityManager.isNetworkAvailable override suspend fun collect(collector: FlowCollector): Nothing { collector.emit(value) @@ -44,9 +46,12 @@ class NetworkStateObserver @Inject constructor( } } - inner class FlowNetworkCallback( + private inner class FlowNetworkCallback( private val producerScope: ProducerScope, ) : NetworkCallback() { + + private var prevValue = value + override fun onAvailable(network: Network) = update() override fun onLost(network: Network) = update() @@ -55,9 +60,10 @@ class NetworkStateObserver @Inject constructor( private fun update() { val newValue = connectivityManager.isNetworkAvailable - if (value != newValue) { - value = newValue - producerScope.trySendBlocking(newValue) + if (newValue != prevValue) { + producerScope.trySendBlocking(newValue).onSuccess { + prevValue = newValue + } } } }