diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5827b6d..b6f9694 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + Unit) : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + val isConnected = isNetworkConnected(context) + onConnectivityChange(isConnected) + } + private fun isNetworkConnected(context: Context):Boolean{ + val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + val networkInfo = connectivityManager.activeNetworkInfo + return networkInfo != null && networkInfo.isConnected + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/abhishek/pathak/kotlin/android/githubcompose/ui/feature/common/ConnectionSnackBar.kt b/app/src/main/java/com/abhishek/pathak/kotlin/android/githubcompose/ui/feature/common/ConnectionSnackBar.kt new file mode 100644 index 0000000..1d98f7c --- /dev/null +++ b/app/src/main/java/com/abhishek/pathak/kotlin/android/githubcompose/ui/feature/common/ConnectionSnackBar.kt @@ -0,0 +1,39 @@ +package com.abhishek.pathak.kotlin.android.githubcompose.ui.feature.common + +import androidx.compose.material.Snackbar +import androidx.compose.material.SnackbarDuration +import androidx.compose.material.SnackbarHost +import androidx.compose.material.SnackbarHostState +import androidx.compose.material.Text +import androidx.compose.material.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color + +@Composable +fun ConnectionSnackBar(isConnected: Boolean) { + val snackBarHotState = remember { + SnackbarHostState() + } + LaunchedEffect(isConnected) { + if(!isConnected){ + snackBarHotState.showSnackbar( + message = "No internet connection", + duration = SnackbarDuration.Long + ) + } + } + SnackbarHost(hostState = snackBarHotState, + snackbar = { + Snackbar(action = { + TextButton(onClick = { snackBarHotState.currentSnackbarData?.dismiss() }) { + Text(text = "Dismiss") + } + }, + backgroundColor = Color.Yellow) { + Text(text = "No internet connection", color = Color.Black) + } + }) +} \ No newline at end of file diff --git a/app/src/main/java/com/abhishek/pathak/kotlin/android/githubcompose/ui/feature/main/MainActivity.kt b/app/src/main/java/com/abhishek/pathak/kotlin/android/githubcompose/ui/feature/main/MainActivity.kt index c6fbf10..cde9d0a 100644 --- a/app/src/main/java/com/abhishek/pathak/kotlin/android/githubcompose/ui/feature/main/MainActivity.kt +++ b/app/src/main/java/com/abhishek/pathak/kotlin/android/githubcompose/ui/feature/main/MainActivity.kt @@ -1,16 +1,34 @@ package com.abhishek.pathak.kotlin.android.githubcompose.ui.feature.main +import android.content.IntentFilter +import android.net.ConnectivityManager import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material.MaterialTheme import androidx.compose.material.Surface +import com.abhishek.pathak.kotlin.android.githubcompose.ui.feature.common.BroadcastReceiver +import com.abhishek.pathak.kotlin.android.githubcompose.ui.feature.common.ConnectionSnackBar import com.abhishek.pathak.kotlin.android.githubcompose.ui.navigation.AppNavigation import com.abhishek.pathak.kotlin.android.githubcompose.ui.theme.GithubComposeTheme class MainActivity : ComponentActivity() { + private val connectivityReceiver = BroadcastReceiver{isConnected -> + setContent{ + GithubComposeTheme { + Surface(color = MaterialTheme.colors.background) { + AppNavigation() + ConnectionSnackBar(isConnected = isConnected) + } + } + } + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + registerReceiver( + connectivityReceiver, + IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION) + ) setContent { GithubComposeTheme { Surface(color = MaterialTheme.colors.background) { @@ -19,4 +37,9 @@ class MainActivity : ComponentActivity() { } } } + + override fun onDestroy() { + super.onDestroy() + unregisterReceiver(connectivityReceiver) + } }