added the network check

This commit is contained in:
sathwikcs
2024-12-11 12:31:09 +05:30
parent 5afbcc6670
commit 3d144f3876
2 changed files with 115 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
package `in`.sminnovations.attendanceapp.main
import android.content.Context
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
import kotlinx.coroutines.launch
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class NetworkMonitor @Inject constructor(
@ApplicationContext private val context: Context
) {
private val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
private val _isConnected = MutableLiveData(false)
val isConnected: LiveData<Boolean> get() = _isConnected
private val networkScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
private val networkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
performPingCheck()
}
override fun onLost(network: Network) {
_isConnected.postValue(false)
}
}
fun startMonitoring() {
val networkRequest = NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build()
connectivityManager.registerNetworkCallback(networkRequest, networkCallback)
}
fun stopMonitoring() {
try {
connectivityManager.unregisterNetworkCallback(networkCallback)
} catch (e: IllegalArgumentException) {
}
networkScope.cancel()
}
private fun performPingCheck() {
networkScope.launch {
try {
// Ping Google's public DNS server
val process = Runtime.getRuntime().exec("/system/bin/ping -c 1 8.8.8.8")
val isReachable = process.waitFor() == 0
_isConnected.postValue(isReachable)
} catch (e: Exception) {
_isConnected.postValue(false)
}
}
}
}

View File

@@ -0,0 +1,45 @@
package `in`.sminnovations.attendanceapp.screens.home.ui.componets
import android.content.Context
import android.net.ConnectivityManager
import android.net.Network
import androidx.lifecycle.LiveData
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
@Composable
fun NetworkErrorDialog(
showDialog: Boolean,
onRetry: () -> Unit
) {
if (showDialog) {
AlertDialog(
onDismissRequest = { /* Do nothing to prevent dismissal by tapping outside */ },
title = {
Text(text = "Network Error")
},
text = {
Text(text = "Network is not connected. Please check your Wi-Fi or mobile data.")
},
confirmButton = {
Button(
onClick = {
onRetry()
}
) {
Text("Retry")
}
},
modifier = Modifier.padding(16.dp)
)
}
}