diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 34b35f656319915b64cdbf31c189920d6d9df450..4374a8346c6ba60dcd83eb81baec70695568b3ec 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -18,22 +18,17 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.ABE"
         tools:targetApi="31">
-        <activity
-            android:name=".ui.form_transaction.FormTransaction"
-            android:exported="false"
-            android:label="Add Transaction"
-            android:parentActivityName=".MainActivity"/>
         <activity
             android:name=".MainActivity"
             android:exported="true">
-        </activity>
-        <activity
-            android:name=".ui.login.LoginActivity" android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
+        </activity>
+        <activity
+            android:name=".ui.login.LoginActivity" android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.SEND" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/app/src/main/java/com/example/abe/MainActivity.kt b/app/src/main/java/com/example/abe/MainActivity.kt
index ec6e2b6d5b2be0ffc61f03ba6a6c37c6abf5242f..05ec1ca42b5db60317a083ab3c9dfc933c31b0ff 100644
--- a/app/src/main/java/com/example/abe/MainActivity.kt
+++ b/app/src/main/java/com/example/abe/MainActivity.kt
@@ -2,27 +2,35 @@ package com.example.abe
 
 import android.app.Activity
 import android.content.BroadcastReceiver
+import android.content.Context
 import android.content.Intent
 import android.content.IntentFilter
 import android.os.Bundle
+import android.widget.Toast
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.activity.viewModels
 import androidx.appcompat.app.AppCompatActivity
 import androidx.fragment.app.DialogFragment
 import androidx.lifecycle.lifecycleScope
 import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import androidx.navigation.NavController
 import androidx.navigation.findNavController
 import androidx.navigation.ui.AppBarConfiguration
+import androidx.navigation.ui.navigateUp
 import androidx.navigation.ui.setupActionBarWithNavController
 import androidx.navigation.ui.setupWithNavController
 import com.example.abe.databinding.ActivityMainBinding
+import com.example.abe.types.FragmentListener
 import com.example.abe.ui.transactions.ExportAlertDialogFragment
 import com.example.abe.ui.transactions.ExportAlertDialogTypeEnum
 import com.example.abe.ui.transactions.ExportLoadDialogFragment
+import com.example.abe.ui.transactions.TransactionFragment
 import com.google.android.material.bottomnavigation.BottomNavigationView
 import kotlinx.coroutines.launch
 
-class MainActivity : AppCompatActivity(), ExportAlertDialogFragment.ExportAlertDialogListener {
+class MainActivity : AppCompatActivity(), ExportAlertDialogFragment.ExportAlertDialogListener, FragmentListener, TransactionFragment.ItemClickListener {
+    private lateinit var appBarConfiguration: AppBarConfiguration
+    private lateinit var navController: NavController
 
     private lateinit var binding: ActivityMainBinding
     private val viewModel: MainActivityViewModel by viewModels {
@@ -30,7 +38,19 @@ class MainActivity : AppCompatActivity(), ExportAlertDialogFragment.ExportAlertD
     }
 
     private val filter = IntentFilter().apply { addAction("RANDOMIZE_TRANSACTION") }
-    private val br: BroadcastReceiver = TransactionBroadcastReceiver()
+    private val br = object : BroadcastReceiver() {
+        override fun onReceive(context: Context, intent: Intent) {
+            when(intent.action) {
+                "RANDOMIZE_TRANSACTION" -> {
+                    val randomAmount = intent.getIntExtra("random_amount", 0)
+                    val bundle = Bundle().apply {
+                        putInt("random_amount", randomAmount)
+                    }
+                    navController.navigate(R.id.action_navigation_transactions_to_navigation_form_transaction, bundle)
+                }
+            }
+        }
+    }
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -40,9 +60,9 @@ class MainActivity : AppCompatActivity(), ExportAlertDialogFragment.ExportAlertD
 
         val navView: BottomNavigationView = binding.navView
 
-        val navController = findNavController(R.id.nav_host_fragment_activity_main)
+        navController = findNavController(R.id.nav_host_fragment_activity_main)
 
-        val appBarConfiguration = AppBarConfiguration(
+        appBarConfiguration = AppBarConfiguration(
             setOf(
                 R.id.navigation_transactions
             )
@@ -53,6 +73,20 @@ class MainActivity : AppCompatActivity(), ExportAlertDialogFragment.ExportAlertD
         LocalBroadcastManager.getInstance(this).registerReceiver(br, filter)
     }
 
+    override fun onIntentReceived(action: String, info: String?) {
+        when(action) {
+            "OPEN_FORM" -> {
+                navController.navigate(R.id.action_navigation_transactions_to_navigation_form_transaction)
+            }
+        }
+    }
+
+    override fun onItemClicked(id: Int) {
+        val bundle = Bundle()
+        bundle.putBoolean("is-update", true)
+        bundle.putInt("idx-id", id)
+        navController.navigate(R.id.action_navigation_transactions_to_navigation_form_transaction, bundle)
+    }
     override fun onNewExcelFormatClick(dialog: DialogFragment, type: ExportAlertDialogTypeEnum) {
         viewModel.newExcelFormat = true
         when (type) {
@@ -121,4 +155,9 @@ class MainActivity : AppCompatActivity(), ExportAlertDialogFragment.ExportAlertD
         super.onDestroy()
         LocalBroadcastManager.getInstance(this).registerReceiver(br, filter)
     }
+
+    override fun onSupportNavigateUp(): Boolean {
+        return super.onSupportNavigateUp() || navController.navigateUp(appBarConfiguration)
+    }
+
 }
diff --git a/app/src/main/java/com/example/abe/TransactionBroadcastReceiver.kt b/app/src/main/java/com/example/abe/TransactionBroadcastReceiver.kt
deleted file mode 100644
index 6a03bd6805856ee620e351778b83f6612a0402ea..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/example/abe/TransactionBroadcastReceiver.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.example.abe
-
-import android.content.BroadcastReceiver
-import android.content.Context
-import android.content.Intent
-import com.example.abe.ui.form_transaction.FormTransaction
-
-
-private const val TAG = "TransactionBroadcastReceiver"
-
-class TransactionBroadcastReceiver : BroadcastReceiver() {
-    override fun onReceive(context: Context, intent: Intent) {
-        when(intent.action) {
-            "RANDOMIZE_TRANSACTION" -> {
-                val newIntent = Intent(context, FormTransaction::class.java)
-                newIntent.putExtra("random_amount", intent.getIntExtra("random_amount", 10000))
-
-                newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
-                context.startActivity(newIntent)
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/abe/types/FragmentListener.kt b/app/src/main/java/com/example/abe/types/FragmentListener.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5c75c38656aaabdc7e79b1092046090209b0f41e
--- /dev/null
+++ b/app/src/main/java/com/example/abe/types/FragmentListener.kt
@@ -0,0 +1,6 @@
+package com.example.abe.types
+
+
+interface FragmentListener {
+    fun onIntentReceived(action: String, info: String?)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/abe/ui/form_transaction/FormTransaction.kt b/app/src/main/java/com/example/abe/ui/form_transaction/FormTransaction.kt
index c5355db51adad4f66f3d258d7a791f2911919431..d22f32ee28399cf6cd8acb10692ff4cc8c50db2c 100644
--- a/app/src/main/java/com/example/abe/ui/form_transaction/FormTransaction.kt
+++ b/app/src/main/java/com/example/abe/ui/form_transaction/FormTransaction.kt
@@ -12,68 +12,67 @@ import android.location.LocationManager
 import android.os.Bundle
 import android.provider.Settings
 import android.util.Log
+import android.view.LayoutInflater
 import android.view.View
+import android.view.ViewGroup
 import android.widget.AdapterView
 import android.widget.ArrayAdapter
 import android.widget.Toast
-import androidx.activity.enableEdgeToEdge
-import androidx.activity.viewModels
-import androidx.appcompat.app.AppCompatActivity
+import androidx.activity.addCallback
 import androidx.core.app.ActivityCompat
-import androidx.core.view.ViewCompat
-import androidx.core.view.WindowInsetsCompat
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.viewModels
+import androidx.navigation.fragment.findNavController
 import com.example.abe.ABEApplication
 import com.example.abe.R
-import com.example.abe.databinding.ActivityFormTransactionBinding
+import com.example.abe.databinding.FragmentFormTransactionBinding
 import com.google.android.gms.location.FusedLocationProviderClient
 import com.google.android.gms.location.LocationServices
 import java.util.Locale
 
-class FormTransaction : AppCompatActivity() {
-    private lateinit var binding: ActivityFormTransactionBinding
+class FormTransaction : Fragment() {
+    private var _binding: FragmentFormTransactionBinding? = null
+
+    private val binding get() = _binding!!
+
+
     private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
     private val permissionId = 2
 
     private val viewModel: FormTransactionViewModel by viewModels {
-        FormTransactionViewModelFactory((this.application as ABEApplication).repository)
+        FormTransactionViewModelFactory((activity?.application as ABEApplication).repository)
     }
 
-    private lateinit var user:String
+    private lateinit var user: String
 
-    override fun onCreate(savedInstanceState: Bundle?) {
+    private var id: Int? = null
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View {
         super.onCreate(savedInstanceState)
-        enableEdgeToEdge()
 
-        binding = ActivityFormTransactionBinding.inflate(layoutInflater)
-        setContentView(binding.root)
+        _binding = FragmentFormTransactionBinding.inflate(inflater, container, false)
 
         binding.viewModel = viewModel
         binding.lifecycleOwner = this
-        viewModel.amountNumber.observe(this, {})
+        viewModel.amountNumber.observe(viewLifecycleOwner, {})
 
-        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)
+        fusedLocationProviderClient =
+            LocationServices.getFusedLocationProviderClient(requireActivity())
 
-        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
-            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
-            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
-            insets
+        if (requireActivity().intent.hasExtra("random_amount")) {
+            viewModel.setRandomAmount(requireActivity().intent.getIntExtra("random_amount", 10000))
         }
-        supportActionBar?.setDisplayHomeAsUpEnabled(true)
 
-        if (intent.hasExtra("id")) {
-            intent.getStringExtra("id")?.let { viewModel.getTransaction(it.toInt()) }
-            binding.categoryAutocomplete.isEnabled = false
-        }
-        else {
-            binding.btnDelete.visibility = View.GONE
+        requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
+            findNavController().navigateUp()
         }
 
-        if (intent.hasExtra("random_amount")) {
-            viewModel.setRandomAmount(intent.getIntExtra("random_amount", 10000))
-        }
 
         val categories = resources.getStringArray(R.array.Categories)
-        val adapterItems = ArrayAdapter<String>(this, R.layout.list_item, categories)
+        val adapterItems = ArrayAdapter<String>(requireContext(), R.layout.list_item, categories)
         binding.categoryAutocomplete.setAdapter(adapterItems)
         binding.categoryAutocomplete.onItemClickListener =
             AdapterView.OnItemClickListener { parent, view, position, id ->
@@ -89,8 +88,33 @@ class FormTransaction : AppCompatActivity() {
 
         getLocation()
 
-        val sharedPref = getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
+        val sharedPref = requireActivity().getSharedPreferences(
+            getString(R.string.preference_file_key),
+            Context.MODE_PRIVATE
+        )
         user = sharedPref.getString("user", "").toString()
+
+        if (arguments != null) {
+            val args = Bundle(arguments)
+            if (args.containsKey("idx-id")) {
+                val trxId = args.getInt("idx-id")
+                displayTrx(trxId)
+            } else if (args.containsKey("random_amount")) {
+                viewModel.setRandomAmount(args.getInt("random_amount"))
+                binding.btnDelete.visibility = View.GONE
+            }
+        } else {
+            binding.btnDelete.visibility = View.GONE
+        }
+
+        return binding.root
+    }
+
+
+    private fun displayTrx(idTrx: Int) {
+        id = idTrx
+        viewModel.getTransaction(idTrx)
+        binding.categoryAutocomplete.isEnabled = false
     }
 
     private fun titleFocusListener() {
@@ -144,27 +168,26 @@ class FormTransaction : AppCompatActivity() {
                     .isNotEmpty() && binding.categoryAutocomplete.text.toString()
                     .isNotEmpty() && binding.formLocationEditText.text.toString().isNotEmpty()
             ) {
-                if (intent.hasExtra("id")) {
-                    intent.getStringExtra("id")?.let { viewModel.updateTransaction(it.toInt()) }
-                }
-                else {
+                if (id != null) {
+                    viewModel.updateTransaction(id!!)
+                } else {
                     viewModel.insertTransaction(user)
                 }
-                finish()
+                findNavController().navigateUp()
             }
         }
     }
 
     private fun deleteButtonListener() {
         binding.btnDelete.setOnClickListener {
-            intent.getStringExtra("id")?.let { viewModel.deleteTransaction(it.toInt()) }
-            finish()
+            id?.let { viewModel.deleteTransaction(id!!) }
+            findNavController().navigateUp()
         }
     }
 
     private fun isLocationEnabled(): Boolean {
         val locationManager: LocationManager =
-            getSystemService(Context.LOCATION_SERVICE) as LocationManager
+            requireActivity().getSystemService(Context.LOCATION_SERVICE) as LocationManager
         return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(
             LocationManager.NETWORK_PROVIDER
         )
@@ -172,11 +195,11 @@ class FormTransaction : AppCompatActivity() {
 
     private fun checkPermissions(): Boolean {
         if (ActivityCompat.checkSelfPermission(
-                this,
+                requireActivity(),
                 Manifest.permission.ACCESS_COARSE_LOCATION
             ) == PackageManager.PERMISSION_GRANTED &&
             ActivityCompat.checkSelfPermission(
-                this,
+                requireActivity(),
                 Manifest.permission.ACCESS_FINE_LOCATION
             ) == PackageManager.PERMISSION_GRANTED
         ) {
@@ -187,7 +210,7 @@ class FormTransaction : AppCompatActivity() {
 
     private fun requestPermissions() {
         ActivityCompat.requestPermissions(
-            this,
+            requireActivity(),
             arrayOf(
                 Manifest.permission.ACCESS_COARSE_LOCATION,
                 Manifest.permission.ACCESS_FINE_LOCATION
@@ -213,10 +236,10 @@ class FormTransaction : AppCompatActivity() {
     private fun getLocation() {
         if (checkPermissions()) {
             if (isLocationEnabled()) {
-                fusedLocationProviderClient.lastLocation.addOnCompleteListener(this) { task ->
+                fusedLocationProviderClient.lastLocation.addOnCompleteListener(requireActivity()) { task ->
                     val location: Location? = task.result
                     if (location != null) {
-                        val geocoder = Geocoder(this, Locale.getDefault())
+                        val geocoder = Geocoder(requireContext(), Locale.getDefault())
                         val list: MutableList<Address>? =
                             geocoder.getFromLocation(location.latitude, location.longitude, 1)
                         Log.v(
@@ -230,11 +253,12 @@ class FormTransaction : AppCompatActivity() {
                             binding.formLocationEditText.setText(list[0].getAddressLine(0))
                         }
                     } else {
-                        Log.v("ABECEKUT", "location kg ada")
+                        Log.v("ABECEKUT", "location not available")
                     }
                 }
             } else {
-                Toast.makeText(this, "Please turn on location", Toast.LENGTH_LONG).show()
+                Toast.makeText(requireActivity(), "Please turn on location", Toast.LENGTH_LONG)
+                    .show()
                 val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
                 startActivity(intent)
             }
diff --git a/app/src/main/java/com/example/abe/ui/transactions/TransactionFragment.kt b/app/src/main/java/com/example/abe/ui/transactions/TransactionFragment.kt
index 5e5b432dc1590d3617e7e6b57d6079b290105484..9f9b8eb63407d44195b0fb75ca7353e4511dfe80 100644
--- a/app/src/main/java/com/example/abe/ui/transactions/TransactionFragment.kt
+++ b/app/src/main/java/com/example/abe/ui/transactions/TransactionFragment.kt
@@ -1,5 +1,6 @@
 package com.example.abe.ui.transactions
 
+import android.content.Context
 import android.content.Intent
 import android.os.Bundle
 import android.view.LayoutInflater
@@ -11,12 +12,13 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.example.abe.ABEApplication
 import com.example.abe.databinding.FragmentTransactionsBinding
-import com.example.abe.ui.form_transaction.FormTransaction
+import com.example.abe.types.FragmentListener
 
 
 class TransactionFragment : Fragment() {
 
     private var _binding: FragmentTransactionsBinding? = null
+    private lateinit var listener: ItemClickListener
 
     // This property is only valid between onCreateView and
     // onDestroyView.
@@ -26,6 +28,10 @@ class TransactionFragment : Fragment() {
         fun newInstance() = TransactionFragment()
     }
 
+    interface ItemClickListener {
+        fun onItemClicked(id: Int)
+    }
+
     private val viewModel: TransactionViewModel by viewModels {
         TransactionViewModelFactory((activity?.application as ABEApplication).repository)
     }
@@ -36,7 +42,7 @@ class TransactionFragment : Fragment() {
     ): View {
         _binding = FragmentTransactionsBinding.inflate(inflater, container, false)
 
-        val transactionsAdapter = TransactionsAdapter()
+        val transactionsAdapter = TransactionsAdapter(listener)
         binding.rvTransactions.adapter = transactionsAdapter
         binding.rvTransactions.layoutManager = LinearLayoutManager(context)
 
@@ -65,13 +71,19 @@ class TransactionFragment : Fragment() {
         }
 
         binding.addTransactionBtn.setOnClickListener {
-            val intent = Intent(requireContext(), FormTransaction::class.java)
-            startActivity(intent)
+            (activity as FragmentListener).onIntentReceived("OPEN_FORM", "")
         }
 
         return binding.root
     }
 
+    override fun onAttach(context: Context) {
+        super.onAttach(context)
+        if (context is ItemClickListener) {
+            listener = context
+        }
+    }
+
     override fun onDestroyView() {
         super.onDestroyView()
         _binding = null
diff --git a/app/src/main/java/com/example/abe/ui/transactions/TransactionsAdapter.kt b/app/src/main/java/com/example/abe/ui/transactions/TransactionsAdapter.kt
index 4aa01e82a686d1d22c212f03fe953bfb9cb34719..da1ba890916ffe5f792b599e2df53560dfe18d83 100644
--- a/app/src/main/java/com/example/abe/ui/transactions/TransactionsAdapter.kt
+++ b/app/src/main/java/com/example/abe/ui/transactions/TransactionsAdapter.kt
@@ -17,7 +17,7 @@ import com.example.abe.ui.form_transaction.FormTransaction
 import java.text.SimpleDateFormat
 import java.util.Locale
 
-class TransactionsAdapter: ListAdapter<Transaction, TransactionsAdapter.TransactionViewHolder>(TransactionComparator()) {
+class TransactionsAdapter(private val itemClickListener: TransactionFragment.ItemClickListener): ListAdapter<Transaction, TransactionsAdapter.TransactionViewHolder>(TransactionComparator()) {
     class TransactionViewHolder(val view: View): RecyclerView.ViewHolder(view) {
         val clImageContainer: ConstraintLayout
         val ivTrxIcon: ImageView
@@ -73,9 +73,10 @@ class TransactionsAdapter: ListAdapter<Transaction, TransactionsAdapter.Transact
             tvAmount.text = amountText
 
             view.setOnClickListener {
-                val intent = Intent(it.context, FormTransaction::class.java)
-                intent.putExtra("id", trx.id.toString())
-                it.context.startActivity(intent)
+//                val intent = Intent(it.context, FormTransaction::class.java)
+//                intent.putExtra("id", trx.id.toString())
+//                it.context.startActivity(intent)
+                itemClickListener.onItemClicked(trx.id)
             }
         }
     }
diff --git a/app/src/main/res/layout/activity_form_transaction.xml b/app/src/main/res/layout/fragment_form_transaction.xml
similarity index 98%
rename from app/src/main/res/layout/activity_form_transaction.xml
rename to app/src/main/res/layout/fragment_form_transaction.xml
index 9a4285749544192be080c663b25cda203cad118c..b3c08de536f52f69764affdbd37965f40e197c93 100644
--- a/app/src/main/res/layout/activity_form_transaction.xml
+++ b/app/src/main/res/layout/fragment_form_transaction.xml
@@ -8,7 +8,7 @@
             type="com.example.abe.ui.form_transaction.FormTransactionViewModel" />
     </data>
     <androidx.constraintlayout.widget.ConstraintLayout
-        android:id="@+id/main"
+        android:id="@+id/formTransaction"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         tools:context=".ui.form_transaction.FormTransaction">
@@ -18,7 +18,6 @@
             style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:paddingTop="?attr/actionBarSize"
             android:layout_marginHorizontal="20dp"
             app:helperTextTextColor="@color/destructive"
             app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index 8343e0dcce4b4652749e84fa38aa4adf8e899f17..efbfcf608eb0bb590fe8af4888c1019967b59c3b 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -11,6 +11,19 @@
         android:label="Transactions"
         android:name="com.example.abe.ui.transactions.TransactionFragment"
         tools:layout="@layout/fragment_transactions"
+        >
+        <action
+            android:id="@+id/action_navigation_transactions_to_navigation_form_transaction"
+            app:destination="@id/navigation_form_transaction"
+            app:popUpTo="@id/navigation_form_transaction"
+            app:popUpToInclusive="true"/>
+    </fragment>
+
+    <fragment
+        android:id="@+id/navigation_form_transaction"
+        android:label="Add Transaction"
+        android:name="com.example.abe.ui.form_transaction.FormTransaction"
+        tools:layout="@layout/fragment_form_transaction"
         />
 
 <!--    <fragment-->