From 9bb0801bf427bb0037cb47973c86caf63eda2568 Mon Sep 17 00:00:00 2001
From: liviaarumsari <13521094@mahasiswa.itb.ac.id>
Date: Sun, 31 Mar 2024 19:56:06 +0700
Subject: [PATCH] fix: broadcast receiver randomize amount

---
 app/src/main/AndroidManifest.xml              |  6 ++--
 .../main/java/com/example/abe/MainActivity.kt | 31 ++++++++++++++++---
 .../abe/TransactionBroadcastReceiver.kt       | 23 --------------
 .../ui/form_transaction/FormTransaction.kt    | 27 ++++++++++------
 .../ui/transactions/TransactionFragment.kt    |  1 -
 5 files changed, 47 insertions(+), 41 deletions(-)
 delete mode 100644 app/src/main/java/com/example/abe/TransactionBroadcastReceiver.kt

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 71e257f..4374a83 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -21,14 +21,14 @@
         <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 48a6962..05ec1ca 100644
--- a/app/src/main/java/com/example/abe/MainActivity.kt
+++ b/app/src/main/java/com/example/abe/MainActivity.kt
@@ -2,17 +2,21 @@ 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
@@ -25,6 +29,8 @@ import com.google.android.material.bottomnavigation.BottomNavigationView
 import kotlinx.coroutines.launch
 
 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 {
@@ -32,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)
@@ -42,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
             )
@@ -56,7 +74,6 @@ class MainActivity : AppCompatActivity(), ExportAlertDialogFragment.ExportAlertD
     }
 
     override fun onIntentReceived(action: String, info: String?) {
-        val navController = findNavController(R.id.nav_host_fragment_activity_main)
         when(action) {
             "OPEN_FORM" -> {
                 navController.navigate(R.id.action_navigation_transactions_to_navigation_form_transaction)
@@ -65,7 +82,6 @@ class MainActivity : AppCompatActivity(), ExportAlertDialogFragment.ExportAlertD
     }
 
     override fun onItemClicked(id: Int) {
-        val navController = findNavController(R.id.nav_host_fragment_activity_main)
         val bundle = Bundle()
         bundle.putBoolean("is-update", true)
         bundle.putInt("idx-id", id)
@@ -139,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 6a03bd6..0000000
--- 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/ui/form_transaction/FormTransaction.kt b/app/src/main/java/com/example/abe/ui/form_transaction/FormTransaction.kt
index b90c4a8..d22f32e 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
@@ -43,7 +43,7 @@ class FormTransaction : Fragment() {
         FormTransactionViewModelFactory((activity?.application as ABEApplication).repository)
     }
 
-    private lateinit var user:String
+    private lateinit var user: String
 
     private var id: Int? = null
 
@@ -59,7 +59,8 @@ class FormTransaction : Fragment() {
         binding.lifecycleOwner = this
         viewModel.amountNumber.observe(viewLifecycleOwner, {})
 
-        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(requireActivity())
+        fusedLocationProviderClient =
+            LocationServices.getFusedLocationProviderClient(requireActivity())
 
         if (requireActivity().intent.hasExtra("random_amount")) {
             viewModel.setRandomAmount(requireActivity().intent.getIntExtra("random_amount", 10000))
@@ -87,13 +88,21 @@ class FormTransaction : Fragment() {
 
         getLocation()
 
-        val sharedPref = requireActivity().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)
-            val trxId = args.getInt("idx-id")
-            displayTrx(trxId)
+            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
         }
@@ -161,8 +170,7 @@ class FormTransaction : Fragment() {
             ) {
                 if (id != null) {
                     viewModel.updateTransaction(id!!)
-                }
-                else {
+                } else {
                     viewModel.insertTransaction(user)
                 }
                 findNavController().navigateUp()
@@ -172,7 +180,7 @@ class FormTransaction : Fragment() {
 
     private fun deleteButtonListener() {
         binding.btnDelete.setOnClickListener {
-            id?.let { viewModel.deleteTransaction(id!!)}
+            id?.let { viewModel.deleteTransaction(id!!) }
             findNavController().navigateUp()
         }
     }
@@ -249,7 +257,8 @@ class FormTransaction : Fragment() {
                     }
                 }
             } else {
-                Toast.makeText(requireActivity(), "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 b5c11e1..9f9b8eb 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
@@ -13,7 +13,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import com.example.abe.ABEApplication
 import com.example.abe.databinding.FragmentTransactionsBinding
 import com.example.abe.types.FragmentListener
-import com.example.abe.ui.form_transaction.FormTransaction
 
 
 class TransactionFragment : Fragment() {
-- 
GitLab