Skip to content

Instantly share code, notes, and snippets.

@realpacific
Last active December 31, 2018 15:52
Show Gist options
  • Save realpacific/ff6ae486b00066bcd2a865cb06269b3f to your computer and use it in GitHub Desktop.
Save realpacific/ff6ae486b00066bcd2a865cb06269b3f to your computer and use it in GitHub Desktop.
/**
* Use [enable]/[disable] to register/unregister [ConnectivityManager]
* @property context
* @property onNetworkAvailableCallbacks callback to notify [context] about network status changes
*/
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
class ConnectionStateMonitor(
private val context: Context,
private val onNetworkAvailableCallbacks: OnNetworkAvailableCallbacks
) : ConnectivityManager.NetworkCallback() {
private val connectivityManager: ConnectivityManager by lazy {
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
}
private val networkRequest = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build()!!
/**
* @return`true` when device is connected to network else `false`
*/
fun hasNetworkConnection() = (connectivityManager.activeNetworkInfo != null)
fun enable() {
connectivityManager.registerNetworkCallback(networkRequest, this)
}
fun disable() {
connectivityManager.unregisterNetworkCallback(this)
}
override fun onAvailable(network: Network) {
super.onAvailable(network)
onNetworkAvailableCallbacks.onPositive()
}
override fun onLost(network: Network) {
super.onLost(network)
onNetworkAvailableCallbacks.onNegative()
}
/**
* Callbacks to handle the network status changes
*/
interface OnNetworkAvailableCallbacks {
/**
* Callback for when network is available
*/
fun onPositive()
/**
* Callback for when network is lost/disconnected
*/
fun onNegative()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment