diff --git a/bondoman/app/build.gradle.kts b/bondoman/app/build.gradle.kts
index cea3e25506803501e9b55df62bebc67cb2c05a60..8c20d05f24cff94ec9de2420d3699a4106040f47 100644
--- a/bondoman/app/build.gradle.kts
+++ b/bondoman/app/build.gradle.kts
@@ -53,6 +53,7 @@ dependencies {
     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9")
     implementation("androidx.room:room-ktx:2.6.1")
     implementation("androidx.room:room-common:2.6.1")
+    implementation ("com.google.android.gms:play-services-location:18.0.0")
     kapt("androidx.room:room-compiler:2.6.1")
     testImplementation("junit:junit:4.13.2")
     androidTestImplementation("androidx.test.ext:junit:1.1.5")
diff --git a/bondoman/app/src/main/AndroidManifest.xml b/bondoman/app/src/main/AndroidManifest.xml
index 8c247b9c0976e8c5eb0f3e6e0a7e2252ebd84faf..46489d07c6392a30b1dd5c169103b33b3de2a672 100644
--- a/bondoman/app/src/main/AndroidManifest.xml
+++ b/bondoman/app/src/main/AndroidManifest.xml
@@ -9,6 +9,8 @@
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 
     <application
         android:allowBackup="true"
diff --git a/bondoman/app/src/main/java/com/example/bondoman/AddTransactionPage.kt b/bondoman/app/src/main/java/com/example/bondoman/AddTransactionPage.kt
index e1b5be27b436195d6a1eb1e3f2b3be17d02d7fe0..da4ce6081dc0c8ed4268ba2680af8aec8af0ea28 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/AddTransactionPage.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/AddTransactionPage.kt
@@ -1,9 +1,18 @@
 package com.example.bondoman
 
+import android.annotation.SuppressLint
 import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Intent
 import android.content.IntentFilter
+import android.content.pm.PackageManager
+import android.Manifest
+import android.location.Address
+import android.location.Geocoder
+import android.provider.Settings
+import android.location.Location
+import androidx.core.content.ContextCompat
+import android.location.LocationManager
 import android.os.Bundle
 import android.util.Log
 import android.view.View
@@ -12,16 +21,21 @@ import android.widget.Button
 import android.widget.EditText
 import android.widget.RadioButton
 import android.widget.RadioGroup
-import androidx.core.content.ContentProviderCompat
+import android.widget.Toast
+import androidx.constraintlayout.motion.widget.Debug.getLocation
+import androidx.core.app.ActivityCompat
+import androidx.core.location.LocationManagerCompat.requestLocationUpdates
 import androidx.fragment.app.FragmentTransaction
 import androidx.localbroadcastmanager.content.LocalBroadcastManager
-import com.example.bondoman.retrofit.Retrofit
-import com.example.bondoman.retrofit.endpoint.EndpointCheckExpiry
-import com.example.bondoman.retrofit.request.CheckExpiryRequest
 import com.example.bondoman.room.Transaction
 import com.example.bondoman.room.TransactionDB
 import com.example.bondoman.utils.AuthManager
 import com.example.bondoman.utils.RandomizeTransaction
+import com.google.android.gms.location.FusedLocationProviderClient
+import com.google.android.gms.location.LocationCallback
+import com.google.android.gms.location.LocationRequest
+import com.google.android.gms.location.LocationResult
+import com.google.android.gms.location.LocationServices
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
@@ -53,7 +67,11 @@ class AddTransactionPage : Fragment(R.layout.fragment_add_transaction) {
     private lateinit var field_kategori: RadioGroup
     private lateinit var field_lokasi: EditText
     private lateinit var back_add: Button
+    private lateinit var curr_loc: Button
     val db by lazy { TransactionDB(requireContext()) }
+    private lateinit var fusedLocationClient: FusedLocationProviderClient
+    private val permissionId = 123
+
 
     private val randomizeReceiver = RandomizeTransaction()
 
@@ -66,6 +84,10 @@ class AddTransactionPage : Fragment(R.layout.fragment_add_transaction) {
         field_kategori = view.findViewById(R.id.field_kategori) as RadioGroup
         field_lokasi = view.findViewById(R.id.field_lokasi) as EditText
         back_add = view.findViewById(R.id.back_add)
+        curr_loc = view.findViewById(R.id.curr_loc)
+        fusedLocationClient = LocationServices.getFusedLocationProviderClient(requireContext())
+
+        requestLocationUpdates()
 
         if (RandomizeTransaction.shouldRandomizePrice) field_nominal.setText(RandomizeTransaction.randomPrice.toString())
         setUpListener()
@@ -86,7 +108,104 @@ class AddTransactionPage : Fragment(R.layout.fragment_add_transaction) {
         LocalBroadcastManager.getInstance(requireContext()).unregisterReceiver(randomizeReceiver)
     }
 
+    @SuppressLint("MissingPermission", "SetTextI18n")
+    private fun getLocation() {
+        if (checkPermissions()) {
+            Log.d("Address", "check permission ok")
+            if (isLocationEnabled()) {
+                Log.d("Address", "location ok")
+                fusedLocationClient.lastLocation.addOnCompleteListener(requireActivity()) { task ->
+                    val location: Location? = task.result
+//                    Log.d("Address", "Task: ${task.result}")
+                    if (location != null) {
+//                        Log.d("Address", "check location not null ok")
+                        val geocoder = Geocoder(requireContext(), Locale.getDefault())
+                        val list: List<Address>? =
+                            geocoder.getFromLocation(location.latitude, location.longitude, 1)
+                        if (list != null && list.isNotEmpty()) {
+//                            Log.d("Address", "check not empty ok")
+                            val address = list[0]
+                            view?.apply {
+                                field_lokasi.setText(address.getAddressLine(0))
+//                                Log.d("Address", "Latitdue:  ${address.latitude}")
+                                Log.d("Address", "Lokasi:  ${address.getAddressLine(0)}")
+                            }
+                        } else {
+//                            Log.d("Address", "gapunya permission ok")
+                            Toast.makeText(requireContext(), "Address not found", Toast.LENGTH_SHORT).show()
+                        }
+                    }
+                }
+            } else {
+                Log.d("Address", "chayon ok")
+                Toast.makeText(requireContext(), "Please turn on location", Toast.LENGTH_LONG).show()
+                val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
+                startActivity(intent)
+            }
+        } else {
+            Log.d("Address", "clohk")
+            requestPermissions()
+        }
+    }
+
+    private fun checkPermissions(): Boolean {
+        return (ContextCompat.checkSelfPermission(
+            requireContext(),
+            Manifest.permission.ACCESS_COARSE_LOCATION
+        ) == PackageManager.PERMISSION_GRANTED &&
+                ContextCompat.checkSelfPermission(
+                    requireContext(),
+                    Manifest.permission.ACCESS_FINE_LOCATION
+                ) == PackageManager.PERMISSION_GRANTED)
+    }
+
+    private fun requestPermissions() {
+        requestPermissions(
+            arrayOf(
+                Manifest.permission.ACCESS_COARSE_LOCATION,
+                Manifest.permission.ACCESS_FINE_LOCATION
+            ),
+            permissionId
+        )
+    }
+
+    override fun onRequestPermissionsResult(
+        requestCode: Int,
+        permissions: Array<String>,
+        grantResults: IntArray
+    ) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+        if (requestCode == permissionId) {
+            if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
+                getLocation()
+            }
+        }
+    }
 
+    @SuppressLint("MissingPermission")
+    private fun requestLocationUpdates() {
+        val locationRequest = LocationRequest.create()?.apply {
+            interval = 10000 // Update interval in milliseconds
+            fastestInterval = 5000 // Fastest update interval in milliseconds
+            priority = LocationRequest.PRIORITY_HIGH_ACCURACY
+        }
+
+        fusedLocationClient.requestLocationUpdates(locationRequest, object : LocationCallback() {
+            override fun onLocationResult(locationResult: LocationResult?) {
+                locationResult ?: return
+                for (location in locationResult.locations) {
+                    // Handle location updates here
+                    Log.d("Location", "New Location: ${location.latitude}, ${location.longitude}")
+                }
+            }
+        }, null)
+    }
+    private fun isLocationEnabled(): Boolean {
+        val locationManager = requireContext().getSystemService(Context.LOCATION_SERVICE) as LocationManager
+        return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(
+            LocationManager.NETWORK_PROVIDER
+        )
+    }
 
     private fun setUpListener() {
         add_button.setOnClickListener {
@@ -134,6 +253,12 @@ class AddTransactionPage : Fragment(R.layout.fragment_add_transaction) {
                 .replace(R.id.frame_layout, transactionPageFragment)
                 .commit()
         }
+
+        curr_loc.setOnClickListener {
+            getLocation()
+            Log.d("Button", "udah di klik")
+        }
+
     }
 
     override fun onDestroyView() {
diff --git a/bondoman/app/src/main/java/com/example/bondoman/EditPage.kt b/bondoman/app/src/main/java/com/example/bondoman/EditPage.kt
index c47388416a97655793db2954421b3773d336d1ab..df0e984a27d71e54682d749f244750d91ca927d3 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/EditPage.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/EditPage.kt
@@ -51,6 +51,7 @@ private lateinit var db: TransactionDB
     }
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
+
         update_button = view.findViewById(R.id.update_button)
         delete_button = view.findViewById(R.id.delete_button)
         field_judul = view.findViewById(R.id.field_judul) as EditText
@@ -92,7 +93,6 @@ private lateinit var db: TransactionDB
 
     fun setUpListener(){
         update_button.setOnClickListener {
-            if (isNetworkAvailable()) {
                 CoroutineScope(Dispatchers.IO).launch {
                     val transaction = db.transactionDao().findIdTrans(idTrans)
                     if (transaction != null) {
@@ -112,17 +112,12 @@ private lateinit var db: TransactionDB
                         }
                     } else {
                         Log.d("EditPage", "Transaction not found for id: $idTrans")
-                    }
                 }
-            } else {
-                Log.d("EditPage", "Network not available. Cannot update transaction.")
-                Toast.makeText(requireContext(), "Prikso jaringan internet sampeyan", Toast.LENGTH_SHORT).show()
             }
         }
 
 
         delete_button.setOnClickListener {
-            if (isNetworkAvailable()) {
                 CoroutineScope(Dispatchers.IO).launch {
                     val transaction = db.transactionDao().findIdTrans(idTrans)
                     if (transaction != null) {
@@ -135,11 +130,7 @@ private lateinit var db: TransactionDB
                         Log.d("EditPage", "Transaction not found for id: $idTrans")
                     }
                 }
-            } else {
-                Log.d("EditPage", "Network not available. Cannot delete transaction.")
-                Toast.makeText(requireContext(), "Prikso jaringan internet sampeyan", Toast.LENGTH_SHORT).show()
             }
-        }
 
         back_edit.setOnClickListener {
             navigateBackToTransactionPage()
@@ -152,12 +143,7 @@ private lateinit var db: TransactionDB
         requireActivity().supportFragmentManager.beginTransaction()
             .replace(R.id.frame_layout, transactionPageFragment)
             .commit()    }
-    private fun isNetworkAvailable(): Boolean {
-        val connectivityManager = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
-        val networkCapabilities = connectivityManager.activeNetwork ?: return false
-        val networkInfo = connectivityManager.getNetworkCapabilities(networkCapabilities)
-        return networkInfo != null && networkInfo.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
-    }
+
 
 
 
diff --git a/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt b/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt
index 3db88f4e8e118477a3f2ef0fb84531ead1ac450b..4bf169159f7941f6749787a3790b4d1a3cd13548 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/MainActivity.kt
@@ -1,5 +1,6 @@
 package com.example.bondoman
 
+import android.app.AlertDialog
 import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Intent
@@ -10,6 +11,7 @@ import android.os.Build
 import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
 import android.util.Log
+import android.widget.Button
 import android.widget.Toast
 import androidx.core.content.ContentProviderCompat.requireContext
 import com.example.bondoman.databinding.ActivityMainBinding
@@ -27,12 +29,12 @@ import java.util.Base64
 
 class MainActivity : AppCompatActivity() {
     lateinit var binding: ActivityMainBinding
-    private val db by lazy { TransactionDB(this) }
-    private lateinit var transactionRepository: TransactionRepository
 
-    private val networkChangeReceiver = object : BroadcastReceiver() {
+    private val networkStatusReceiver = object : BroadcastReceiver() {
         override fun onReceive(context: Context?, intent: Intent?) {
-            checkNetworkAndLoadTransactions()
+            if (!isNetworkAvailable()) {
+                showLostConnectionDialog()
+            }
         }
     }
 
@@ -48,7 +50,8 @@ class MainActivity : AppCompatActivity() {
 
         binding.bottomNavigationView.setOnNavigationItemSelectedListener { menuItem ->
             when (menuItem.itemId) {
-                R.id.scan_cam -> replaceFragment(ScanPage(), HeaderScan())
+                R.id.scan_cam -> {if(!isNetworkAvailable()){replaceFragment(NetworkLostPage(), HeaderScan())}
+                            else{replaceFragment(ScanPage(), HeaderScan())}}
                 R.id.graph -> replaceFragment(GraphPage(), HeaderGraf())
                 R.id.settings -> replaceFragment(SettingsPage(), HeaderSettings())
                 R.id.bill -> replaceFragment(TransactionPage(), HeaderTransaction())
@@ -58,62 +61,21 @@ class MainActivity : AppCompatActivity() {
         }
     }
 
-    override fun onStart() {
-        super.onStart()
-        registerNetworkChangeReceiver()
-        checkNetworkAndLoadTransactions()
-    }
-
-    override fun onStop() {
-        super.onStop()
-        unregisterNetworkChangeReceiver()
-    }
-
-    private fun registerNetworkChangeReceiver() {
-        registerReceiver(networkChangeReceiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION))
-    }
-
-    private fun unregisterNetworkChangeReceiver() {
-        unregisterReceiver(networkChangeReceiver)
-    }
-
-    private fun checkNetworkAndLoadTransactions() {
+    private fun isNetworkAvailable(): Boolean {
         val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
-        val networkCapabilities = connectivityManager.activeNetwork ?: return
+        val networkCapabilities = connectivityManager.activeNetwork ?: return false
         val networkInfo = connectivityManager.getNetworkCapabilities(networkCapabilities)
-
-        if (networkInfo != null && networkInfo.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
-            loadTransactions()
-        } else {
-            Toast.makeText(this, "Koneksimu ilang. Nuduhake cache tumbas.", Toast.LENGTH_SHORT).show()
-            loadCachedTransactions()
-        }
+        return networkInfo != null && networkInfo.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
     }
 
-    private fun loadTransactions() {
-        transactionRepository = TransactionRepositoryImplement(db.transactionDao(), this)
-        transactionRepository.setNIM()
-        CoroutineScope(Dispatchers.IO).launch {
-            try {
-                val transc = transactionRepository.getAllTransactions()
-                Log.d("MainActivity", "dbResponse: $transc")
-            } catch (e: Exception) {
-                Log.e("MainActivity", "Error loading transactions: ${e.message}")
-            }
-        }
+    override fun onStart() {
+        super.onStart()
+        registerReceiver(networkStatusReceiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION))
     }
 
-    private fun loadCachedTransactions() {
-        transactionRepository = TransactionRepositoryImplement(db.transactionDao(), this)
-        transactionRepository.setNIM()
-        CoroutineScope(Dispatchers.IO).launch {
-            try {
-                val transc = transactionRepository.getAllTransactions()
-                Log.d("MainActivity", "Cached transactions: $transc")
-            } catch (e: Exception) {
-                Log.e("MainActivity", "Error loading cached transactions: ${e.message}")
-            }
-        }
+    override fun onStop() {
+        super.onStop()
+        unregisterReceiver(networkStatusReceiver)
     }
 
     fun replaceFragment(fragment: Fragment, header: Fragment) {
@@ -127,4 +89,21 @@ class MainActivity : AppCompatActivity() {
 
         supportFragmentManager.executePendingTransactions()
     }
+
+    fun showLostConnectionDialog(){
+        val builder = AlertDialog.Builder(this)
+        val inflater = layoutInflater
+        val dialogView = inflater.inflate(R.layout.dialog_network_lost, null)
+
+        val tryAgainButton = dialogView.findViewById<Button>(R.id.close_popup)
+        builder.setView(dialogView)
+
+        val dialog = builder.create()
+        dialog.show()
+
+        tryAgainButton.setOnClickListener {
+            dialog.dismiss()
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/bondoman/app/src/main/java/com/example/bondoman/NetworkLostPage.kt b/bondoman/app/src/main/java/com/example/bondoman/NetworkLostPage.kt
new file mode 100644
index 0000000000000000000000000000000000000000..c6f787372d772b9fe52a5b5e1cde7daa4d18a50f
--- /dev/null
+++ b/bondoman/app/src/main/java/com/example/bondoman/NetworkLostPage.kt
@@ -0,0 +1,44 @@
+package com.example.bondoman
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+
+class NetworkLostPage : Fragment() {
+    // TODO: Rename and change types of parameters
+    private lateinit var back_transc: Button
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.fragment_network_lost_page, container, false)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        back_transc = view.findViewById(R.id.back_transc)
+
+        setUpListener()
+    }
+
+    fun setUpListener(){
+        back_transc.setOnClickListener {
+            val transactionPageFragment = TransactionPage()
+            requireActivity().supportFragmentManager.beginTransaction()
+                .replace(R.id.frame_layout, transactionPageFragment)
+                .commit()
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt b/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt
index 575da536a2a278fde4d86131826591b277d4d462..9a61635054660cc79558e1566dd2f91f2c256658 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/ScanPage.kt
@@ -2,10 +2,13 @@ package com.example.bondoman
 
 import android.app.Activity
 import android.content.ContentValues
+import android.content.Context
 import android.content.Intent
 import android.content.pm.PackageManager
 import android.graphics.Bitmap
 import android.graphics.Matrix
+import android.net.ConnectivityManager
+import android.net.NetworkCapabilities
 import android.net.Uri
 import android.os.Build
 import android.os.Bundle
@@ -247,60 +250,72 @@ class ScanPage : Fragment() {
     }
 
     private fun sendImageToAPI(pathname: String) {
-        val token = getToken(requireContext())
-        Log.d("Scan", "Token: $token")
+        if(isNetworkAvailable()) {
 
-        val retro = Retrofit.getInstance().create(EndpointScan::class.java)
-        Log.d("Scan", "pathname: ${pathname}")
+            val token = getToken(requireContext())
+            Log.d("Scan", "Token: $token")
 
-        val file = File(pathname)
-        val requestBody = RequestBody.create(MediaType.parse("image/jpeg"), file)
-        val filePart = MultipartBody.Part.createFormData("file", file.name, requestBody)
-        Log.d("Scan", "filePart: ${filePart}")
+            val retro = Retrofit.getInstance().create(EndpointScan::class.java)
+            Log.d("Scan", "pathname: ${pathname}")
 
-        Toast.makeText(requireContext(), "Mroses gambar..", Toast.LENGTH_SHORT).show()
+            val file = File(pathname)
+            val requestBody = RequestBody.create(MediaType.parse("image/jpeg"), file)
+            val filePart = MultipartBody.Part.createFormData("file", file.name, requestBody)
+            Log.d("Scan", "filePart: ${filePart}")
 
-        lifecycleScope.launch {
-            try {
-                val response = retro.scan("Bearer $token", filePart)
-                Log.d("Scan", "Response: ${response}")
-                if (response.isSuccessful) {
-                    val data = response.body()
-                    if (data != null) {
+            Toast.makeText(requireContext(), "Mroses gambar..", Toast.LENGTH_SHORT).show()
+
+            lifecycleScope.launch {
+                try {
+                    val response = retro.scan("Bearer $token", filePart)
+                    Log.d("Scan", "Response: ${response}")
+                    if (response.isSuccessful) {
+                        val data = response.body()
+                        if (data != null) {
 //                        Log.d("Scan", "Success: ${data.items}")
 //                        Log.d("Scan", "Success: ${data}")
 
-                        val items = data.items.items
+                            val items = data.items.items
 //                        val singleItem = listOf(items)
-                        val cleanedItems = mutableListOf<Item>()
-                        for (item in items) {
-                            val name = item.name
+                            val cleanedItems = mutableListOf<Item>()
+                            for (item in items) {
+                                val name = item.name
 //                            Log.d("Scan", "Name: $name")
-                            val price = item.price
+                                val price = item.price
 //                            Log.d("Scan", "Price: $price")
-                            val qty = item.qty
+                                val qty = item.qty
 //                            Log.d("Scan", "Qty: $qty")
 
-                            val newItem = Item(name, qty, price)
-                            cleanedItems.add(newItem)
+                                val newItem = Item(name, qty, price)
+                                cleanedItems.add(newItem)
+                            }
+                            addToDatabase(cleanedItems)
+                        }
+                    } else {
+                        val errorBody = response.errorBody()?.string()
+                        if (!errorBody.isNullOrEmpty()) {
+                            val errorMessage = errorBody
+                            Toast.makeText(requireContext(), errorMessage, Toast.LENGTH_SHORT)
+                                .show()
                         }
-                        addToDatabase(cleanedItems)
-                }
-                }
-                else {
-                    val errorBody = response.errorBody()?.string()
-                    if (!errorBody.isNullOrEmpty()) {
-                        val errorMessage = errorBody
-                        Toast.makeText(requireContext(), errorMessage, Toast.LENGTH_SHORT).show()
                     }
-                }
 
-            }
-            catch (e: java.lang.Exception){
-                Log.e("Scan", "Error: ${e.message}")
-                Toast.makeText(requireContext(), "Ana sing salah: ${e.message}", Toast.LENGTH_SHORT).show()
+                } catch (e: java.lang.Exception) {
+                    Log.e("Scan", "Error: ${e.message}")
+                    Toast.makeText(
+                        requireContext(),
+                        "Ana sing salah: ${e.message}",
+                        Toast.LENGTH_SHORT
+                    ).show()
+                }
             }
         }
+        else{
+            val networkLostFragment = NetworkLostPage()
+            requireActivity().supportFragmentManager.beginTransaction()
+                .replace(R.id.frame_layout, networkLostFragment)
+                .commit()
+        }
 
     }
 
@@ -353,6 +368,13 @@ class ScanPage : Fragment() {
             }
         }
     }
+    fun isNetworkAvailable(): Boolean {
+        val connectivityManager = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+        val networkCapabilities = connectivityManager.activeNetwork ?: return false
+        val networkInfo = connectivityManager.getNetworkCapabilities(networkCapabilities)
+
+        return networkInfo != null && networkInfo.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
+    }
 
     override fun onDestroyView() {
         super.onDestroyView()
diff --git a/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt b/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt
index 229367fdf0113c868924f72edeef161feb7fa499..326e196fd914e7abcdd1e72cfb059c8d884b13ac 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/SettingsPage.kt
@@ -40,6 +40,7 @@ class SettingsPage : Fragment() {
     private val randomizeReceiver = RandomizeTransaction()
 
 
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
     }
diff --git a/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt b/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt
index 60340ee120747f8ae7081a46aa29698864cc06e8..8b461df0380eb25b3fd7543425c1cc0d0373daf8 100644
--- a/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt
+++ b/bondoman/app/src/main/java/com/example/bondoman/TransactionPage.kt
@@ -13,6 +13,7 @@ import android.view.ViewGroup
 import android.widget.Button
 import android.widget.TextView
 import android.widget.Toast
+import androidx.core.content.ContentProviderCompat.requireContext
 import androidx.fragment.app.FragmentTransaction
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.RecyclerView
@@ -65,7 +66,6 @@ class TransactionPage : Fragment(R.layout.fragment_transaction_page), Transactio
         recyclerView.requestLayout()
 
         lifecycleScope.launch {
-            if (isNetworkAvailable()) {
                 val transactions = withContext(Dispatchers.IO) {
                     transactionRepository.getAllTransactions()
                 }
@@ -83,20 +83,12 @@ class TransactionPage : Fragment(R.layout.fragment_transaction_page), Transactio
 
                 recyclerView.adapter = TransactionAdapter(transactions, this@TransactionPage)
                 Log.d("TransactionPage", "recyclerView: ${recyclerView.adapter}")
-            } else {
-                Toast.makeText(requireContext(), "Koneksimu ilang. Nuduhake cahce tumbas.", Toast.LENGTH_SHORT).show()
-                loadCachedTransactions()
-            }
         }
 
         button.setOnClickListener {
-            if (isNetworkAvailable()) {
                 val fragment = AddTransactionPage()
                 val transaction : FragmentTransaction = requireFragmentManager().beginTransaction()
                 transaction.replace(R.id.frame_layout, fragment).commit()
-            } else {
-                Toast.makeText(requireContext(), "Koneksimu ilang. Ora isa nambahke tumbas.", Toast.LENGTH_SHORT).show()
-            }
         }
     }
     fun saldo(list : List<Transaction>) : Double {
@@ -137,48 +129,5 @@ class TransactionPage : Fragment(R.layout.fragment_transaction_page), Transactio
             .commit()
     }
 
-    fun isNetworkAvailable(): Boolean {
-        val connectivityManager = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
-        val networkCapabilities = connectivityManager.activeNetwork ?: return false
-        val networkInfo = connectivityManager.getNetworkCapabilities(networkCapabilities)
-
-        return networkInfo != null && networkInfo.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
-    }
-
-    fun loadCachedTransactions() {
-        transactionRepository = TransactionRepositoryImplement(db.transactionDao(), requireContext())
-        transactionRepository.setNIM()
-        lifecycleScope.launch {
-            try {
-                val transactions = withContext(Dispatchers.IO) {
-                    transactionRepository.getAllTransactions()
-                }
-                Log.d("TransactionPage", "Cached transactions: $transactions")
-
-                // Update UI on the main thread
-                withContext(Dispatchers.Main) {
-                    updateUI(transactions)
-                }
-            } catch (e: Exception) {
-                Log.e("TransactionPage", "Error loading cached transactions: ${e.message}")
-            }
-        }
-    }
-
-    private fun updateUI(transactions: List<Transaction>) {
-        val saldoText : TextView = requireView().findViewById<TextView>(R.id.duit)
-        val recyclerView: RecyclerView = requireView().findViewById(R.id.recyclerViewTransaction)
-
-        val balance = saldo(transactions)
-        val text: String = if (balance >= 0) {
-            "Rp${balance.convert()}"
-        } else {
-            "-Rp${balance.convert().substring(1)}"
-        }
-
-        saldoText.text = text
-
-        recyclerView.adapter = TransactionAdapter(transactions, this@TransactionPage)
-    }
 
 }
\ No newline at end of file
diff --git a/bondoman/app/src/main/res/drawable/baseline_close_24.xml b/bondoman/app/src/main/res/drawable/baseline_close_24.xml
new file mode 100644
index 0000000000000000000000000000000000000000..844b6b62ef1077c2d7e9c80107ebf7f47b432caf
--- /dev/null
+++ b/bondoman/app/src/main/res/drawable/baseline_close_24.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
+</vector>
diff --git a/bondoman/app/src/main/res/drawable/ic_launcher.png b/bondoman/app/src/main/res/drawable/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..c525deb85570540669160d5f0bfd2f323ec4143a
Binary files /dev/null and b/bondoman/app/src/main/res/drawable/ic_launcher.png differ
diff --git a/bondoman/app/src/main/res/drawable/network_lost.png b/bondoman/app/src/main/res/drawable/network_lost.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c8e83f51b937b4c774786bbb0b349d18cdab23d
Binary files /dev/null and b/bondoman/app/src/main/res/drawable/network_lost.png differ
diff --git a/bondoman/app/src/main/res/layout/dialog_network_lost.xml b/bondoman/app/src/main/res/layout/dialog_network_lost.xml
new file mode 100644
index 0000000000000000000000000000000000000000..900fed3d7cf66d3e80d0fcb8e171700031bd5cb3
--- /dev/null
+++ b/bondoman/app/src/main/res/layout/dialog_network_lost.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:background="@drawable/custom_popup"
+    android:padding="16dp"
+    >
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:id="@+id/dialogLayout"
+        android:orientation="vertical"
+        >
+
+        <Button
+            android:id="@+id/close_popup"
+            android:layout_width="30dp"
+            android:layout_height="30dp"
+            android:background="@drawable/baseline_close_24"
+            android:layout_gravity="right"/>
+        <ImageView
+            android:id="@+id/img_lost"
+            android:layout_width="100dp"
+            android:layout_height="100dp"
+            android:layout_gravity="center"
+            android:src="@drawable/network_lost"/>
+
+        <TextView
+            android:id="@+id/dialogTitle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/lost_network"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:textColor="@color/secondary"
+            android:fontFamily="@font/font_poppins"
+            android:layout_marginTop="16dp"
+            android:layout_gravity="center_horizontal"/>
+
+    </LinearLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/bondoman/app/src/main/res/layout/fragment_add_transaction.xml b/bondoman/app/src/main/res/layout/fragment_add_transaction.xml
index 8aef2e4ab82373a508961322e21b8d230c5b0018..1356715d8ca12fc65c628f46690f47a10ce550f6 100644
--- a/bondoman/app/src/main/res/layout/fragment_add_transaction.xml
+++ b/bondoman/app/src/main/res/layout/fragment_add_transaction.xml
@@ -79,7 +79,7 @@
                 android:background="@drawable/custom_field"
                 android:fontFamily="@font/font_poppins"
                 android:hint="Masukkan judul nominal transaksi Anda"
-                android:inputType="text"
+                android:inputType="number"
                 android:padding="12sp"
                 android:textSize="14sp"
                 app:layout_constraintEnd_toEndOf="parent"
@@ -166,8 +166,26 @@
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@id/label_lokasi" />
 
+
         </androidx.constraintlayout.widget.ConstraintLayout>
 
+        <Button
+            android:id="@+id/curr_loc"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="1dp"
+            android:background="@android:color/transparent"
+            android:fontFamily="@font/font_poppins"
+            android:textColor="@color/button"
+            android:text="Nggunakake lokasiku saiki"
+            android:textAllCaps="false"
+            app:layout_constraintBottom_toTopOf="@+id/add_button"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintHorizontal_bias="0.136"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/constraintLayout"
+            app:layout_constraintVertical_bias="0.0" />
+
         <Button
             android:id="@+id/add_button"
             android:layout_width="wrap_content"
diff --git a/bondoman/app/src/main/res/layout/fragment_edit_page.xml b/bondoman/app/src/main/res/layout/fragment_edit_page.xml
index 750fb7fd54ae32610e4489b1b8edb82463073dc6..efa5a06ed3752900478ab78e01ca09374fbc6e75 100644
--- a/bondoman/app/src/main/res/layout/fragment_edit_page.xml
+++ b/bondoman/app/src/main/res/layout/fragment_edit_page.xml
@@ -59,7 +59,7 @@
             android:background="@drawable/custom_field"
             android:fontFamily="@font/font_poppins"
             android:hint="Masukkan nominal transaksi Anda"
-            android:inputType="text"
+            android:inputType="number"
             android:padding="12dp"
             android:textSize="14sp"
             app:layout_constraintEnd_toEndOf="parent"
diff --git a/bondoman/app/src/main/res/layout/fragment_network_lost_page.xml b/bondoman/app/src/main/res/layout/fragment_network_lost_page.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7b1d477a24081ef52ed45d5c9a1c806279d1e3e0
--- /dev/null
+++ b/bondoman/app/src/main/res/layout/fragment_network_lost_page.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/primary"
+    tools:context=".NetworkLostPage">
+
+    <!-- TODO: Update blank fragment layout -->
+
+    <ImageView
+        android:id="@+id/imageView"
+        android:layout_width="200dp"
+        android:layout_height="200dp"
+        android:layout_marginTop="160dp"
+        android:src="@drawable/network_lost"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.497"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/textView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:fontFamily="@font/font_poppins"
+        android:text="Koneksi sampeyan ilang"
+        android:textSize="24sp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/imageView" />
+
+    <Button
+        android:id="@+id/back_transc"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="@drawable/custom_button"
+        android:fontFamily="@font/font_poppins"
+        android:padding="10dp"
+        android:text="Balik ke Tumbas"
+        android:textColor="@color/white"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0.498"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/textView"
+        app:layout_constraintVertical_bias="0.289" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/bondoman/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/bondoman/app/src/main/res/mipmap-anydpi/ic_launcher.xml
index 6f3b755bf50c6b03d8714a9c6184705e6a08389f..cd2e56314f1140f2481fff038c01d0abbe56ece6 100644
--- a/bondoman/app/src/main/res/mipmap-anydpi/ic_launcher.xml
+++ b/bondoman/app/src/main/res/mipmap-anydpi/ic_launcher.xml
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
-    <background android:drawable="@drawable/ic_launcher_background" />
-    <foreground android:drawable="@drawable/ic_launcher_foreground" />
-    <monochrome android:drawable="@drawable/ic_launcher_foreground" />
+    <foreground android:drawable="@drawable/ic_launcher" />
 </adaptive-icon>
\ No newline at end of file
diff --git a/bondoman/app/src/main/res/values/strings.xml b/bondoman/app/src/main/res/values/strings.xml
index 94f0cdf9abe4c833e81e4a5e9c29dda73fd431f3..a85bb599fe702954842fedef90abdf19ae9f7977 100644
--- a/bondoman/app/src/main/res/values/strings.xml
+++ b/bondoman/app/src/main/res/values/strings.xml
@@ -56,5 +56,6 @@
     <!--    Transaction Page    -->
     <string name="transaction_balance">Arta Sampeyan</string>
     <string name="transaction_add">+</string>
+    <string name="lost_network">Koneksi sampeyan ilang</string>
 
 </resources>
\ No newline at end of file