diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 75284d44246151ac6010e659b77048b11d32f2e6..4b978a6b3afadcc24c7fd014208057ce5eda2671 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,9 +2,11 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools">
 
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
         android:maxSdkVersion="32" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
diff --git a/app/src/main/java/com/atm/bondowowo/LoginActivity.kt b/app/src/main/java/com/atm/bondowowo/LoginActivity.kt
index 1ad62f5e37d97aedb7900bfb9fc86739b453ea08..9626277b63db876cdeef48b050a0ea5a729dd686 100644
--- a/app/src/main/java/com/atm/bondowowo/LoginActivity.kt
+++ b/app/src/main/java/com/atm/bondowowo/LoginActivity.kt
@@ -7,6 +7,8 @@ import android.widget.EditText
 import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
 import com.atm.bondowowo.data.model.LoginRequest
+import com.atm.bondowowo.utils.DialogHelper
+import com.atm.bondowowo.utils.NetworkHelper
 import com.atm.bondowowo.utils.NetworkUtils.apiService
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
@@ -23,6 +25,10 @@ class LoginActivity : AppCompatActivity() {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_login)
 
+        if (!NetworkHelper.isInternetAvailable(this)) {
+            DialogHelper.showNoInternetDialog(this)
+        }
+
         CoroutineScope(Dispatchers.Main).launch {
             if (isUserAuthenticated()) {
                 navigateToMainActivity()
diff --git a/app/src/main/java/com/atm/bondowowo/MainActivity.kt b/app/src/main/java/com/atm/bondowowo/MainActivity.kt
index 0f98f9e9c01648845b3df09c39b4e239843ed48b..c92c7c032ef9809f22c582964f728d05ba46bd58 100644
--- a/app/src/main/java/com/atm/bondowowo/MainActivity.kt
+++ b/app/src/main/java/com/atm/bondowowo/MainActivity.kt
@@ -8,6 +8,8 @@ import androidx.navigation.findNavController
 import androidx.navigation.fragment.NavHostFragment
 import androidx.navigation.ui.setupWithNavController
 import com.atm.bondowowo.databinding.ActivityMainBinding
+import com.atm.bondowowo.utils.DialogHelper
+import com.atm.bondowowo.utils.NetworkHelper
 import com.atm.bondowowo.utils.NetworkUtils
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
@@ -22,6 +24,10 @@ class MainActivity : AppCompatActivity() {
         binding = ActivityMainBinding.inflate(layoutInflater)
         setContentView(binding.root)
 
+        if (!NetworkHelper.isInternetAvailable(this)) {
+            DialogHelper.showNoInternetDialog(this)
+        }
+
         CoroutineScope(Dispatchers.Main).launch {
             if (!isUserAuthenticated()) {
                 navigateToLoginActivity()
diff --git a/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt b/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt
index b7d354f06916bd5c460c86658869a1d45b4e9771..7b9366f5c365eb6316bc950ea35ebd7b0bf181be 100644
--- a/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt
+++ b/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt
@@ -5,6 +5,8 @@ import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
 import com.atm.bondowowo.R
 import com.atm.bondowowo.data.entity.Transaction
+import com.atm.bondowowo.utils.DialogHelper
+import com.atm.bondowowo.utils.NetworkHelper
 import org.apache.poi.xssf.usermodel.XSSFWorkbook
 import java.io.File
 import java.io.FileOutputStream
@@ -13,6 +15,9 @@ class ExportToFileActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 //        setContentView(R.layout.fragment_transaction)
+        if (!NetworkHelper.isInternetAvailable(this)) {
+            DialogHelper.showNoInternetDialog(this)
+        }
 
         val transactions: ArrayList<Transaction>? = intent.getSerializableExtra("transactions") as? ArrayList<Transaction>
 
diff --git a/app/src/main/java/com/atm/bondowowo/ui/settings/SendEmailActivity.kt b/app/src/main/java/com/atm/bondowowo/ui/settings/SendEmailActivity.kt
index 7ef6c707decbb56ad0661c490cd639a98a4be4c8..b8ce183706bbaeaff1aae177f2306c655772fd88 100644
--- a/app/src/main/java/com/atm/bondowowo/ui/settings/SendEmailActivity.kt
+++ b/app/src/main/java/com/atm/bondowowo/ui/settings/SendEmailActivity.kt
@@ -8,9 +8,8 @@ import androidx.core.content.FileProvider
 import com.atm.bondowowo.R
 import java.io.File
 import android.content.pm.PackageManager
-
-
-
+import com.atm.bondowowo.utils.DialogHelper
+import com.atm.bondowowo.utils.NetworkHelper
 
 
 class SendEmailActivity : AppCompatActivity() {
@@ -19,6 +18,10 @@ class SendEmailActivity : AppCompatActivity() {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.fragment_transaction)
 
+        if (!NetworkHelper.isInternetAvailable(this)) {
+            DialogHelper.showNoInternetDialog(this)
+        }
+
         sendEmailWithAttachment2()
     }
 
diff --git a/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionActivity.kt b/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionActivity.kt
index 5fca1ab151b49696fcf0ab7a6c98254480e09695..96f266eb9a0a1522b3ec129be71bec6249db837d 100644
--- a/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionActivity.kt
+++ b/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionActivity.kt
@@ -5,6 +5,8 @@ import android.os.Bundle
 import androidx.appcompat.app.AppCompatActivity
 import com.atm.bondowowo.MainActivity
 import com.atm.bondowowo.R
+import com.atm.bondowowo.utils.DialogHelper
+import com.atm.bondowowo.utils.NetworkHelper
 
 class TransactionActivity : AppCompatActivity(), TransactionInputFragment.TransactionInputListener {
 
@@ -12,6 +14,10 @@ class TransactionActivity : AppCompatActivity(), TransactionInputFragment.Transa
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_transaction)
 
+        if (!NetworkHelper.isInternetAvailable(this)) {
+            DialogHelper.showNoInternetDialog(this)
+        }
+
         val transactionInputFragment = TransactionInputFragment()
 
         // Get the id passed from the intent
diff --git a/app/src/main/java/com/atm/bondowowo/utils/DialogHelper.kt b/app/src/main/java/com/atm/bondowowo/utils/DialogHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..4d72e281693a50ddd760406813f359c877a44d60
--- /dev/null
+++ b/app/src/main/java/com/atm/bondowowo/utils/DialogHelper.kt
@@ -0,0 +1,18 @@
+package com.atm.bondowowo.utils
+
+import android.app.AlertDialog
+import android.content.Context
+import android.content.DialogInterface
+
+object DialogHelper {
+    fun showNoInternetDialog(context: Context) {
+        val builder = AlertDialog.Builder(context)
+        builder.setTitle("No Internet Connection")
+        builder.setMessage("Please check your internet connection and try again.")
+        builder.setPositiveButton("OK", DialogInterface.OnClickListener { dialog, _ ->
+            dialog.dismiss()
+        })
+        val dialog = builder.create()
+        dialog.show()
+    }
+}
diff --git a/app/src/main/java/com/atm/bondowowo/utils/NetworkHelper.kt b/app/src/main/java/com/atm/bondowowo/utils/NetworkHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..9f55ff3bd4acd5a5a3bb2ce9c891e109a65af8a9
--- /dev/null
+++ b/app/src/main/java/com/atm/bondowowo/utils/NetworkHelper.kt
@@ -0,0 +1,34 @@
+package com.atm.bondowowo.utils
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
+import android.os.Build
+
+object NetworkHelper {
+    fun isInternetAvailable(context: Context): Boolean {
+        var result = false
+        val connectivityManager =
+            context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            connectivityManager?.run {
+                connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)?.run {
+                    result = when {
+                        hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
+                        hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
+                        else -> false
+                    }
+                }
+            }
+        } else {
+            connectivityManager?.run {
+                connectivityManager.activeNetworkInfo?.run {
+                    if (type == ConnectivityManager.TYPE_WIFI || type == ConnectivityManager.TYPE_MOBILE) {
+                        result = true
+                    }
+                }
+            }
+        }
+        return result
+    }
+}