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