diff --git a/app/src/main/java/com/example/hpostesting/di/AppModule.kt b/app/src/main/java/com/example/hpostesting/di/AppModule.kt index d806a06..07a9c06 100644 --- a/app/src/main/java/com/example/hpostesting/di/AppModule.kt +++ b/app/src/main/java/com/example/hpostesting/di/AppModule.kt @@ -243,9 +243,10 @@ object AppModule { @Provides @Singleton - fun provideNetworkMonitor(@ApplicationContext context: Context): NetworkMonitor { - return NetworkMonitor(context) + fun provideNetworkMonitor( + @ApplicationContext context: Context + ): NetworkMonitor { + return NetworkMonitor(context).apply { startMonitoring() } } - } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/util/NetworkChecker.kt b/app/src/main/java/com/example/hpostesting/util/NetworkChecker.kt index 93b41b0..0e83634 100644 --- a/app/src/main/java/com/example/hpostesting/util/NetworkChecker.kt +++ b/app/src/main/java/com/example/hpostesting/util/NetworkChecker.kt @@ -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) + } + } + } + } \ No newline at end of file