diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 312bf2eab8b229c84f94db3fd525d55fab3ad5ff..b589d56e9f285d8cfdc6c270853a5d439021a278 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="CompilerConfiguration">
-    <bytecodeTargetLevel target="20" />
+    <bytecodeTargetLevel target="17" />
   </component>
 </project>
\ No newline at end of file
diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 1026ee158eb30a72805ac4f497ab5e0636d20508..a59dad3ed4fd5b5cc9ac925010bdca6e7aae0f06 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -10,12 +10,12 @@
               <deviceKey>
                 <Key>
                   <type value="SERIAL_NUMBER" />
-                  <value value="adb-RRCT400LBLA-VDbMwR._adb-tls-connect._tcp" />
+                  <value value="adb-RR8RB07XHJE-thKlaa._adb-tls-connect._tcp" />
                 </Key>
               </deviceKey>
             </Target>
           </runningDeviceTargetSelectedWithDropDown>
-          <timeTargetWasSelectedWithDropDown value="2024-04-04T18:09:34.930937Z" />
+          <timeTargetWasSelectedWithDropDown value="2024-04-05T06:31:53.707226200Z" />
         </State>
       </entry>
     </value>
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 42da8e87c91e9cb5366621afb4dec6a8a5750139..824785de182ab146db70f15ae47b10a232c50bf1 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_20" default="true" project-jdk-name="corretto-20" project-jdk-type="JavaSDK" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK" />
 </project>
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ff3d6e7d678942a1cb5f55ac0aa0249a3b280c3e..0af54e02768497ce456e4844a8f6d1405a6f4110 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,7 +12,6 @@
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
-
     <application
         android:name=".MainApp"
         android:allowBackup="true"
@@ -24,6 +23,18 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.PSI"
         tools:targetApi="31">
+
+        <!-- Add the provider declaration -->
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="${applicationId}.provider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_paths" />
+        </provider>
+
         <activity
             android:name=".TransactionDetailActivity"
             android:exported="false" />
@@ -56,4 +67,4 @@
         <service android:name=".services.BackgroundService" />
     </application>
 
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt b/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt
index 11dc096f5094f6e8051eb4bb13c45e9e1648a089..29e89eeefba7b0fc5def388b6b27a9acf5463766 100644
--- a/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/pbd/psi/ui/settings/SettingsFragment.kt
@@ -12,6 +12,7 @@ import android.view.View
 import android.view.ViewGroup
 import android.widget.Toast
 import androidx.activity.result.contract.ActivityResultContracts
+import androidx.core.content.FileProvider
 import androidx.documentfile.provider.DocumentFile
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
@@ -25,6 +26,8 @@ import org.apache.poi.ss.usermodel.HorizontalAlignment
 import org.apache.poi.ss.usermodel.IndexedColors
 import org.apache.poi.ss.usermodel.VerticalAlignment
 import org.apache.poi.xssf.usermodel.XSSFWorkbook
+import java.io.File
+import java.io.FileOutputStream
 import kotlin.collections.ArrayList
 
 @AndroidEntryPoint
@@ -40,6 +43,7 @@ class SettingsFragment : Fragment() {
     private lateinit var sharedpreferences: SharedPreferences
     private lateinit var fileName: String
     private val viewModel: SettingsViewModel by viewModels()
+    private lateinit var fileUri : DocumentFile
 
     override fun onCreateView(
         inflater: LayoutInflater, container: ViewGroup?,
@@ -65,13 +69,25 @@ class SettingsFragment : Fragment() {
         }
 
         binding.btnUploadHistory.setOnClickListener {
-            val email = sharedpreferences.getString(EMAIL, "")
-            val intentEmail = Intent(Intent.ACTION_SEND)
-            intentEmail.type = "text/plain"
-            intentEmail.putExtra(Intent.EXTRA_EMAIL, arrayOf(email))
-            intentEmail.putExtra(Intent.EXTRA_SUBJECT, "Upload History")
-            intentEmail.putExtra(Intent.EXTRA_TEXT, "Berikut ini laporan hasil transaksi akun $email :\n")
-            startActivity(Intent.createChooser(intentEmail, "Send Email"))
+
+
+
+            try {
+                val email = sharedpreferences.getString(EMAIL, "")
+                val intentEmail = Intent(Intent.ACTION_SEND)
+                intentEmail.type = "text/plain"
+                intentEmail.putExtra(Intent.EXTRA_EMAIL, arrayOf(email))
+                intentEmail.putExtra(Intent.EXTRA_SUBJECT, "Upload History")
+                intentEmail.putExtra(Intent.EXTRA_TEXT, "Berikut ini laporan hasil transaksi akun $email :\n")
+                intentEmail.putExtra(Intent.EXTRA_STREAM, this.fileUri.uri)
+                intentEmail.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+                startActivity(Intent.createChooser(intentEmail, "Send Email"))
+            }
+            catch (e: Exception) {
+                Log.e("Error", e.toString())
+                Toast.makeText(requireContext(), "Please save transaction file", Toast.LENGTH_SHORT).show()
+            }
+
         }
 
         binding.btnSettings.setOnClickListener {
@@ -82,11 +98,11 @@ class SettingsFragment : Fragment() {
             builder.setItems(exportOptions) { _: DialogInterface?, which: Int ->
                 when (which) {
                     0 ->  {
-                        fileName = "transaction_data.xlsx"
+                        fileName = "transaction_"+sharedpreferences.getString(EMAIL, "")+".xlsx"
                         launchFilePicker()
                     }
                     1 -> {
-                        fileName = "transaction_data.xls"
+                        fileName = "transaction_"+sharedpreferences.getString(EMAIL, "")+"xls"
                         launchFilePicker()
                     }
                 }
@@ -148,13 +164,23 @@ class SettingsFragment : Fragment() {
                 dataRow.createCell(4).setCellValue(transaction.location ?: "")
             }
 
+//            val cacheDir = requireContext().cacheDir
+//            val cacheFile = File(cacheDir, "transaction.xlsx")
+//            val outputStreamCache = FileOutputStream(cacheFile)
+//            workbook.write(outputStreamCache)
+//            workbook.close()
+//            outputStreamCache.close()
+
+
             val file: DocumentFile
-            if(fileName === "transaction_data.xls"){
+            if(fileName === "transaction_"+sharedpreferences.getString(EMAIL, "")+".xls"){
                 file = directory.createFile("application/vnd.ms-excel", fileName)!!
             }else{
                 file = directory.createFile("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName)!!
             }
             val outputStream = requireContext().contentResolver.openOutputStream(file!!.uri)
+            this.fileUri= file
+            Log.d("File xlsx location", "File: $outputStream")
             workbook.write(outputStream)
             workbook.close()
             outputStream?.close()
@@ -164,4 +190,12 @@ class SettingsFragment : Fragment() {
             Toast.makeText(requireContext(), "No transaction data available", Toast.LENGTH_SHORT).show()
         }
     }
+    private fun getFile(): File {
+        val fileName = "transaction_data"+sharedpreferences.getString(EMAIL, "")+".xlsx"
+        val dir = File(requireContext().cacheDir, "excel")
+        if (!dir.exists()) dir.mkdirs()
+        return File(dir, fileName)
+    }
+
+
 }