diff --git a/app/src/main/java/com/pbd/psi/LoginActivity.kt b/app/src/main/java/com/pbd/psi/LoginActivity.kt
index 82d883176acdf5dc37c7d646e8f46f3a3e09bbce..57dd6a2d1176857986055bf9080f4caacb4c3f24 100644
--- a/app/src/main/java/com/pbd/psi/LoginActivity.kt
+++ b/app/src/main/java/com/pbd/psi/LoginActivity.kt
@@ -36,11 +36,6 @@ class LoginActivity : AppCompatActivity() {
 
         sharedpreferences = getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE)
 
-        if(!isOnline(this)){
-            Toast.makeText(this, "No internet connection", Toast.LENGTH_SHORT).show()
-            return
-        }
-
         isLogin()
 
         viewModel.loginResult.observe(this) {
@@ -65,6 +60,7 @@ class LoginActivity : AppCompatActivity() {
         }
 
         binding.btnLogin.setOnClickListener{
+            isOnline(this)
             doLogin()
         }
     }
@@ -91,7 +87,7 @@ class LoginActivity : AppCompatActivity() {
         viewModel.loginUser(email, password)
     }
 
-    private fun isOnline(context: Context): Boolean {
+    private fun isOnline(context: Context) {
         val connectivityManager =
             context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
         val capabilities =
@@ -99,16 +95,17 @@ class LoginActivity : AppCompatActivity() {
         if (capabilities != null) {
             if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                 Log.i("Internet", "NetworkCapabilities.TRANSPORT_CELLULAR")
-                return true
+                return
             } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                 Log.i("Internet", "NetworkCapabilities.TRANSPORT_WIFI")
-                return true
+                return
             } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
                 Log.i("Internet", "NetworkCapabilities.TRANSPORT_ETHERNET")
-                return true
+                return
             }
         }
-        return false
+        Toast.makeText(context, "No internet connection", Toast.LENGTH_SHORT).show()
+        return
     }
     private fun isLogin() {
         val token = sharedpreferences.getString(TOKEN, "")
diff --git a/app/src/main/java/com/pbd/psi/MainActivity.kt b/app/src/main/java/com/pbd/psi/MainActivity.kt
index 58c986cfcf27166d6ece31dd6e62707575f4c9d2..3413b39200bc98457d5c0378aa5511d4d80d2455 100644
--- a/app/src/main/java/com/pbd/psi/MainActivity.kt
+++ b/app/src/main/java/com/pbd/psi/MainActivity.kt
@@ -1,9 +1,15 @@
 package com.pbd.psi
-
+import android.content.BroadcastReceiver
+import android.content.Context
 import android.content.Intent
+import android.content.IntentFilter
 import android.content.SharedPreferences
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
 import android.os.Bundle
+import android.util.Log
 import android.view.Menu
+import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
 import androidx.navigation.fragment.NavHostFragment
 import androidx.navigation.ui.setupWithNavController
@@ -22,6 +28,8 @@ class MainActivity : AppCompatActivity() {
     private lateinit var binding: ActivityMainBinding
     private lateinit var sharedpreferences: SharedPreferences
     private lateinit var settingsBinding: FragmentSettingsBinding
+    private lateinit var connectivityManager: ConnectivityManager
+    private lateinit var networkChangeReceiver: BroadcastReceiver
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -31,6 +39,30 @@ class MainActivity : AppCompatActivity() {
 
         sharedpreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE)
 
+        if(!isOnline(this)){
+            val intent = Intent(this, LoginActivity::class.java)
+            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
+            startActivity(intent)
+            finish()
+        }
+
+        // Initialize connectivity manager and network change receiver
+        connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+        networkChangeReceiver = object : BroadcastReceiver() {
+            override fun onReceive(context: Context, intent: Intent) {
+                // Handle network change here, update UI accordingly
+                val networkInfo = connectivityManager.activeNetworkInfo
+                if (networkInfo == null || !networkInfo.isConnected) {
+                    // Network lost, handle accordingly
+                    // For example, show a toast message
+                     showToast("Network connection lost")
+                }
+            }
+        }
+
+        // Register network change receiver
+        registerReceiver(networkChangeReceiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION))
+
         // bottom navbar
         val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation)
         val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment
@@ -48,8 +80,34 @@ class MainActivity : AppCompatActivity() {
 
     override fun onDestroy() {
         super.onDestroy()
+        // Unregister network change receiver to avoid memory leaks
+        unregisterReceiver(networkChangeReceiver)
         val serviceIntent = Intent(this, BackgroundService::class.java)
         stopService(serviceIntent)
     }
 
+    // Function to show toast message
+     private fun showToast(message: String) {
+         Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
+     }
+
+    private fun isOnline(context: Context) : Boolean{
+        val connectivityManager =
+            context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+        val capabilities =
+            connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
+        if (capabilities != null) {
+            if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
+                return true
+            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
+                Log.i("Internet", "NetworkCapabilities.TRANSPORT_WIFI")
+                return true
+            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
+                Log.i("Internet", "NetworkCapabilities.TRANSPORT_ETHERNET")
+                return true
+            }
+        }
+        Toast.makeText(context, "No internet connection", Toast.LENGTH_SHORT).show()
+        return false
+    }
 }
diff --git a/app/src/main/java/com/pbd/psi/ui/no_internet/NotConnectionFragment.kt b/app/src/main/java/com/pbd/psi/ui/no_internet/NotConnectionFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5aae69f0e6148188839558fd82975091f3f9b01e
--- /dev/null
+++ b/app/src/main/java/com/pbd/psi/ui/no_internet/NotConnectionFragment.kt
@@ -0,0 +1,19 @@
+package com.pbd.psi.ui.no_internet
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.pbd.psi.databinding.FragmentNotConnectionBinding
+
+class NotConnectionFragment : Fragment() {
+
+    private lateinit var binding: FragmentNotConnectionBinding
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        binding = FragmentNotConnectionBinding.inflate(layoutInflater)
+        return binding.root
+    }
+}
diff --git a/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt b/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt
index 317087c38a614037a1608b5c1c23517ab9ffc1a9..2a4c07904ff8d0439b28267464ed80a0697cacfb 100644
--- a/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt
+++ b/app/src/main/java/com/pbd/psi/ui/scan/ScanFragment.kt
@@ -7,6 +7,8 @@ import android.content.Intent
 import android.graphics.Bitmap
 import android.graphics.BitmapFactory
 import android.graphics.drawable.BitmapDrawable
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
 import android.net.Uri
 import android.os.Bundle
 import android.provider.MediaStore
@@ -38,6 +40,7 @@ import org.json.JSONObject
 import retrofit2.Call
 import retrofit2.Callback
 import retrofit2.Response
+import androidx.navigation.fragment.findNavController
 import java.io.ByteArrayOutputStream
 
 class ScanFragment : Fragment() {
@@ -71,6 +74,12 @@ class ScanFragment : Fragment() {
         _binding = FragmentScanBinding.inflate(inflater, container, false)
         val root: View = binding.root
 
+        if(!isOnline(requireContext())){
+            findNavController().navigate(com.pbd.psi.R.id.notConnectionFragment)
+            return root
+        }
+
+
         val permissionLauncher = registerForActivityResult(
             ActivityResultContracts.RequestPermission()
         ) { isGranted ->
@@ -101,13 +110,10 @@ class ScanFragment : Fragment() {
             uploadImage()
         }
 
-        val appDatabase = AppDatabase.getDatabase(requireContext())
-        val repository = ScanRepository(appDatabase)
-        val viewModel = ScanViewModel(repository)
-
         return root
     }
 
+
     private fun startCamera() {
         val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext())
         cameraProviderFuture.addListener({
@@ -254,4 +260,25 @@ class ScanFragment : Fragment() {
         }
     }
 
+    private fun isOnline(context: Context): Boolean{
+        val connectivityManager =
+            context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+        val capabilities =
+            connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
+        if (capabilities != null) {
+            if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
+                Log.i("Internet", "NetworkCapabilities.TRANSPORT_CELLULAR")
+                return true
+            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
+                Log.i("Internet", "NetworkCapabilities.TRANSPORT_WIFI")
+                return true
+            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
+                Log.i("Internet", "NetworkCapabilities.TRANSPORT_ETHERNET")
+                return true
+            }
+        }
+        Toast.makeText(context, "No internet connection", Toast.LENGTH_SHORT).show()
+        return false
+    }
+
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt b/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt
index 45cb89834b36606ea5cb23285dc09dd53f4a6c1c..f0978d8a15ea8f865c32f3745e04e665e0bea3cc 100644
--- a/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt
@@ -35,7 +35,7 @@ class SettingsFragment : Fragment() {
             editor.clear()
             editor.apply()
             val intent = Intent(requireActivity(), LoginActivity::class.java)
-            Toast.makeText(requireActivity(), sharedpreferences.getString(EMAIL,""), Toast.LENGTH_SHORT).show()
+            Toast.makeText(requireActivity(), "Success logout", Toast.LENGTH_SHORT).show()
             intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
             startActivity(intent)
             requireActivity().finish()
diff --git a/app/src/main/res/layout/fragment_not_connection.xml b/app/src/main/res/layout/fragment_not_connection.xml
new file mode 100644
index 0000000000000000000000000000000000000000..211055f44451253d27f0c96b280c483c20698cc2
--- /dev/null
+++ b/app/src/main/res/layout/fragment_not_connection.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:orientation="vertical"
+    tools:context=".ui.settings.SettingsFragment"
+    android:paddingHorizontal="24dp"
+    android:background="@color/primaryBlue">
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+        <TextView
+            android:id="@+id/not_connectivity"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:fontFamily="@font/montserrat"
+            android:text="Not Connection"
+            android:textColor="@color/white"
+            android:textSize="20sp"
+            android:layout_marginVertical="8dp"
+            android:layout_gravity="center"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+
+
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index 5cb658833d87a13ca8b3af1bd84070ab1bbb5c5f..9390980446878e549a122538e87efe0b9e13b668 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -29,4 +29,9 @@
         android:name="com.pbd.psi.ui.twibbon.TwibbonFragment"
         android:label="fragment_twibbon"
         tools:layout="@layout/fragment_twibbon" />
+    <fragment
+        android:id="@+id/notConnectionFragment"
+        android:name="com.pbd.psi.ui.no_internet.NotConnectionFragment"
+        android:label="fragment_not_connection"
+        tools:layout="@layout/fragment_not_connection" />
 </navigation>
\ No newline at end of file