diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 87d10c63772379b42789e6083516912e9b3ad501..1e82142e39492f97568fb785adf3dcd83cd95e69 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -57,5 +57,14 @@
                 <action android:name="com.example.bondoman.services.RandomizeTransaction" />
             </intent-filter>
         </receiver>
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="com.github.mikephil.charting.provider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_paths" />
+        </provider>
     </application>
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/LoginActivity.kt b/app/src/main/java/com/example/bondoman/LoginActivity.kt
index 3b469221573494ba65b1981a9f26ebd8a5b22c7e..2eaeb2e0f2d40f68590b3a847a4c086fc2a6d9ff 100644
--- a/app/src/main/java/com/example/bondoman/LoginActivity.kt
+++ b/app/src/main/java/com/example/bondoman/LoginActivity.kt
@@ -31,8 +31,8 @@ class LoginActivity : AppCompatActivity() {
         buttonLogin.setOnClickListener {
 //            val email = editTextEmail.text.toString()
 //            val password = editTextPassword.text.toString()
-            val email = "13521010@std.stei.itb.ac.id"
-            val password = "password_13521010"
+            val email = "13521003@std.stei.itb.ac.id"
+            val password = "password_13521003"
 
             CoroutineScope(Dispatchers.IO).launch {
                 try {
diff --git a/app/src/main/java/com/example/bondoman/SettingFragment.kt b/app/src/main/java/com/example/bondoman/SettingFragment.kt
index 4e7cb15fd2dfd4a41efaf6691ac9fd2fdca03728..f532d8087e88bd6889fdd044ec3f711f63fb1b46 100644
--- a/app/src/main/java/com/example/bondoman/SettingFragment.kt
+++ b/app/src/main/java/com/example/bondoman/SettingFragment.kt
@@ -5,6 +5,7 @@ import android.content.Context
 import android.content.Context.MODE_PRIVATE
 import android.content.Intent
 import android.graphics.Color
+import android.net.Uri
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
@@ -15,12 +16,15 @@ import android.widget.RelativeLayout
 import android.widget.TextView
 import android.widget.Toast
 import androidx.core.content.ContextCompat
+import androidx.core.content.FileProvider
 import androidx.fragment.app.Fragment
 import androidx.navigation.fragment.findNavController
 import com.example.bondoman.databinding.FragmentSettingBinding
 import com.example.bondoman.helper.Xls
 import com.example.bondoman.retrofit.data.TransactionDB
 import com.example.bondoman.services.RandomizeTransaction
+import com.github.mikephil.charting.BuildConfig
+import java.io.File
 import java.text.SimpleDateFormat
 import java.util.Date
 import java.util.Locale
@@ -92,29 +96,44 @@ class SettingFragment: Fragment() {
     }
 
     private fun sendEmail() {
-        val sharedPreferences =
-            requireActivity().getSharedPreferences(
-                "sharedPrefs",
-                Context.MODE_PRIVATE
-            )
-        val email = sharedPreferences.getString("EMAIL", "") ?: ""
+        val items = arrayOf("xlsx", "xls")
+        var path: String = ""
+        AlertDialog.Builder(requireContext())
+            .setTitle("Choose file format")
+            .setItems(items) { dialog, which ->
+                path = saveToXls(which)
+                val sharedPreferences =
+                    requireActivity().getSharedPreferences(
+                        "sharedPrefs",
+                        Context.MODE_PRIVATE
+                    )
+                val email = sharedPreferences.getString("EMAIL", "") ?: ""
+                val currentDate = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date())
+                val intent = Intent(Intent.ACTION_SEND).apply {
+                    putExtra(Intent.EXTRA_EMAIL, arrayOf(email))
+                    putExtra(Intent.EXTRA_SUBJECT, "Daftar Transaksi")
+                    putExtra(Intent.EXTRA_TEXT, "Daftar Transaksi $currentDate")
+                    type = "message/rfc822" // Email MIME type
 
-        // Create an intent to send an email
-        val intent = Intent(Intent.ACTION_SEND)
-        intent.type = "message/rfc822" // Email MIME type
-        val currentDate = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date())
-        // Fill in the email details (optional)
-        intent.putExtra(Intent.EXTRA_EMAIL, arrayOf(email))
-        intent.putExtra(Intent.EXTRA_SUBJECT, "Daftar Transaksi")
-        intent.putExtra(Intent.EXTRA_TEXT, "Daftar Transaksi $currentDate")
+                    val file = File(path)
+                    if (file.exists()) {
+                        val uri: Uri = FileProvider.getUriForFile(
+                            requireContext(),
+                            BuildConfig.APPLICATION_ID + ".provider",
+                            file
+                        )
+                        addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+                        putExtra(Intent.EXTRA_STREAM, uri)
+                    }
+                }
+                try {
+                    startActivity(Intent.createChooser(intent, "Send Email"))
+                } catch (e: ActivityNotFoundException) {
+                    Toast.makeText(activity, "No email app found", Toast.LENGTH_SHORT).show()
+                }
+            }
+            .show()
 
-        try {
-            // Start the email activity
-            startActivity(Intent.createChooser(intent, "Send Email"))
-        } catch (e: ActivityNotFoundException) {
-            // Handle errors if no email client is installed
-            Toast.makeText(activity, "No email app found", Toast.LENGTH_SHORT).show()
-        }
     }
 
     private fun logout() {
@@ -132,21 +151,53 @@ class SettingFragment: Fragment() {
         editor.apply()
     }
 
-    private fun saveToXls() {
+    private fun saveToXls(format: Int = -1): String {
         val items = arrayOf("xlsx", "xls")
-        AlertDialog.Builder(requireContext())
-            .setTitle("Choose file format")
-            .setItems(items) { dialog, which ->
-                val transactions = database.transactionDao().getAll()
-                val internalStorageDir = requireContext().getFilesDir()
-                savedFilePath = Xls.saveXls(requireContext(), transactions, items[which], internalStorageDir)
-                if (savedFilePath != null) {
-                    Toast.makeText(requireContext(), "File saved to $savedFilePath", Toast.LENGTH_SHORT).show()
-                } else {
-                    Toast.makeText(requireContext(), "Failed to save file", Toast.LENGTH_SHORT).show()
+        if (format==-1) {
+            AlertDialog.Builder(requireContext())
+                .setTitle("Choose file format")
+                .setItems(items) { dialog, which ->
+                    val transactions = database.transactionDao().getAll()
+                    val internalStorageDir = requireContext().getFilesDir()
+                    savedFilePath = Xls.saveXls(
+                        requireContext(),
+                        transactions,
+                        items[which],
+                        internalStorageDir
+                    )
+                    if (savedFilePath != null) {
+                        Toast.makeText(
+                            requireContext(),
+                            "File saved to $savedFilePath",
+                            Toast.LENGTH_SHORT
+                        ).show()
+                    } else {
+                        Toast.makeText(requireContext(), "Failed to save file", Toast.LENGTH_SHORT)
+                            .show()
+                    }
                 }
+                .show()
+        } else {
+            val transactions = database.transactionDao().getAll()
+            val internalStorageDir = requireContext().getFilesDir()
+            savedFilePath = Xls.saveXls(
+                requireContext(),
+                transactions,
+                items[format],
+                internalStorageDir
+            )
+            if (savedFilePath != null) {
+                Toast.makeText(
+                    requireContext(),
+                    "File saved to $savedFilePath",
+                    Toast.LENGTH_SHORT
+                ).show()
+            } else {
+                Toast.makeText(requireContext(), "Failed to save file", Toast.LENGTH_SHORT)
+                    .show()
             }
-            .show()
+        }
+        return savedFilePath?.toString() ?: ""
     }
 
 }
\ No newline at end of file
diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml
new file mode 100644
index 0000000000000000000000000000000000000000..89e3f0e09b6c08dab4c8ba08c7f8e6b5302ab29c
--- /dev/null
+++ b/app/src/main/res/xml/file_paths.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<paths xmlns:android="http://schemas.android.com/apk/res/android">
+    <files-path name="internal_files" path="."/>
+</paths>
\ No newline at end of file