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