diff --git a/app/src/main/java/com/example/pbd_jwr/MainActivity.kt b/app/src/main/java/com/example/pbd_jwr/MainActivity.kt
index c588d3aea47dcd018c1b33bf5aeb11197105f99e..41c08c2080863bca4df63084b5e71eaa65e743ec 100644
--- a/app/src/main/java/com/example/pbd_jwr/MainActivity.kt
+++ b/app/src/main/java/com/example/pbd_jwr/MainActivity.kt
@@ -10,6 +10,11 @@ import android.content.pm.PackageManager
 import android.widget.Toast
 import android.Manifest
 import android.app.Activity
+import android.content.BroadcastReceiver
+import android.content.IntentFilter
+import android.util.Log
+import android.view.Menu
+import android.view.MenuItem
 import androidx.activity.result.contract.ActivityResultContracts
 
 import com.google.android.material.bottomnavigation.BottomNavigationView
@@ -17,6 +22,7 @@ import androidx.appcompat.app.AppCompatActivity
 import androidx.core.app.ActivityCompat
 import androidx.core.content.ContextCompat
 import androidx.lifecycle.ViewModelProvider
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import androidx.navigation.findNavController
 import androidx.navigation.ui.AppBarConfiguration
 import androidx.navigation.ui.setupActionBarWithNavController
@@ -29,6 +35,11 @@ import com.example.pbd_jwr.encryptedSharedPref.EncryptedSharedPref
 import com.example.pbd_jwr.network.NetworkCallbackImplementation
 import com.example.pbd_jwr.ui.transaction.TransactionViewModel
 import com.google.android.material.floatingactionbutton.FloatingActionButton
+import org.json.JSONObject
+import java.util.Date
+import kotlin.math.roundToInt
+import androidx.appcompat.widget.Toolbar
+import com.example.pbd_jwr.ui.transaction.TransactionAddFragment
 
 class MainActivity : AppCompatActivity() {
 
@@ -41,9 +52,32 @@ class MainActivity : AppCompatActivity() {
 
     private lateinit var mTransactionViewModel: TransactionViewModel
 
+    private lateinit var receiver: BroadcastReceiver
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
+        val serviceIntent = Intent(this, JWTValidationService::class.java)
+        startService(serviceIntent)
+
+        // Inisialisasi receiver
+        val receiver = object : BroadcastReceiver() {
+            override fun onReceive(context: Context, intent: Intent) {
+                if (intent.action == "com.example.pbd_jwr.RANDOMIZE_TRANSACTION") {
+                    val sharedPreferences = context.getSharedPreferences("randomize_data", Context.MODE_PRIVATE)
+                    val editor = sharedPreferences.edit()
+                    editor.putBoolean("randomize_intent_received", true)
+                    editor.apply()
+
+                }
+            }
+        }
+
+        val filter = IntentFilter().apply {
+            addAction("com.example.pbd_jwr.RANDOMIZE_TRANSACTION")
+        }
+        LocalBroadcastManager.getInstance(this).registerReceiver(receiver, filter)
+
         sharedPreferences = EncryptedSharedPref.create(applicationContext,"login")
         sharedPreferencesEditor = sharedPreferences.edit()
         binding = ActivityMainBinding.inflate(layoutInflater)
@@ -186,6 +220,9 @@ class MainActivity : AppCompatActivity() {
     override fun onDestroy() {
         super.onDestroy()
 
+        val serviceIntent = Intent(this, JWTValidationService::class.java)
+        stopService(serviceIntent)
+        LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
     }
 
     private fun registerNetworkCallback() {
@@ -196,6 +233,40 @@ class MainActivity : AppCompatActivity() {
         connectivityManager.unregisterNetworkCallback(networkCallback)
     }
 
+    private val startScanActivityForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+        if (result.resultCode == Activity.RESULT_OK) {
+
+            sharedPreferences = EncryptedSharedPref.create(applicationContext, "login")
+            val currentUserEmail = sharedPreferences.getString("email", "") ?: ""
+
+            val data = result.data
+            val transactionDummyData = data?.getStringExtra("transactionDummyData")
+
+            transactionDummyData?.let {
+
+                val jsonObject = JSONObject(transactionDummyData)
+                val itemsArray = jsonObject.getJSONObject("items").getJSONArray("items")
+
+                for (i in 0 until itemsArray.length()) {
+                    val itemObject = itemsArray.getJSONObject(i)
+                    val name = itemObject.getString("name")
+                    val category = Category.EXPENSE
+                    val price = itemObject.getDouble("price")
+                    val qty = itemObject.getInt("qty")
+                    val amount = (qty * price * 1000).roundToInt() / 1000.0
+                    val latitude = 6.8915
+                    val longitude = 107.6107
+                    val location = "Latitude: $latitude, Longitude: $longitude"
+                    val date = Date().time
+
+                    mTransactionViewModel.addTransaction(Transaction(email = currentUserEmail, title = name, category = category, amount = amount, latitude = latitude, longitude = longitude, date = date))
+                }
+
+
+            }
+        }
+    }
+
     companion object {
         private const val LOCATION_PERMISSION_REQUEST_CODE = 1001
     }
diff --git a/app/src/main/java/com/example/pbd_jwr/ui/settings/SettingsFragment.kt b/app/src/main/java/com/example/pbd_jwr/ui/settings/SettingsFragment.kt
index 8904abe133f1d1de17dc762d133eb79cb1e20169..1876e51403444d9a384d02b1deeedf2a42ec5a73 100644
--- a/app/src/main/java/com/example/pbd_jwr/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/example/pbd_jwr/ui/settings/SettingsFragment.kt
@@ -57,6 +57,7 @@ class SettingsFragment : Fragment() {
             intent.setAction("com.example.pbd_jwr.RANDOMIZE_TRANSACTION")
 
             LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent)
+
         }
 
         binding.twibbonButton.setOnClickListener {
diff --git a/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionAddFragment.kt b/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionAddFragment.kt
index 66c8b15388e0b6598337ad7892c50677c3a15810..e80e414569dbe8a893e281c681f56dc67f9b4587 100644
--- a/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionAddFragment.kt
+++ b/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionAddFragment.kt
@@ -10,7 +10,11 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import android.content.pm.PackageManager
 import android.os.Build
 import android.os.Bundle
+import android.util.Log
 import android.view.LayoutInflater
+import android.view.Menu
+import android.view.MenuInflater
+import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
 import android.widget.AdapterView
@@ -27,9 +31,7 @@ import com.example.pbd_jwr.databinding.FragmentTransactionAddBinding
 import com.example.pbd_jwr.encryptedSharedPref.EncryptedSharedPref
 import com.google.android.gms.location.FusedLocationProviderClient
 import com.google.android.gms.location.LocationServices
-import com.google.android.gms.location.LocationRequest
-import com.google.android.gms.location.LocationCallback
-import com.google.android.gms.location.LocationResult
+import com.example.pbd_jwr.R
 import java.util.Date
 
 class TransactionAddFragment : Fragment() {
@@ -43,6 +45,8 @@ class TransactionAddFragment : Fragment() {
 
     private lateinit var encryptedSharedPref: SharedPreferences
 
+    private lateinit var receiver: BroadcastReceiver
+
     @RequiresApi(Build.VERSION_CODES.TIRAMISU)
     override fun onCreateView(
         inflater: LayoutInflater,
@@ -54,8 +58,27 @@ class TransactionAddFragment : Fragment() {
         _binding = FragmentTransactionAddBinding.inflate(inflater, container, false)
         val root: View = binding.root
 
-        val filter = IntentFilter(TransactionAddFragment.ACTION_RANDOMIZE_TRANSACTION)
-        LocalBroadcastManager.getInstance(requireContext()).registerReceiver(randomizeTransactionReceiver, filter)
+        mTransactionViewModel.transactionSubmitted.observe(viewLifecycleOwner) { success ->
+            if (success) {
+                Toast.makeText(requireContext(), "Transaction submitted successfully", Toast.LENGTH_SHORT).show()
+            } else {
+                Toast.makeText(requireContext(), "Transaction submission failed", Toast.LENGTH_SHORT).show()
+            }
+        }
+
+        val sharedPreferences = requireContext().getSharedPreferences("randomize_data", Context.MODE_PRIVATE)
+        val randomIntentReceived = sharedPreferences.getBoolean("randomize_intent_received", false)
+        if (randomIntentReceived) {
+            println("masuk random")
+            // Lakukan randomisasi transaksi di sini
+            handleRandomizeTransaction()
+            // Hapus status intent yang sudah diterima agar tidak diproses lagi
+            val editor = sharedPreferences.edit()
+            editor.putBoolean("randomize_intent_received", false)
+            editor.apply()
+        }
+//
+//        setupListeners()
 
         fusedLocationClient = LocationServices.getFusedLocationProviderClient(requireActivity())
         showCurrentLocation()
@@ -106,26 +129,30 @@ class TransactionAddFragment : Fragment() {
         }
 
 
+
         return root
     }
 
-    private fun handleRandomizeTransaction() {
-        val editMode = arguments?.getBoolean("editMode", false) ?: false
-        if (!editMode) {
-            println("random random")
-            fillRandomField()
-        }
+
+    fun handleRandomizeTransaction() {
+        val randomTitle = generateRandomTitle()
+        val randomAmount = generateRandomAmount()
+
+        binding.editTextTitle.setText(randomTitle)
+        binding.editTextAmount.setText(randomAmount.toString())
+
+        saveRandomData(randomTitle, randomAmount)
     }
 
-    private val randomizeTransactionReceiver = object : BroadcastReceiver() {
-        override fun onReceive(context: Context?, intent: Intent?) {
-            println("Intent diterima oleh broadcast receiver")
-            if (intent?.action == "com.example.pbd_jwr.RANDOMIZE_TRANSACTION") {
-                handleRandomizeTransaction()
-            }
-        }
+    private fun saveRandomData(randomTitle: String, randomAmount: Double) {
+        val sharedPreferences = requireContext().getSharedPreferences("randomize_data", Context.MODE_PRIVATE)
+        val editor = sharedPreferences.edit()
+        editor.putString("random_title", randomTitle)
+        editor.putFloat("random_amount", randomAmount.toFloat()) // Menggunakan putFloat karena SharedPreferences tidak mendukung Double secara langsung
+        editor.apply()
     }
 
+
     private fun showCurrentLocation() {
         if (ContextCompat.checkSelfPermission(
                 requireContext(),
@@ -240,24 +267,21 @@ class TransactionAddFragment : Fragment() {
         Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()
     }
 
-    private fun fillRandomField() {
-        val randomTitle = generateRandomTitle()
-        binding.editTextTitle.setText(randomTitle)
+    private fun generateRandomAmount(): Double {
+        return (0..300).random().toDouble()
     }
 
     private fun generateRandomTitle(): String {
-        return "Random Transaction ${System.currentTimeMillis()}"
+        return "Random Transaction"
     }
 
     override fun onDestroyView() {
         super.onDestroyView()
 
-        LocalBroadcastManager.getInstance(requireContext()).unregisterReceiver(randomizeTransactionReceiver)
     }
 
     companion object {
         private const val LOCATION_PERMISSION_REQUEST_CODE = 1001
-        const val ACTION_RANDOMIZE_TRANSACTION = "com.example.pbd_jwr.RANDOMIZE_TRANSACTION"
     }
 
 }
diff --git a/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionDetailFragment.kt b/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionDetailFragment.kt
index 8dae7d0244890ff2f16c9a40dd2fb33852df3a41..9f6696a15b62aa4673a5a248e1eac7a194d61026 100644
--- a/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionDetailFragment.kt
+++ b/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionDetailFragment.kt
@@ -68,7 +68,6 @@ class TransactionDetailFragment : Fragment(), OnMapReadyCallback {
             findNavController().popBackStack()
         }
 
-
         return root
     }
 
@@ -97,6 +96,19 @@ class TransactionDetailFragment : Fragment(), OnMapReadyCallback {
         return sdf.format(calendar.time)
     }
 
+    private fun showDeleteConfirmationDialog(transaction: Transaction) {
+        AlertDialog.Builder(requireContext(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)
+            .setTitle("Delete Transaction")
+            .setMessage("Are you sure you want to delete this transaction?")
+            .setPositiveButton("Yes") { _, _ ->
+                transaction?.let { deleteTransaction(it) }
+            }
+            .setNegativeButton("No") { dialog, _ ->
+                dialog.dismiss()
+            }
+            .show()
+    }
+
     private fun deleteTransaction(transaction: Transaction) {
         mTransactionViewModel.deleteTransaction(transaction)
         findNavController().popBackStack()
diff --git a/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionViewModel.kt b/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionViewModel.kt
index 7928d1090c3a0789db9f6cac8669801109b71c7d..083fc41341d6043e708d336ce6aa126b4ab20c2c 100644
--- a/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionViewModel.kt
+++ b/app/src/main/java/com/example/pbd_jwr/ui/transaction/TransactionViewModel.kt
@@ -15,7 +15,6 @@ import kotlinx.coroutines.launch
 
 class TransactionViewModel(application: Application) : AndroidViewModel(application) {
 
-    private val readAllTransactions: LiveData<List<Transaction>>
     private val repository: TransactionRepository
 
     private val _transactionSubmitted = MutableLiveData<Boolean>()
@@ -23,7 +22,6 @@ class TransactionViewModel(application: Application) : AndroidViewModel(applicat
     init {
         val transactionDao = AppDatabase.getDatabase(application).transactionDao()
         repository = TransactionRepository(transactionDao)
-        readAllTransactions = repository.getAllTransactions()
     }
     fun getAllTransactions(): LiveData<List<Transaction>> {
         return repository.getAllTransactions()