diff --git a/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt b/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt
deleted file mode 100644
index efed7bed338e46d7d40fb2d28fd931d7ad9d0b3c..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/atm/bondowowo/ui/settings/ExportToFileActivity.kt
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.atm.bondowowo.ui.settings
-
-import android.os.Bundle
-import android.widget.Toast
-import androidx.appcompat.app.AppCompatActivity
-import androidx.lifecycle.Observer
-import com.atm.bondowowo.data.local.entity.TransactionEntity
-import com.atm.bondowowo.utils.DialogHelper
-import com.atm.bondowowo.utils.NetworkHelper
-import com.atm.bondowowo.utils.NetworkStateLiveData
-import org.apache.poi.xssf.usermodel.XSSFWorkbook
-import java.io.File
-import java.io.FileOutputStream
-
-class ExportToFileActivity : AppCompatActivity() {
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-//        setContentView(R.layout.fragment_transaction)
-        val networkStateLiveData = NetworkStateLiveData(this)
-        networkStateLiveData.observe(this, Observer { isConnected ->
-            if (!isConnected) {
-                DialogHelper.showNoInternetDialog(this)
-            }
-        })
-
-        val transactionEntities: ArrayList<TransactionEntity>? = intent.getSerializableExtra("transactions") as? ArrayList<TransactionEntity>
-
-        if (transactionEntities != null) {
-            exportDataToFile(transactionEntities)
-        } else {
-            Toast.makeText(this, "No transaction data available", Toast.LENGTH_SHORT).show()
-        }
-    }
-
-    private fun exportDataToFile(transactionEntities: List<TransactionEntity>) {
-        val workbook = XSSFWorkbook()
-        val sheet = workbook.createSheet("Transaction Data")
-
-        val headerRow = sheet.createRow(0)
-        val headers = arrayOf("Date", "Name", "Category", "Amount", "Location")
-//        val headers = arrayOf("ID", "Date", "Name", "Category", "Amount", "Location")
-
-        headers.forEachIndexed { index, headerText ->
-            val cell = headerRow.createCell(index)
-            cell.setCellValue(headerText)
-        }
-
-        transactionEntities.forEachIndexed { rowIndex, transaction ->
-            val dataRow = sheet.createRow(rowIndex + 1)
-//            dataRow.createCell(0).setCellValue(transaction.id ?: -1)
-            dataRow.createCell(0).setCellValue(transaction.date.toString())
-            dataRow.createCell(1).setCellValue(transaction.nama ?: "")
-            dataRow.createCell(2).setCellValue(transaction.kategori ?: "")
-            dataRow.createCell(3).setCellValue(transaction.nominal ?: 0.0)
-            dataRow.createCell(4).setCellValue(transaction.lokasi ?: "")
-        }
-
-
-
-        val file = File(getExternalFilesDir(null), "transaction_data.xlsx") // sesuaikan nama filenya nnti
-        val outputStream = FileOutputStream(file)
-        workbook.write(outputStream)
-        workbook.close()
-        outputStream.close()
-
-        Toast.makeText(this, "Data exported to ${file.absolutePath}", Toast.LENGTH_SHORT).show()
-    }
-
-}
diff --git a/app/src/main/java/com/atm/bondowowo/ui/settings/SendEmailActivity.kt b/app/src/main/java/com/atm/bondowowo/ui/settings/SendEmailActivity.kt
deleted file mode 100644
index 5cf79b4d5d078ec5f9baafe39854e041ba18a100..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/atm/bondowowo/ui/settings/SendEmailActivity.kt
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.atm.bondowowo.ui.settings
-
-import android.content.Intent
-import androidx.appcompat.app.AppCompatActivity
-import android.os.Bundle
-import android.widget.Toast
-import androidx.core.content.FileProvider
-import com.atm.bondowowo.R
-import java.io.File
-import android.content.pm.PackageManager
-import androidx.lifecycle.Observer
-import com.atm.bondowowo.utils.DialogHelper
-import com.atm.bondowowo.utils.NetworkHelper
-import com.atm.bondowowo.utils.NetworkStateLiveData
-
-
-class SendEmailActivity : AppCompatActivity() {
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        setContentView(R.layout.fragment_transaction)
-
-        val networkStateLiveData = NetworkStateLiveData(this)
-        networkStateLiveData.observe(this, Observer { isConnected ->
-            if (!isConnected) {
-                DialogHelper.showNoInternetDialog(this)
-            }
-        })
-
-        sendEmailWithAttachment2()
-    }
-
-    private fun sendEmailWithAttachment2() {
-        val file = getLatestFileFromStorage()
-
-        if (file != null && file.exists()) {
-            val uri = FileProvider.getUriForFile(this, "${packageName}.fileprovider", file)
-
-            val resInfoList = packageManager.queryIntentActivities(Intent(Intent.ACTION_SEND).apply {
-                type = "application/vnd.ms-excel"
-                putExtra(Intent.EXTRA_STREAM, uri)
-            }, PackageManager.MATCH_DEFAULT_ONLY)
-
-            for (resolveInfo in resInfoList) {
-                val packageName = resolveInfo.activityInfo.packageName
-                grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION)
-            }
-
-            val emailIntent = Intent(Intent.ACTION_SEND)
-            emailIntent.type = "application/vnd.ms-excel"
-            emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf("shidqizh@gmail.com")) // tar benerin ini kirim ke user yang lagi login
-            emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Export File")
-            emailIntent.putExtra(Intent.EXTRA_TEXT, "Berikut terlampir file transaksi dalam format spreadsheet.")
-            emailIntent.putExtra(Intent.EXTRA_STREAM, uri)
-
-            try {
-                startActivity(Intent.createChooser(emailIntent, "Send mail..."))
-            } catch (ex: android.content.ActivityNotFoundException) {
-                Toast.makeText(this, "No email clients installed.", Toast.LENGTH_SHORT).show()
-            }
-        } else {
-            Toast.makeText(this, "No transaction file found or attached.", Toast.LENGTH_SHORT).show()
-        }
-    }
-
-    private fun getLatestFileFromStorage(): File? {
-        val directoryPath = "/storage/emulated/0/Android/data/com.atm.bondowowo/files"
-        val directory = File(directoryPath)
-
-        if (!directory.exists() || !directory.isDirectory) {
-            return null
-        }
-
-        val files = directory.listFiles()?.filter { it.isFile }?.sortedByDescending { it.lastModified() }
-        return files?.firstOrNull()
-    }
-
-}
diff --git a/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsActivity.kt b/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsActivity.kt
deleted file mode 100644
index 6b389b4ca9dfa91da201117c260b177c65281adf..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsActivity.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.atm.bondowowo.ui.settings
-
-class SettingsActivity {
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt b/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt
index 34b88565e0c2c6b78956156e9177b5b82d7ac39e..6afe42f25df48f5f456f320bb17786c2f765afcc 100644
--- a/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/atm/bondowowo/ui/settings/SettingsFragment.kt
@@ -10,6 +10,8 @@ import android.widget.LinearLayout
 import androidx.fragment.app.Fragment
 import com.atm.bondowowo.R
 import com.atm.bondowowo.data.local.database.AppDatabase
+import com.atm.bondowowo.utils.ExportToFileUtil
+import com.atm.bondowowo.utils.SendEmailUtil
 
 
 class SettingsFragment : Fragment(){
@@ -34,13 +36,12 @@ class SettingsFragment : Fragment(){
         database = AppDatabase.getInstance(context)
 
         btn_export.setOnClickListener {
-            val intent = Intent(requireContext(), ExportToFileActivity::class.java)
-            var listOfTransactions = database.transactionDao().getAll()
-            intent.putExtra("transactions", ArrayList(listOfTransactions))
-            startActivity(intent)        }
+            val listOfTransactions = database.transactionDao().getAll()
+            ExportToFileUtil.exportDataToFile(requireContext(), listOfTransactions)
+        }
 
         btn_send_email.setOnClickListener {
-            startActivity(Intent(requireContext(), SendEmailActivity::class.java))
+            SendEmailUtil.sendEmailWithAttachment(requireContext())
         }
 
         btn_logout.setOnClickListener {
diff --git a/app/src/main/java/com/atm/bondowowo/utils/ExportToFileUtil.kt b/app/src/main/java/com/atm/bondowowo/utils/ExportToFileUtil.kt
new file mode 100644
index 0000000000000000000000000000000000000000..383fe812b14cd50780de7318ae90c29c7688838f
--- /dev/null
+++ b/app/src/main/java/com/atm/bondowowo/utils/ExportToFileUtil.kt
@@ -0,0 +1,54 @@
+package com.atm.bondowowo.utils
+
+import android.content.Context
+import android.widget.Toast
+import com.atm.bondowowo.data.local.entity.TransactionEntity
+import org.apache.poi.xssf.usermodel.XSSFWorkbook
+import java.io.File
+import java.io.FileOutputStream
+
+object ExportToFileUtil {
+
+    fun exportDataToFile(
+        context: Context,
+        transactionEntities: List<TransactionEntity>
+    ) {
+        val networkStateLiveData = NetworkStateLiveData(context)
+        networkStateLiveData.observeForever { isConnected ->
+            if (!isConnected) {
+                DialogHelper.showNoInternetDialog(context)
+            }
+        }
+
+        if (transactionEntities.isNotEmpty()) {
+            val workbook = XSSFWorkbook()
+            val sheet = workbook.createSheet("Transaction Data")
+
+            val headerRow = sheet.createRow(0)
+            val headers = arrayOf("Date", "Name", "Category", "Amount", "Location")
+            headers.forEachIndexed { index, headerText ->
+                val cell = headerRow.createCell(index)
+                cell.setCellValue(headerText)
+            }
+
+            transactionEntities.forEachIndexed { rowIndex, transaction ->
+                val dataRow = sheet.createRow(rowIndex + 1)
+                dataRow.createCell(0).setCellValue(transaction.date.toString())
+                dataRow.createCell(1).setCellValue(transaction.nama ?: "")
+                dataRow.createCell(2).setCellValue(transaction.kategori ?: "")
+                dataRow.createCell(3).setCellValue(transaction.nominal ?: 0.0)
+                dataRow.createCell(4).setCellValue(transaction.lokasi ?: "")
+            }
+
+            val file = File(context.getExternalFilesDir(null), "transaction_data.xlsx")
+            val outputStream = FileOutputStream(file)
+            workbook.write(outputStream)
+            workbook.close()
+            outputStream.close()
+
+            Toast.makeText(context, "Data exported to ${file.absolutePath}", Toast.LENGTH_SHORT).show()
+        } else {
+            Toast.makeText(context, "No transaction data available", Toast.LENGTH_SHORT).show()
+        }
+    }
+}
diff --git a/app/src/main/java/com/atm/bondowowo/utils/SendEmailUtil.kt b/app/src/main/java/com/atm/bondowowo/utils/SendEmailUtil.kt
new file mode 100644
index 0000000000000000000000000000000000000000..2d03679d6bfab7207c03d70ff17199f50773b544
--- /dev/null
+++ b/app/src/main/java/com/atm/bondowowo/utils/SendEmailUtil.kt
@@ -0,0 +1,62 @@
+package com.atm.bondowowo.utils
+
+import android.content.Context
+import android.content.Intent
+import android.widget.Toast
+import androidx.core.content.FileProvider
+import java.io.File
+
+object SendEmailUtil {
+
+    fun sendEmailWithAttachment(context: Context) {
+        val networkStateLiveData = NetworkStateLiveData(context)
+        networkStateLiveData.observeForever { isConnected ->
+            if (!isConnected) {
+                DialogHelper.showNoInternetDialog(context)
+            }
+        }
+
+        val file = getLatestFileFromStorage(context)
+
+        if (file != null && file.exists()) {
+            val uri = FileProvider.getUriForFile(context, "${context.packageName}.fileprovider", file)
+
+            val resInfoList = context.packageManager.queryIntentActivities(Intent(Intent.ACTION_SEND).apply {
+                type = "application/vnd.ms-excel"
+                putExtra(Intent.EXTRA_STREAM, uri)
+            }, Context.MODE_PRIVATE)
+
+            for (resolveInfo in resInfoList) {
+                val packageName = resolveInfo.activityInfo.packageName
+                context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION)
+            }
+
+            val emailIntent = Intent(Intent.ACTION_SEND)
+            emailIntent.type = "application/vnd.ms-excel"
+            emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf("shidqizh@gmail.com")) // masi pr ini benerin ke email pengguna sekarang
+            emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Export File")
+            emailIntent.putExtra(Intent.EXTRA_TEXT, "Berikut terlampir file transaksi dalam format spreadsheet.")
+            emailIntent.putExtra(Intent.EXTRA_STREAM, uri)
+
+            try {
+                context.startActivity(Intent.createChooser(emailIntent, "Send mail..."))
+            } catch (ex: android.content.ActivityNotFoundException) {
+                Toast.makeText(context, "No email clients installed.", Toast.LENGTH_SHORT).show()
+            }
+        } else {
+            Toast.makeText(context, "No transaction file found or attached.", Toast.LENGTH_SHORT).show()
+        }
+    }
+
+    private fun getLatestFileFromStorage(context: Context): File? {
+        val directoryPath = "/storage/emulated/0/Android/data/com.atm.bondowowo/files"
+        val directory = File(directoryPath)
+
+        if (!directory.exists() || !directory.isDirectory) {
+            return null
+        }
+
+        val files = directory.listFiles()?.filter { it.isFile }?.sortedByDescending { it.lastModified() }
+        return files?.firstOrNull()
+    }
+}