From a1d6df5cc5a9d92072ee2f2db7de957f6b75cd2c Mon Sep 17 00:00:00 2001
From: Vieri Firdaus <13521099@std.stei.itb.ac.id>
Date: Thu, 4 Apr 2024 23:04:03 +0700
Subject: [PATCH] feat : input data

---
 app/src/main/AndroidManifest.xml              | 11 +++++
 .../pbd/psi/ui/settings/SettingsFragment.kt   | 42 ++++++++++++-------
 2 files changed, 37 insertions(+), 16 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e620aca..3b162eb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -9,6 +9,8 @@
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+
 
     <application
         android:name=".MainApp"
@@ -21,6 +23,15 @@
         android:supportsRtl="true"
         android:theme="@style/Theme.PSI"
         tools:targetApi="31">
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="${applicationId}.fileprovider"
+            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" />
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 5055c86..5084cbc 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.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.Toast
+import androidx.core.content.FileProvider
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
 import androidx.lifecycle.Observer
@@ -92,23 +93,25 @@ class SettingsFragment : Fragment() {
                 val transList = ArrayList(transactions)
                 Log.d("button_export", "MASUKKK")
                 Log.d("TransactionList", "TransactionList: $transList")
-                exportTransactionsToExcel(transList)
+                try {
+                    exportTransactionsToExcel(transList)
+                } catch (e: Exception) {
+                    Log.d("error_excel", "Error: $e")
+                }
             }
 
         }
     }
 
     private fun exportTransactionsToExcel(transactions: List<TransactionEntity>) {
-        val sdf = SimpleDateFormat("yyyy-MM-dd_HH:mm:ss", Locale.getDefault())
+        val sdf = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault())
         val currentDateTime = sdf.format(Date())
         val excelFileName = "Transaction_Report_$currentDateTime.xlsx"
 
-        val excelFilePath = "${requireContext().externalCacheDir}/$excelFileName"
+        val excelFile = File(requireContext().externalCacheDir, excelFileName)
 
         // Write transactions data to Excel file
-        val outputStream = FileOutputStream(excelFilePath)
-
-        outputStream.use { fileOut ->
+        FileOutputStream(excelFile).use { fileOut ->
             val workbook = XSSFWorkbook()
             val sheet = workbook.createSheet("Transactions")
 
@@ -139,16 +142,23 @@ class SettingsFragment : Fragment() {
             workbook.close()
         }
 
-        val downloadManager = requireContext().getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
-        val uri = Uri.fromFile(File(excelFilePath))
-        val request = DownloadManager.Request(uri).apply {
-            setTitle("Transaction Report")
-            setDescription("Downloading transaction report")
-            setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
-            setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, excelFileName)
-        }
-        downloadManager.enqueue(request)
+        // Notify the user that the file has been saved
+        Toast.makeText(requireContext(), "Transaction report is saved", Toast.LENGTH_SHORT).show()
+
+        // Generate content URI using FileProvider
+        val uri = FileProvider.getUriForFile(
+            requireContext(),
+            "${requireContext().packageName}.fileprovider",
+            excelFile
+        )
 
-        Toast.makeText(requireContext(), "Transaction report is being downloaded", Toast.LENGTH_SHORT).show()
+        // Launch the file using an appropriate application
+        val intent = Intent(Intent.ACTION_VIEW).apply {
+            setDataAndType(uri, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
+            addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+        }
+        startActivity(intent)
     }
+
+
 }
-- 
GitLab