From 1bd1dd8cf50ccf2756c88c98f1975c70b8c8b1e1 Mon Sep 17 00:00:00 2001 From: Haidar <16521522@mahasiswa.itb.ac.id> Date: Fri, 5 Apr 2024 08:42:54 +0700 Subject: [PATCH] feat: add random transaction and intent gmail v1 --- .../ui/settings/SettingsFragment.kt | 61 +++++++++++++++++++ .../ui/settings/SettingsViewModel.kt | 1 - .../ui/transactions/AddTransactionFragment.kt | 40 +++++++++++- app/src/main/res/layout/fragment_settings.xml | 17 +++++- 4 files changed, 114 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/pbd/tubes/exe_android/ui/settings/SettingsFragment.kt b/app/src/main/java/pbd/tubes/exe_android/ui/settings/SettingsFragment.kt index b5814b9..8fb0123 100644 --- a/app/src/main/java/pbd/tubes/exe_android/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/pbd/tubes/exe_android/ui/settings/SettingsFragment.kt @@ -3,21 +3,28 @@ package pbd.tubes.exe_android.ui.settings import android.content.Context.MODE_PRIVATE import android.content.Intent import android.os.Bundle +import android.os.Environment import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.Toast +import androidx.core.content.FileProvider import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController import pbd.tubes.exe_android.LoginActivity import pbd.tubes.exe_android.R import pbd.tubes.exe_android.databinding.FragmentSettingsBinding +import java.io.File +import kotlin.random.Random class SettingsFragment : Fragment() { private var _binding: FragmentSettingsBinding? = null + private lateinit var fragmentManager : FragmentManager // This property is only valid between onCreateView and // onDestroyView. @@ -61,7 +68,33 @@ class SettingsFragment : Fragment() { } } + val sendButton = view.findViewById<Button>(R.id.send_button) + sendButton.setOnClickListener { + val email = "13521025@std.stei.itb.ac.id" + val subject = "Transaction Details" + val text = "Please find attached the transaction details." + + sendTransactionsViaEmail(email, subject, text) + + } + + val randomize = view.findViewById<Button>(R.id.randomize_button) + randomize.setOnClickListener { + + val randomNumber = generateRandomNumber(1000, 9999) + val intent = Intent("pbd.tubes.exe_android.ACTION_RANDOMIZE_TRANSAKSI").apply { + putExtra("randomNumber", randomNumber) + } + requireContext().sendBroadcast(intent) + Log.d("Onpause setting", "Settinganjay") + findNavController().navigate(R.id.navigation_add_transaction) + + } + + val logoutButton = view.findViewById<Button>(R.id.log_out_button) + + logoutButton.setOnClickListener { logout() } @@ -71,6 +104,11 @@ class SettingsFragment : Fragment() { super.onDestroyView() _binding = null } + + override fun onPause() { + super.onPause() + + } private fun logout() { val sharedPreferences = requireContext().getSharedPreferences("user_session", MODE_PRIVATE) sharedPreferences.edit().clear().apply() @@ -79,4 +117,27 @@ class SettingsFragment : Fragment() { startActivity(intent) requireActivity().finish() } + + private fun sendTransactionsViaEmail(email: String, subject: String, text: String) { + val downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + + val filePath = File(downloadsDir, "daftar_transaksi.xlsx") + val fileUri = FileProvider.getUriForFile( + requireContext(), + requireContext().applicationContext.packageName + ".provider", + filePath + ) + val intent = Intent(Intent.ACTION_SEND) + intent.type = "message/rfc822" + intent.putExtra(Intent.EXTRA_EMAIL, arrayOf(email)) + intent.putExtra(Intent.EXTRA_SUBJECT, subject) + intent.putExtra(Intent.EXTRA_TEXT, text) + intent.putExtra(Intent.EXTRA_STREAM, fileUri) + intent.setPackage("com.google.android.gm") + requireContext().startActivity(intent) + } + + private fun generateRandomNumber(min: Int, max: Int): Int { + return Random.nextInt(min, max + 1) // Generates a random number between min (inclusive) and max (inclusive) + } } \ No newline at end of file diff --git a/app/src/main/java/pbd/tubes/exe_android/ui/settings/SettingsViewModel.kt b/app/src/main/java/pbd/tubes/exe_android/ui/settings/SettingsViewModel.kt index 81646ae..93bdc64 100644 --- a/app/src/main/java/pbd/tubes/exe_android/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/pbd/tubes/exe_android/ui/settings/SettingsViewModel.kt @@ -21,7 +21,6 @@ import java.io.File import java.io.FileOutputStream import java.util.Locale - class SettingsViewModel( private val transactionsRepository: TransactionsRepository ) : ViewModel() { diff --git a/app/src/main/java/pbd/tubes/exe_android/ui/transactions/AddTransactionFragment.kt b/app/src/main/java/pbd/tubes/exe_android/ui/transactions/AddTransactionFragment.kt index 0268388..0424f47 100644 --- a/app/src/main/java/pbd/tubes/exe_android/ui/transactions/AddTransactionFragment.kt +++ b/app/src/main/java/pbd/tubes/exe_android/ui/transactions/AddTransactionFragment.kt @@ -1,5 +1,9 @@ package pbd.tubes.exe_android.ui.transactions +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -19,10 +23,24 @@ import pbd.tubes.exe_android.models.TransactionCategory class AddTransactionFragment : Fragment() { private var _binding: FragmentAddTransactionBinding? = null - + private val intentFilter = IntentFilter("pbd.tubes.exe_android.ACTION_RANDOMIZE_TRANSAKSI") + private val receiver : BroadcastReceiver = object : BroadcastReceiver(){ + override fun onReceive(context: Context, intent: Intent){ + val randomNumber = intent.getIntExtra("randomNumber", 0) ?: 0 + random = randomNumber +// Log.d("Ini random", randomNumber.toString()) + } + } // This property is only valid between onCreateView and // onDestroyView. private val binding get() = _binding!! + private val viewModel: AddTransactionViewModel by viewModels(factoryProducer = { AddTransactionViewModel.Factory }) + override fun onAttach(context: Context) { + super.onAttach(context) + requireContext().registerReceiver(receiver, intentFilter) + + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -30,8 +48,7 @@ class AddTransactionFragment : Fragment() { ): View { _binding = FragmentAddTransactionBinding.inflate(inflater, container, false) val root: View = binding.root - - val viewModel: AddTransactionViewModel by viewModels(factoryProducer = { AddTransactionViewModel.Factory }) +// onRandomNumberReceived(0) val transactionName: TextInputLayout = binding.transactionNameInputLayout viewModel.trName.observe(viewLifecycleOwner) { @@ -39,9 +56,15 @@ class AddTransactionFragment : Fragment() { } val transactionNominal: TextInputLayout = binding.transactionNominalInputLayout +// Log.d("NilaiRandom", "dapetnilairandom $random") viewModel.trNominal.observe(viewLifecycleOwner) { transactionNominal.editText?.setText(it) } + if (random != null){ + transactionNominal.editText?.setText(random.toString()) + } else { + transactionNominal.editText?.setText("") + } val transactionCategoryPemasukan: RadioButton = binding.radioPemasukan viewModel.trCategoryMasuk.observe(viewLifecycleOwner){ @@ -57,6 +80,7 @@ class AddTransactionFragment : Fragment() { transactionLocation.editText?.setText(it) } + fun chooseCategory() : TransactionCategory? { if (transactionCategoryPemasukan.isChecked){ return TransactionCategory.PEMASUKAN @@ -90,8 +114,18 @@ class AddTransactionFragment : Fragment() { return root } + + companion object{ + private var random: Int? = null + } + override fun onPause() { + super.onPause() + random = null + } + override fun onDestroyView() { super.onDestroyView() + requireContext().unregisterReceiver(receiver) _binding = null } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index e3e2e58..86f2a23 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -6,6 +6,7 @@ android:layout_height="match_parent" tools:context=".ui.settings.SettingsFragment" tools:ignore="HardcodedText" + android:id="@+id/fragment_settings" > <ToggleButton @@ -79,6 +80,20 @@ app:layout_constraintStart_toStartOf="@+id/save_button" app:layout_constraintTop_toBottomOf="@+id/confirm_save_button" /> + <Button + android:id="@+id/randomize_button" + style="@style/Widget.Material3.Button" + android:textAppearance="@style/TextAppearance.AppCompat.Medium" + android:backgroundTint="@color/gray_200" + android:textColor="@android:color/black" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:text="Randomize transaksi" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="@+id/save_button" + app:layout_constraintTop_toBottomOf="@+id/send_button" /> + <Button android:id="@+id/log_out_button" style="@style/Widget.Material3.Button" @@ -91,5 +106,5 @@ android:text="Keluar" app:layout_constraintEnd_toEndOf="@+id/send_button" app:layout_constraintStart_toStartOf="@+id/send_button" - app:layout_constraintTop_toBottomOf="@+id/send_button" /> + app:layout_constraintTop_toBottomOf="@+id/randomize_button" /> </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file -- GitLab