diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 429e5ba391808a24c61b1d9c12d6339afb22c1e8..19a7945c0328370bb1578a3f67d095c2558f6997 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
     xmlns:tools="http://schemas.android.com/tools">
 
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 
     <application
         android:name=".ui.transactions.TransactionsApplication"
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt
index 0786702feda5826645d625e0aab66e265aa78686..00f3673be3940831dc3fd5c94bd51fbbe70ceca1 100644
--- a/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt
@@ -6,6 +6,7 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.ArrayAdapter
+import android.widget.Toast
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
 import com.example.bondoyap.databinding.FragmentAddTransactionsBinding
@@ -52,15 +53,29 @@ class AddTransactionsFragment : Fragment() {
             val dateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
             val currentDate = dateFormat.format(Date())
 
+            val judul = if (binding.editTextJudul.text.toString().trim().isNotEmpty()) {
+                binding.editTextJudul.text.toString()
+            } else {
+                "Untitled"
+            }
+
+            val nominal = if (binding.editTextNominal.text.toString().trim().isNotEmpty()) {
+                binding.editTextNominal.text.toString().toDouble()
+            } else {
+                0.0
+            }
+
             val transaction: Transactions = Transactions(
-                judul = binding.editTextJudul.text.toString(),
-                nominal = binding.editTextNominal.text.toString().toDouble(),
+                judul = judul,
+                nominal = nominal,
                 isPemasukan = isPemasukan,
                 tanggal = currentDate
             )
 
             transactionsViewModel.upsert(transaction)
 
+            Toast.makeText(requireContext(), "Transaksi berhasil disimpan", Toast.LENGTH_SHORT).show()
+
             binding.editTextJudul.text.clear()
             binding.editTextNominal.text.clear()
             binding.spinnerKategori.setSelection(0)
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt
index 1a02e7560ea38d381079e543129dccd6b82b9c3b..a10402e363f98fbf0301093d1481508e1a96aec7 100644
--- a/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt
@@ -1,6 +1,7 @@
 package com.example.bondoyap.ui.transactions
 
 import android.R
+import android.app.AlertDialog
 import android.os.Bundle
 import android.text.Editable
 import android.text.Spannable
@@ -9,6 +10,7 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.ArrayAdapter
+import android.widget.Toast
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
 import androidx.navigation.fragment.findNavController
@@ -57,7 +59,7 @@ class EditTransactionsFragment : Fragment() {
             val originalTransaction: Transactions = transactionsViewModel.get(transactionId)
 
             binding.editTextJudul.text = SpannableStringBuilder(originalTransaction.judul)
-            binding.editTextNominal.text = SpannableStringBuilder(originalTransaction.nominal.toString())
+            binding.editTextNominal.text = SpannableStringBuilder(originalTransaction.nominal.toBigDecimal().toString())
 
             if (originalTransaction.isPemasukan) {
                 binding.spinnerKategori.setSelection(categories.indexOf(pemasukan))
@@ -69,29 +71,45 @@ class EditTransactionsFragment : Fragment() {
 
         }
 
-        binding.buttonSimpan.setOnClickListener {
+        binding.buttonUpdate.setOnClickListener {
             val isPemasukan: Boolean = when (binding.spinnerKategori.selectedItem.toString()) {
                 pemasukan -> true
                 else -> false
             }
 
+            val judul = if (binding.editTextJudul.text.toString().trim().isNotEmpty()) {
+                binding.editTextJudul.text.toString()
+            } else {
+                "Untitled"
+            }
+
+            val nominal = if (binding.editTextNominal.text.toString().trim().isNotEmpty()) {
+                binding.editTextNominal.text.toString().toDouble()
+            } else {
+                0.0
+            }
+
             val transaction: Transactions = Transactions(
-                judul = binding.editTextJudul.text.toString(),
-                nominal = binding.editTextNominal.text.toString().toDouble(),
+                judul = judul,
+                nominal = nominal,
                 isPemasukan = isPemasukan,
                 tanggal = tanggal,
                 id = transactionId
             )
 
-            transactionsViewModel.upsert(transaction)
+            showConfirmationDialog("Update", "Apakah Anda yakin ingin memperbarui transaksi ini?") {
+                transactionsViewModel.upsert(transaction)
 
-            binding.editTextJudul.text = SpannableStringBuilder(transaction.judul)
-            binding.editTextNominal.text = SpannableStringBuilder(transaction.nominal.toString())
+                binding.editTextJudul.text = SpannableStringBuilder(transaction.judul)
+                binding.editTextNominal.text =
+                    SpannableStringBuilder(transaction.nominal.toBigDecimal().toString())
 
-            if (transaction.isPemasukan) {
-                binding.spinnerKategori.setSelection(categories.indexOf(pemasukan))
-            } else {
-                binding.spinnerKategori.setSelection(categories.indexOf(pengeluaran))
+                if (transaction.isPemasukan) {
+                    binding.spinnerKategori.setSelection(categories.indexOf(pemasukan))
+                } else {
+                    binding.spinnerKategori.setSelection(categories.indexOf(pengeluaran))
+                }
+                Toast.makeText(requireContext(), "Transaksi berhasil diperbarui", Toast.LENGTH_SHORT).show()
             }
         }
 
@@ -104,14 +122,30 @@ class EditTransactionsFragment : Fragment() {
                 id = transactionId
             )
 
-            transactionsViewModel.delete(transaction)
-
-            findNavController().navigate(com.example.bondoyap.R.id.navigation_transactions)
+            showConfirmationDialog("Hapus", "Apakah Anda yakin ingin menghapus transaksi ini?") {
+                transactionsViewModel.delete(transaction)
+                findNavController().navigate(com.example.bondoyap.R.id.navigation_transactions)
+                Toast.makeText(requireContext(), "Transaksi berhasil dihapus", Toast.LENGTH_SHORT).show()
+            }
         }
 
         return binding.root
     }
 
+    private fun showConfirmationDialog(title: String, message: String, action: () -> Unit) {
+        val builder = AlertDialog.Builder(requireContext())
+        builder.setTitle(title)
+        builder.setMessage(message)
+        builder.setPositiveButton("Ya") { _, _ ->
+            action.invoke()
+        }
+        builder.setNegativeButton("Tidak") { dialog, _ ->
+            dialog.dismiss()
+        }
+        val dialog = builder.create()
+        dialog.show()
+    }
+
     override fun onDestroyView() {
         super.onDestroyView()
         _binding = null
diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt
index a9e9ff54b8b97519ac1447784dd48223c81f6e84..c79ddd8aa82c0a4346cbba83b424f23f1822c9f6 100644
--- a/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/transactions/TransactionsListAdapter.kt
@@ -35,8 +35,22 @@ class TransactionsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
     private val transactionDate: TextView = itemView.findViewById(R.id.transactionDate)
 
     fun bind(transaction: Transactions) {
-        val amountText = "IDR " + transaction.nominal.toString()
-        transactionTitle.text = transaction.judul
+        val maxAmountLength = 12
+        val maxTitleLength = 19
+
+        val amountText = if (transaction.nominal.toString().length > maxAmountLength) {
+            "IDR " + transaction.nominal.toBigDecimal().toString().substring(0, maxAmountLength) + "..."
+        } else {
+            "IDR " + transaction.nominal.toBigDecimal().toString()
+        }
+
+        val titleText = if (transaction.judul.length > maxTitleLength) {
+            transaction.judul.substring(0, maxTitleLength) + "..."
+        } else {
+            transaction.judul
+        }
+
+        transactionTitle.text = titleText
         transactionAmount.text = amountText
         transactionCategory.text = when (transaction.isPemasukan) {
             true -> "Pemasukan"
diff --git a/app/src/main/res/layout/fragment_add_transactions.xml b/app/src/main/res/layout/fragment_add_transactions.xml
index 854e98ebcfeb159d79b7f2b8c544d277eedf55c1..c7bc521ef2c2912a1614877a151b223a7d326f98 100644
--- a/app/src/main/res/layout/fragment_add_transactions.xml
+++ b/app/src/main/res/layout/fragment_add_transactions.xml
@@ -16,6 +16,7 @@
         android:autofillHints="judul"
         android:hint="@string/hint_judul"
         android:inputType="text"
+        android:maxLength="150"
         android:layout_marginBottom="16dp" />
 
     <TextView
@@ -29,6 +30,7 @@
         android:autofillHints="nominal"
         android:hint="@string/hint_nominal"
         android:inputType="numberDecimal"
+        android:maxLength="18"
         android:layout_marginBottom="16dp" />
 
     <TextView
diff --git a/app/src/main/res/layout/fragment_edit_transactions.xml b/app/src/main/res/layout/fragment_edit_transactions.xml
index 5f8dcfe23bf8f2e46b518f34da93edc1590b63ad..b1bf97d41befb893d99ccc4ca40255f2474c01bf 100644
--- a/app/src/main/res/layout/fragment_edit_transactions.xml
+++ b/app/src/main/res/layout/fragment_edit_transactions.xml
@@ -16,6 +16,7 @@
         android:autofillHints="judul"
         android:hint="@string/hint_judul"
         android:inputType="text"
+        android:maxLength="150"
         android:layout_marginBottom="16dp" />
 
     <TextView
@@ -29,6 +30,7 @@
         android:autofillHints="nominal"
         android:hint="@string/hint_nominal"
         android:inputType="numberDecimal"
+        android:maxLength="18"
         android:layout_marginBottom="16dp" />
 
     <TextView
@@ -47,12 +49,12 @@
         android:orientation="horizontal">
 
         <Button
-            android:id="@+id/button_simpan"
+            android:id="@+id/button_update"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:layout_marginEnd="8dp"
-            android:text="@string/button_simpan" />
+            android:text="@string/button_update" />
 
         <Button
             android:id="@+id/button_hapus"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2846dd1e8183e24214ca989ddc92c832d6624f57..d59eb366c2f88c41ccacee48df8917b49bf379b0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -28,6 +28,7 @@
     <string name="textfield_label_lokasi">Lokasi</string>
     <string name="button_simpan">Simpan</string>
     <string name="button_hapus">Hapus</string>
+    <string name="button_update">Update</string>
     <string name="hint_judul">Enter Judul</string>
     <string name="hint_nominal">Enter Nominal</string>
     <string name="hint_kategori">Enter Kategori</string>