diff --git a/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionFragment.kt b/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionFragment.kt index be27dae07578b6b13268fd7200efd5e887e30e09..cd11db38e2c06dd0beecf0dd8fbd3046c01acaea 100644 --- a/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionFragment.kt +++ b/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionFragment.kt @@ -1,9 +1,11 @@ package com.example.nerbos.fragments.transaction import android.Manifest +import android.annotation.SuppressLint import android.app.Dialog import android.content.ActivityNotFoundException import android.content.Intent +import android.content.IntentFilter import android.content.pm.PackageManager import android.content.pm.ResolveInfo import android.location.Geocoder @@ -49,7 +51,8 @@ import java.util.Locale class TransactionFragment : Fragment() { - private lateinit var transactionViewModel: TransactionViewModel + private lateinit var transactionViewModel: TransactionViewModel + private lateinit var transactionReceiver: TransactionReceiver private lateinit var authentication: Authentication private var currentLocation: Location? = null private var networkManagerService: NetworkManagerService = NetworkManagerService() @@ -162,9 +165,27 @@ class TransactionFragment : Fragment() { xlsxSend.visibility = View.GONE } + // Randomize Transactionq + view.findViewById<ImageView>(R.id.randomizeTransactionButton).setOnClickListener { + val intent = Intent("ACTION_RANDOMIZE_TRANSACTION") + requireContext().sendBroadcast(intent) + } + return view } + @SuppressLint("UnspecifiedRegisterReceiverFlag") + override fun onResume() { + super.onResume() + transactionReceiver = TransactionReceiver(this) + requireContext().registerReceiver(transactionReceiver, IntentFilter("ACTION_RANDOMIZE_TRANSACTION")) + } + + override fun onPause() { + super.onPause() + requireContext().unregisterReceiver(transactionReceiver) + } + private fun createExcelFile(transactions : List<Transaction>, extension: String) : Workbook{ val workbook : Workbook val sheet : Sheet @@ -306,6 +327,65 @@ class TransactionFragment : Fragment() { dialog.window!!.setBackgroundDrawableResource(R.drawable.round_corner_transparent) dialog.window!!.attributes = layoutParams } + + internal fun showRandomAddTransactionDialog() { + val dialog = Dialog(requireContext()) + + dialog.setContentView(R.layout.add_transaction) + dialog.setCancelable(true) + + val layoutParams = WindowManager.LayoutParams() + layoutParams.copyFrom(dialog.window!!.attributes) + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT + + // Getting reference from elements in the dialog + val nameInput = dialog.findViewById<EditText>(R.id.nameInput) + val nominalInput = dialog.findViewById<EditText>(R.id.nominalInput) + val locationInput = dialog.findViewById<EditText>(R.id.locationInput) + val incomeRadioButton = dialog.findViewById<RadioButton>(R.id.incomeInput) + val outcomeRadioButton = dialog.findViewById<RadioButton>(R.id.outcomeInput) + + // Randomize + val randomName = "Transaction " + (1..1000).random() + val randomNominal = (1..1000000).random().toFloat() + val randomLocation = "Location " + (1..1000).random() + val randomCategory = (0..1).random() // 0 for income, 1 for outcome + + // Setting the random content + nameInput.setText(randomName) + nominalInput.setText(randomNominal.toString()) + locationInput.setText(randomLocation) + + if (randomCategory == 0) { + incomeRadioButton.isChecked = true + } else { + outcomeRadioButton.isChecked = true + } + + dialog.findViewById<Button>(R.id.addButton).setOnClickListener { + if (insertDataToDatabase(dialog)) { + dialog.dismiss() + } + } + + dialog.findViewById<Button>(R.id.cancelButton).setOnClickListener { + dialog.dismiss() + } + + dialog.findViewById<ImageView>(R.id.autoFillLocationButton).setOnClickListener { + if (!networkManagerService.isNetworkAvailable(requireContext())) { + Toast.makeText(requireContext(), "No internet connection, this feature requires internet connection", Toast.LENGTH_SHORT).show() + } else { + locationInput.setText(getAddressName()) + } + } + + dialog.show() + dialog.window!!.setBackgroundDrawableResource(R.drawable.round_corner_transparent) + dialog.window!!.attributes = layoutParams + } + private fun showModifyTransactionDialog(transaction: Transaction) { val dialog = Dialog(requireContext()) diff --git a/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionReceiver.kt b/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionReceiver.kt new file mode 100644 index 0000000000000000000000000000000000000000..81e9924344e5e0769889708f0aa112d4c49b69a4 --- /dev/null +++ b/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionReceiver.kt @@ -0,0 +1,15 @@ +package com.example.nerbos.fragments.transaction + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.widget.Toast + +class TransactionReceiver(private val fragment: TransactionFragment) : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + if (intent?.action == "ACTION_RANDOMIZE_TRANSACTION") { + fragment.showRandomAddTransactionDialog() + Toast.makeText(context, "Broadcast Received: Randomize Transaction", Toast.LENGTH_SHORT).show() + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/random.png b/app/src/main/res/drawable/random.png new file mode 100644 index 0000000000000000000000000000000000000000..8442456fd33c9e24ae3f6db98b31de51d7420c38 Binary files /dev/null and b/app/src/main/res/drawable/random.png differ diff --git a/app/src/main/res/layout/fragment_transaction.xml b/app/src/main/res/layout/fragment_transaction.xml index 10f6f89ddcf185f2a21e3e14a69b5a0a5a7aa234..5958b058e46b416ad179ff50e61af2eb36c81ef4 100644 --- a/app/src/main/res/layout/fragment_transaction.xml +++ b/app/src/main/res/layout/fragment_transaction.xml @@ -49,6 +49,17 @@ app:layout_constraintTop_toBottomOf="@+id/saveTransactionsButton" /> + <ImageView + android:id="@+id/randomizeTransactionButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="30dp" + android:layout_marginEnd="50dp" + android:background="@drawable/random" + android:contentDescription="@string/randomize_transaction_button" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@id/sendTransactionsButton" /> + <ImageView android:id="@+id/addTransactionButton" android:layout_width="wrap_content" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cc66f87f61f9e12f668d8f4a13303c42204bc2ea..ebab2ec94a85baefa1fdfb70130d6d4f05b6f469 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ -<resources> +<resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_name">NerbOS</string> <string name="hello_blank_fragment">Hello blank fragment</string> <string name="navbar_transaction">Transactions</string> @@ -17,7 +17,7 @@ <string name="password">password</string> <string name="token">token</string> <string name="key_alias">key13521000</string> - <string name="cipher_transformation">RSA/ECB/PKCS1Padding</string> + <string name="cipher_transformation" tools:ignore="Typos">RSA/ECB/PKCS1Padding</string> <string name="android_key_store">AndroidKeyStore</string> <string name="authorization">Authorization</string> <string name="bearer">Bearer</string> @@ -69,5 +69,6 @@ <string name="logo">Logo</string> <string name="back_button">Back Button</string> <string name="autofill_location_button">AutoFill Location Button</string> + <string name="randomize_transaction_button">Randomize Transaction Button</string> </resources> \ No newline at end of file