Skip to content

Instantly share code, notes, and snippets.

@marenovakovic
Created March 30, 2021 14:28
Show Gist options
  • Select an option

  • Save marenovakovic/34f278029e5c5f95a9818fb435c875d1 to your computer and use it in GitHub Desktop.

Select an option

Save marenovakovic/34f278029e5c5f95a9818fb435c875d1 to your computer and use it in GitHub Desktop.
class NetworkStatusTracker(context: Context) {
private val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
private val networks = mutableSetOf<Network>()
val networkStatus = callbackFlow<NetworkStatus> {
val networkStatusCallback = object : ConnectivityManager.NetworkCallback() {
override fun onUnavailable() {
println("onUnavailable")
offer(NetworkStatus.Unavailable)
}
override fun onAvailable(network: Network) {
println("onAvailable")
networks += network
checkConnection()
}
override fun onLost(network: Network) {
println("onLost")
networks -= network
checkConnection()
}
fun checkConnection() {
if (networks.isEmpty()) offer(NetworkStatus.Unavailable)
else offer(NetworkStatus.Available)
}
}
val request = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build()
connectivityManager.registerNetworkCallback(request, networkStatusCallback)
awaitClose {
connectivityManager.unregisterNetworkCallback(networkStatusCallback)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment