Last active
December 31, 2018 15:52
-
-
Save realpacific/ff6ae486b00066bcd2a865cb06269b3f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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