From 2ca96c6eb7d76a6bf47bf70c63e4fdd0acd027fb Mon Sep 17 00:00:00 2001
From: Haziq <haziqabiyyu@gmail.com>
Date: Tue, 2 Apr 2024 00:14:14 +0700
Subject: [PATCH] feat: randomize transaction using broadcast receiver

---
 .../bondoman/activities/AddTransaction.kt     |  24 ++++------
 .../bondoman/activities/MainActivity.kt       |  17 ++++++-
 .../bondoman/fragments/SettingsFragment.kt    |  39 ++++++++++++++++
 .../bondoman/receivers/RandomizeReceiver.kt   |  14 ++++++
 app/src/main/res/drawable/icon_randomize.png  | Bin 0 -> 1469 bytes
 app/src/main/res/layout/fragment_settings.xml |  44 +++++++++++-------
 app/src/main/res/values/strings.xml           |  10 ++--
 7 files changed, 111 insertions(+), 37 deletions(-)
 create mode 100644 app/src/main/java/com/example/bondoman/receivers/RandomizeReceiver.kt
 create mode 100644 app/src/main/res/drawable/icon_randomize.png

diff --git a/app/src/main/java/com/example/bondoman/activities/AddTransaction.kt b/app/src/main/java/com/example/bondoman/activities/AddTransaction.kt
index 04d0987..5b757bf 100644
--- a/app/src/main/java/com/example/bondoman/activities/AddTransaction.kt
+++ b/app/src/main/java/com/example/bondoman/activities/AddTransaction.kt
@@ -1,25 +1,14 @@
 package com.example.bondoman.activities
 
 import android.app.Activity
-import android.app.DatePickerDialog
 import android.content.Intent
-import android.graphics.Color
 import android.os.Bundle
-import android.text.TextUtils
-import android.util.Log
-import android.view.View
 import android.widget.ArrayAdapter
 import android.widget.Button
-import android.widget.DatePicker
 import android.widget.EditText
 import androidx.appcompat.app.AppCompatActivity
 import com.example.bondoman.R
 import android.widget.Spinner
-import com.example.bondoman.adapter.RecyclerViewAdapter
-import com.example.bondoman.entities.Transaction
-import com.example.bondoman.viewModels.TransactionsViewModel
-import java.util.Calendar
-import java.util.Date
 
 
 class AddTransaction : AppCompatActivity() {
@@ -28,7 +17,10 @@ class AddTransaction : AppCompatActivity() {
         setContentView(R.layout.activity_add_transaksi)
         supportActionBar?.title = "Add Transaction"
 
+        val editTextTitle = findViewById<EditText>(R.id.editTextTitle)
         val spinnerCategory : Spinner = findViewById(R.id.spinnerCategory)
+        val editTextAmount = findViewById<EditText>(R.id.editTextAmount)
+        val editTextLocation = findViewById<EditText>(R.id.editTextLocation)
 
         val adapter = ArrayAdapter.createFromResource(
             this,
@@ -36,14 +28,18 @@ class AddTransaction : AppCompatActivity() {
             R.layout.spinner_dropdown
         )
 
+        editTextTitle.setText(intent.getStringExtra("TITLE"))
+        spinnerCategory.setSelection(intent.getIntExtra("TYPE", 0))
+        editTextAmount.setText(intent.getFloatExtra("AMOUNT", 0f).toString())
+
         spinnerCategory.adapter = adapter
 
         val submitButton : Button = findViewById(R.id.buttonSubmit)
         submitButton.setOnClickListener {
-            val title = findViewById<EditText>(R.id.editTextTitle).text.toString()
+            val title = editTextTitle.text.toString()
             val category = spinnerCategory.selectedItem.toString()
-            val amount = findViewById<EditText>(R.id.editTextAmount).text.toString().toFloatOrNull() ?: 0f
-            val location = findViewById<EditText>(R.id.editTextLocation).text.toString()
+            val amount = editTextAmount.text.toString().toFloatOrNull() ?: 0f
+            val location = editTextLocation.text.toString()
 
             val replyIntent = Intent()
             if (title.isEmpty()) {
diff --git a/app/src/main/java/com/example/bondoman/activities/MainActivity.kt b/app/src/main/java/com/example/bondoman/activities/MainActivity.kt
index c7ff18f..56ee2a9 100644
--- a/app/src/main/java/com/example/bondoman/activities/MainActivity.kt
+++ b/app/src/main/java/com/example/bondoman/activities/MainActivity.kt
@@ -15,6 +15,7 @@ import com.google.android.material.bottomnavigation.BottomNavigationView
 
 class MainActivity : AppCompatActivity() {
     private lateinit var tokenExpiredReceiver: BroadcastReceiver
+    private lateinit var randomizeReceiver: BroadcastReceiver
     private lateinit var tokenServiceIntent : Intent
     private var isReceiverRegistered = false
 
@@ -39,6 +40,16 @@ class MainActivity : AppCompatActivity() {
             }
 
         }
+
+        randomizeReceiver = object : BroadcastReceiver() {
+            override fun onReceive(context: Context?, intent: Intent?) {
+                if (intent?.action == "com.example.bondoman.RANDOMIZE_TRANSACTION") {
+                    val randomizeIntent = Intent(this@MainActivity, AddTransaction::class.java)
+                    randomizeIntent.putExtras(intent)
+                    startActivity(randomizeIntent)
+                }
+            }
+        }
         val bottomNavigationView = findViewById<BottomNavigationView
                 >(R.id.bottom_navigation_view)
         val navController = findNavController(R.id.nav_fragment)
@@ -52,8 +63,10 @@ class MainActivity : AppCompatActivity() {
 
     override fun onStart() {
         super.onStart()
-        val filter = IntentFilter("com.example.bondoman.TOKEN_EXPIRED")
-        registerReceiver(tokenExpiredReceiver, filter)
+        val tokenIntentFilter = IntentFilter("com.example.bondoman.TOKEN_EXPIRED")
+        registerReceiver(tokenExpiredReceiver, tokenIntentFilter)
+        val randomizeIntentFilter = IntentFilter("com.example.bondoman.RANDOMIZE_TRANSACTION")
+        registerReceiver(randomizeReceiver, randomizeIntentFilter)
         isReceiverRegistered = true
     }
 
diff --git a/app/src/main/java/com/example/bondoman/fragments/SettingsFragment.kt b/app/src/main/java/com/example/bondoman/fragments/SettingsFragment.kt
index 4580da3..7075f07 100644
--- a/app/src/main/java/com/example/bondoman/fragments/SettingsFragment.kt
+++ b/app/src/main/java/com/example/bondoman/fragments/SettingsFragment.kt
@@ -36,6 +36,7 @@ import java.io.FileOutputStream
 import java.text.SimpleDateFormat
 import java.util.Date
 import java.util.Locale
+import kotlin.random.Random
 
 class SettingsFragment : Fragment() {
     private var _binding: FragmentSettingsBinding? = null
@@ -86,6 +87,9 @@ class SettingsFragment : Fragment() {
         binding.sendButton.setOnClickListener {
             handleSendButtonClick()
         }
+        binding.randomizeButton.setOnClickListener {
+            broadcastRandomizeTransaction()
+        }
     }
 
     private fun showLoading() {
@@ -191,4 +195,39 @@ class SettingsFragment : Fragment() {
             FileProvider.getUriForFile(context, context.applicationContext.packageName + ".provider", file)
         )
     }
+
+    private fun broadcastRandomizeTransaction() {
+        val randomizeIntent = Intent()
+        randomizeIntent.action = "com.example.bondoman.RANDOMIZE_TRANSACTION"
+
+        val title = titleChoices.random()
+        val category = categoryChoices.random()
+        val amount = Random.nextInt(1, 1001)
+
+        randomizeIntent.putExtra("TITLE", title)
+        randomizeIntent.putExtra("TYPE", category)
+        randomizeIntent.putExtra("AMOUNT", amount)
+
+        requireActivity().sendBroadcast(randomizeIntent)
+    }
+
+    companion object {
+        private val titleChoices = arrayOf(
+            "Grocery Mart Purchase",
+            "Spring Wardrobe Update",
+            "Restaurant Dinner",
+            "Gas Station Refill",
+            "New Gadgets",
+            "Electricity Bill Payment",
+            "Local Farmer's Market Haul",
+            "Fitness Studio Membership Renewal",
+            "Home Essentials Restock",
+            "Coffee Shop Treat",
+        )
+
+        private val categoryChoices = arrayOf(
+            0,
+            1
+        )
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/receivers/RandomizeReceiver.kt b/app/src/main/java/com/example/bondoman/receivers/RandomizeReceiver.kt
new file mode 100644
index 0000000..20118bf
--- /dev/null
+++ b/app/src/main/java/com/example/bondoman/receivers/RandomizeReceiver.kt
@@ -0,0 +1,14 @@
+package com.example.bondoman.receivers
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.util.Log
+
+class RandomizeReceiver: BroadcastReceiver() {
+    override fun onReceive(context: Context?, intent: Intent?) {
+        if (intent?.action == "com.example.bondoman.RANDOMIZE_TRANSACTION") {
+            Log.d("AddTransaction", "Received")
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/icon_randomize.png b/app/src/main/res/drawable/icon_randomize.png
new file mode 100644
index 0000000000000000000000000000000000000000..29c662674a66ae5dc44f9ceab1efccb67e160e63
GIT binary patch
literal 1469
zcmV;u1w#6XP)<h;3K|Lk000e1NJLTq003?P003?X1^@s6##<))00009a7bBm000XU
z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsH1yV^wK~#7F?VZ7K
z+c*@4e`iyGI^gRd>44hX-kc7Y4szWay%i)KC>?nAxF={Uusaa90_V6l2TvknSu!a+
z03-qNeKY^WvPF>LH=qClgl-VV%I1U3CmXW)*#2$><(MBfP5bYo&DQ4M_VuKcHpb@3
z=2_#Ndz)KKK#7B}98OA3+1XSW0fGvfBF3gbB)&i|iBsmOJ?BBx0G>6oq=qLoFxx?E
zJmuBEtOu;|koN_c{a`h(bM~2cbMl&O9-tlQ)ZmUf-`x1G`^CGHH*BENQiPp+@B3o~
z|EkPQ*splG^`*RqPy8B(im`+Lc`n~7+^0YmRzqv46h3D@;>>A5w;qMC=mLr_1i#8s
z9v5;Cl{N<ixjfTtyb^B6QEBlY$Zjd}dspw#^MN<O9gdo%4y@XJQ2TQ?HuWeh=UQoO
zzTt3QUFgO@_pL$6CDIj^WpKILS5R1nq}H)B(QwVi;UEa|As{Zdz_O84Aa0ZF@07T1
zu)eT!f`31Sw_CD2Ny~nJ<&#v=q5c{ntaG_^c?9?K#Lh$~c8HCztiBj57m<q?;woV|
zmr`PxOfJp{%h6i*Hj|1YVHvJj;{8wO^Yaeje84!AP<n|WjxY`crI#4u#=4~GP|*M}
z#Emuoee!wrIT1r#gK=n}3=-O^^cfa%NrB}dauF(yF~V{##bB9CF0K@ob14;;$>ib~
zBP^>g8!VSu#1V9KAe33eF$5it3t={K3_(7`W1!NQS;ci!aGP_ohSK5e;s!DyH;_X(
zJg`vUWtJDu?%G1{j-2A`VhVAJJI*d*-11UpK*eQ>ipvxgmnqjIj$5q!tTfN^-Qjh|
zp1U2~J-MpB;#mE-sbFC>+$Z+dNS7o!;8Q^GyT!)a6iAOnh$DpE)J{>}BE*GAJC>Ky
zq@=4CS0h|nmm2AC)#3>8q;d9-<{}N8k2}ZiK#91pv<jJ#qqxtA&l;JLqc}o*J|Z)6
z9M&1@vo@>$o8GI;lpMu1h);ve$Wh!Q;?p2Aaul~ke7++?a_fLgSK)C<fi$@44mi&Y
z`-XVjA=5R*a;tF+*Sa0TYuXNJA##zUIEJ9ZI$4Ti2s)6OrMQk7ZpWYc8q$js#}Hng
zSJ>fo?cxbUJdr5%l^mR1=oIv{aCV{hDl<jJWr~W+6cv{#@1cY+>(cz!(jAx*mc`wU
zp>xH5uOMTQ{kSP0jJq_yiW>pK_)CGPxX2KuS$s#uMP`FAX<f{P{iwKzREQ(3OF6JF
z6&DeMxZ=#fzEoT!2yvx#=^LeRE<^8}43q5A{3>o3!Z;8DQE|g0yEMOw8z$MM`BmI7
z4aT8C1hiGz&(urvi(II<VGQC*GXwilaS<sIS6nr)FBKOVgE-PQ7xp7^A$jtpz%n6>
zKRO`!Jl%h}t>l1iv0Mn_j>naP@*cQ5AbG-bjpfqV{0{j;kXszi+od@upW)8FA1L|8
z_mo!QnUf0fm*(HW-NRR&QqEO$3wQ2p{(`~~;w;Ty<8WSG`2@%x&3%G?D@RNS^3Tj)
zS3M)#a0ita1A@H4bAMbwDco4)g+uUbrJl9yjYlDz8j1wz8q%kg<%|-3;<^GiZ5i6?
zJg2~+rf>^BWT}s;ZwDrzP|dh8N1o1}FeRG@Xst;N?pkoS<5wsCw>RGKzs(;|QsPgW
ze_Y;JBd^QIHK&G<8kqHfH32R58kp^%RazjtK1l4<>NNd%YR`ET2-;PcA_gPfjj9l5
z)jG|&ur(%thZXJtJZrqemqY_kVWCSrt=b)zICK#CH9<S@r~GKcvke-XzuTX^XEgr=
XC`Y143qnfm00000NkvXXu0mjfaLm6>

literal 0
HcmV?d00001

diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml
index 9e4852d..7111406 100644
--- a/app/src/main/res/layout/fragment_settings.xml
+++ b/app/src/main/res/layout/fragment_settings.xml
@@ -12,8 +12,9 @@
         android:layout_height="match_parent">
 
         <LinearLayout
+            android:id="@+id/settings_linear_layout"
             android:layout_width="329dp"
-            android:layout_height="452dp"
+            android:layout_height="wrap_content"
             android:orientation="vertical"
             android:background="@color/bg_color"
             app:layout_constraintBottom_toBottomOf="parent"
@@ -55,6 +56,22 @@
                 android:textSize="17sp"
                 android:textStyle="bold" />
 
+            <Button
+                android:id="@+id/randomize_button"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="24dp"
+                android:background="@drawable/button_background"
+                android:drawableStart="@drawable/ic_randomize"
+                android:drawablePadding="16dp"
+                android:paddingHorizontal="16dp"
+                android:paddingVertical="16dp"
+                android:text="Generate Random Transaction"
+                android:textAlignment="viewStart"
+                android:textAllCaps="false"
+                android:textSize="17sp"
+                android:textStyle="bold" />
+
             <Button
                 android:id="@+id/logout_button"
                 android:layout_width="match_parent"
@@ -70,19 +87,15 @@
                 android:textAllCaps="false"
                 android:textSize="17sp"
                 android:textStyle="bold" />
-        </LinearLayout>
 
-        <com.airbnb.lottie.LottieAnimationView
-            android:id="@+id/loadingAnimation"
-            android:layout_width="335dp"
-            android:layout_height="95dp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent"
-            app:lottie_autoPlay="true"
-            app:lottie_loop="true"
-            app:lottie_rawRes="@raw/loading" />
+            <com.airbnb.lottie.LottieAnimationView
+                android:id="@+id/loadingAnimation"
+                android:layout_width="335dp"
+                android:layout_height="95dp"
+                app:lottie_autoPlay="true"
+                app:lottie_loop="true"
+                app:lottie_rawRes="@raw/loading" />
+        </LinearLayout>
 
         <androidx.coordinatorlayout.widget.CoordinatorLayout
             android:id="@+id/snackbarContainer"
@@ -91,9 +104,8 @@
             android:orientation="vertical"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintHorizontal_bias="0.495"
             app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/loadingAnimation"
-            app:layout_constraintVertical_bias="0.818" />
+            app:layout_constraintTop_toBottomOf="@id/settings_linear_layout"
+            app:layout_constraintVertical_bias="0.421" />
     </androidx.constraintlayout.widget.ConstraintLayout>
 </FrameLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0c3615a..f76093b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -2,10 +2,10 @@
     <string name="app_name">BondoMan</string>
     <!-- TODO: Remove or change this placeholder text -->
     <string name="hello_blank_fragment">Hello blank fragment</string>
-    <string name="save_button_text">Simpan daftar transaksi</string>
-    <string name="send_button_text">Kirim daftar transaksi</string>
-    <string name="logout_button_text">Keluar</string>
-    <string name="data_transaksi_title">Data Transaksi</string>
-    <string name="randomize_buton_text">Randomize transaksi</string>
+    <string name="save_button_text">Export transaction list</string>
+    <string name="send_button_text">Send transaction to email</string>
+    <string name="logout_button_text">Logout</string>
+    <string name="data_transaksi_title">Transaction Data</string>
+    <string name="randomize_buton_text">Randomize transaction</string>
     <string name="items">Items</string>
 </resources>
\ No newline at end of file
-- 
GitLab