diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6af41e4fa34f937edf91380e09889c5b58b90660..fdb9b01539681a4b95909795555e96fe9797427f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -10,6 +10,8 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+
 
     <application
         android:name=".BondomanApp"
diff --git a/app/src/main/java/com/example/bondoman/ui/hub/scan/NetworkManager.kt b/app/src/main/java/com/example/bondoman/ui/hub/scan/NetworkManager.kt
new file mode 100644
index 0000000000000000000000000000000000000000..efa52868be3c43cde19c2ab1d0a2ceded5264c93
--- /dev/null
+++ b/app/src/main/java/com/example/bondoman/ui/hub/scan/NetworkManager.kt
@@ -0,0 +1,46 @@
+package com.example.bondoman.ui.hub.scan
+
+import android.content.Context
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkRequest
+import com.example.bondoman.viewmodel.scan.ScanViewModel
+
+class NetworkManager(private val context: Context, private val viewModel: ScanViewModel) :
+    ConnectivityManager.NetworkCallback() {
+    private val connectivityManager: ConnectivityManager by lazy {
+        context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+    }
+
+    private fun isConnected(): Boolean = connectivityManager.activeNetworkInfo != null
+
+    private fun updateViewModel() {
+        viewModel.isCameraBtnEnabled.postValue(isConnected())
+        viewModel.isSelectBtnEnabled.postValue(isConnected())
+        viewModel.showSnackbar.postValue(!isConnected())
+    }
+
+    fun activate() {
+        updateViewModel()
+
+        connectivityManager.registerNetworkCallback(
+            NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
+                .addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(), this
+        )
+    }
+
+    fun deactivate() {
+        connectivityManager.unregisterNetworkCallback(this)
+    }
+
+    override fun onLost(network: Network) {
+        super.onLost(network)
+        updateViewModel()
+    }
+
+    override fun onAvailable(network: Network) {
+        super.onAvailable(network)
+        updateViewModel()
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/ui/hub/scan/ScanFragment.kt b/app/src/main/java/com/example/bondoman/ui/hub/scan/ScanFragment.kt
index 7cf78242d83b2fcfabf2cdb9c5eb8ab873a6de81..0c04485019659a207442a2f500f206677a6b3ddf 100644
--- a/app/src/main/java/com/example/bondoman/ui/hub/scan/ScanFragment.kt
+++ b/app/src/main/java/com/example/bondoman/ui/hub/scan/ScanFragment.kt
@@ -32,6 +32,7 @@ import com.example.bondoman.databinding.FragmentScanBinding
 import com.example.bondoman.services.SessionManager
 import com.example.bondoman.viewmodel.scan.ScanViewModel
 import com.example.bondoman.viewmodel.scan.ScanViewModelFactory
+import com.google.android.material.snackbar.Snackbar
 import okhttp3.MediaType
 import okhttp3.RequestBody
 import java.io.ByteArrayOutputStream
@@ -48,6 +49,9 @@ class ScanFragment : Fragment() {
 
     private lateinit var sessionManager: SessionManager
     private val scanDialog: ScanDialogFragment = ScanDialogFragment()
+    private lateinit var networkManager: NetworkManager
+
+    private lateinit var snackbar: Snackbar
 
     private val activityResultLauncher = registerForActivityResult(
         ActivityResultContracts.RequestPermission()
@@ -75,6 +79,22 @@ class ScanFragment : Fragment() {
         }
     }
 
+    private val cameraBtnObserver = Observer<Boolean> {
+        binding.imageCaptureButton.isEnabled = it
+    }
+
+    private val selectBtnObserver = Observer<Boolean> {
+        binding.selectPhotoButton.isEnabled = it
+    }
+
+    private val snackbarObserver = Observer<Boolean> {
+        if (it && this::snackbar.isInitialized) {
+            snackbar.show()
+        } else if (!it && this::snackbar.isInitialized) {
+            snackbar.dismiss()
+        }
+    }
+
     companion object {
         private const val TAG = "ScanFragment"
         private const val CAMERA_PERMISSION = Manifest.permission.CAMERA
@@ -93,10 +113,28 @@ class ScanFragment : Fragment() {
         scanViewModel.isCameraPermissionGranted.observe(
             viewLifecycleOwner, cameraPermissionObserver
         )
+        scanViewModel.isSelectBtnEnabled.observe(
+            viewLifecycleOwner, cameraBtnObserver
+        )
+        scanViewModel.isSelectBtnEnabled.observe(
+            viewLifecycleOwner, selectBtnObserver
+        )
+        scanViewModel.showSnackbar.observe(
+            viewLifecycleOwner, snackbarObserver
+        )
 
         binding.imageCaptureButton.setOnClickListener(::onImageCaptureClick)
         binding.selectPhotoButton.setOnClickListener(::onSelectPhotoClick)
 
+        snackbar = Snackbar.make(
+            requireActivity().findViewById(android.R.id.content),
+            getString(R.string.connection_lost),
+            Snackbar.LENGTH_INDEFINITE
+        )
+
+        networkManager = NetworkManager(requireContext(), scanViewModel)
+        networkManager.activate()
+
         cameraExecutor = Executors.newSingleThreadExecutor()
         sessionManager = SessionManager(requireActivity())
 
@@ -122,10 +160,12 @@ class ScanFragment : Fragment() {
 
     override fun onDestroyView() {
         super.onDestroyView()
+        networkManager.deactivate()
         cameraExecutor.shutdown()
     }
 
 
+    @Deprecated("")
     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
         if (requestCode == 1) {
             val image = data?.data
diff --git a/app/src/main/java/com/example/bondoman/viewmodel/scan/ScanViewModel.kt b/app/src/main/java/com/example/bondoman/viewmodel/scan/ScanViewModel.kt
index 6388817829373a27f7b4739be89db647d12db0ec..7cb3760e3325ae673b4e017d68a91cda1ebf36f0 100644
--- a/app/src/main/java/com/example/bondoman/viewmodel/scan/ScanViewModel.kt
+++ b/app/src/main/java/com/example/bondoman/viewmodel/scan/ScanViewModel.kt
@@ -8,6 +8,9 @@ import okhttp3.RequestBody
 
 class ScanViewModel(private val repository: TransactionRepository) : ViewModel() {
     val isCameraPermissionGranted = MutableLiveData(false)
+    val isCameraBtnEnabled = MutableLiveData(false)
+    val isSelectBtnEnabled = MutableLiveData(false)
+    val showSnackbar = MutableLiveData(false)
 
     suspend fun uploadNota(imageReqBody: RequestBody, token: String): List<TransactionEntity> {
         return repository.postUploadNota(imageReqBody, token)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b1c61b468ea5a87f6ba1e1fe76a8492890de43bb..a1aaa41b9829917e02c3f4b87972195917cea65f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -76,6 +76,8 @@
     <string name="get_latest_location">Get latest location</string>
     <string name="delete_location">Delete location</string>
     <string name="no_location_data">No location data</string>
+
+    <string name="connection_lost">Connection Lost</string>
     <string name="type_your_email">Type your email...</string>
     <string name="type_your_password">Type your password...</string>
     <string name="type_transaction_title">Type transaction title...</string>