Skip to content

Commit

Permalink
Merge pull request #16 from myofficework000/network-connection-broadc…
Browse files Browse the repository at this point in the history
…ast-receiver

Added broadcast receiver to check network connection
  • Loading branch information
myofficework000 authored Jul 9, 2024
2 parents 897f4d1 + 7eb22c1 commit 0a3d468
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 0 deletions.
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.abhishek.pathak.kotlin.android.githubcompose">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

<application
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.abhishek.pathak.kotlin.android.githubcompose.ui.feature.common

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.net.ConnectivityManager

class BroadcastReceiver(private val onConnectivityChange: (Boolean) -> 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
}

}
Original file line number Diff line number Diff line change
@@ -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)
}
})
}
Original file line number Diff line number Diff line change
@@ -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) {
Expand All @@ -19,4 +37,9 @@ class MainActivity : ComponentActivity() {
}
}
}

override fun onDestroy() {
super.onDestroy()
unregisterReceiver(connectivityReceiver)
}
}

0 comments on commit 0a3d468

Please sign in to comment.