|
|
|
|
@@ -1,5 +1,6 @@
|
|
|
|
|
package com.example.hpostesting.util
|
|
|
|
|
|
|
|
|
|
import android.annotation.SuppressLint
|
|
|
|
|
import android.content.Context
|
|
|
|
|
import android.net.ConnectivityManager
|
|
|
|
|
import android.net.Network
|
|
|
|
|
@@ -12,6 +13,8 @@ import kotlinx.coroutines.CoroutineScope
|
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
|
import kotlinx.coroutines.SupervisorJob
|
|
|
|
|
import kotlinx.coroutines.cancel
|
|
|
|
|
import kotlinx.coroutines.delay
|
|
|
|
|
import kotlinx.coroutines.isActive
|
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
import java.net.HttpURLConnection
|
|
|
|
|
import java.net.URL
|
|
|
|
|
@@ -23,7 +26,7 @@ import javax.inject.Singleton
|
|
|
|
|
class NetworkMonitor @Inject constructor(
|
|
|
|
|
@ApplicationContext private val context: Context
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
|
|
private var isMonitoringStarted = false
|
|
|
|
|
private val connectivityManager =
|
|
|
|
|
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
|
|
|
|
|
|
|
|
|
@@ -49,7 +52,10 @@ class NetworkMonitor @Inject constructor(
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SuppressLint("NewApi")
|
|
|
|
|
fun startMonitoring() {
|
|
|
|
|
if (isMonitoringStarted) return // Already started, do nothing.
|
|
|
|
|
isMonitoringStarted = true
|
|
|
|
|
// Check initial connectivity status
|
|
|
|
|
val network = connectivityManager.activeNetwork
|
|
|
|
|
val capabilities = connectivityManager.getNetworkCapabilities(network)
|
|
|
|
|
@@ -66,6 +72,8 @@ class NetworkMonitor @Inject constructor(
|
|
|
|
|
.build()
|
|
|
|
|
|
|
|
|
|
connectivityManager.registerNetworkCallback(networkRequest, networkCallback)
|
|
|
|
|
// Start periodic checks:
|
|
|
|
|
startPeriodicPingCheck()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun stopMonitoring() { // never needed to call
|
|
|
|
|
@@ -96,4 +104,14 @@ class NetworkMonitor @Inject constructor(
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun startPeriodicPingCheck(intervalMillis: Long = 1 * 60_000L) {
|
|
|
|
|
networkScope.launch {
|
|
|
|
|
while (isActive) {
|
|
|
|
|
performPingCheck()
|
|
|
|
|
delay(intervalMillis)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|