From f0f0a24e1de3c397c5b33bbfb34059eb6e777121 Mon Sep 17 00:00:00 2001
From: rayhanp1402 <rayhan.hanif14maulana@gmail.com>
Date: Wed, 3 Apr 2024 08:21:05 +0700
Subject: [PATCH] feat: Storage permission for save transaction

---
 .../bondoyap/ui/settings/SettingsFragment.kt  | 49 +++++++++++++------
 1 file changed, 33 insertions(+), 16 deletions(-)

diff --git a/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt
index c621207..4f41598 100644
--- a/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt
@@ -3,12 +3,15 @@ package com.example.bondoyap.ui.settings
 import android.app.AlertDialog
 import android.content.DialogInterface
 import android.content.Intent
+import android.content.pm.PackageManager
 import android.os.Bundle
 import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.Toast
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
 import androidx.lifecycle.ViewModelProvider
@@ -19,6 +22,7 @@ import com.example.bondoyap.ui.login.LoginActivity
 import com.example.bondoyap.ui.transactions.TransactionsApplication
 import com.example.bondoyap.ui.transactions.TransactionsViewModel
 import com.example.bondoyap.ui.transactions.TransactionsViewModelFactory
+import android.Manifest
 
 class SettingsFragment : Fragment() {
 
@@ -36,6 +40,11 @@ class SettingsFragment : Fragment() {
         savedInstanceState: Bundle?
     ): View {
         _binding = FragmentSettingsBinding.inflate(inflater, container, false)
+
+        if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+            ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), PERMISSION_REQUEST_CODE)
+        }
+
         return binding.root
     }
 
@@ -85,25 +94,29 @@ class SettingsFragment : Fragment() {
         val exporter = TransactionsExporter(transactionsViewModel, requireContext())
 
         saveButton.setOnClickListener {
-            Toast.makeText(appContext, "Menyimpan transaksi...", Toast.LENGTH_SHORT).show()
-
-            val formats = arrayOf("XLS", "XLSX")
-            val builder = AlertDialog.Builder(requireContext())
-            builder.setTitle("Pilih Format File")
-            builder.setItems(formats) { dialog: DialogInterface, which: Int ->
-                when (which) {
-                    0 -> {
-                        exporter.exportToXLS()
-                    }
-                    1 -> {
-                        exporter.exportToXLSX()
+            if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+                Toast.makeText(appContext, "Allow storage permission untuk menyimpan transaksi ke file xls/xlsx", Toast.LENGTH_SHORT).show()
+            } else {
+                val formats = arrayOf("XLS", "XLSX")
+                val builder = AlertDialog.Builder(requireContext())
+                builder.setTitle("Pilih Format File")
+                builder.setItems(formats) { dialog: DialogInterface, which: Int ->
+                    when (which) {
+                        0 -> {
+                            Toast.makeText(appContext, "Menyimpan transaksi ke xls...", Toast.LENGTH_SHORT).show()
+                            exporter.exportToXLS()
+                            Toast.makeText(appContext, "Penyimpanan xls pada folder Documents berhasil...", Toast.LENGTH_SHORT).show()
+                        }
+                        1 -> {
+                            Toast.makeText(appContext, "Menyimpan transaksi ke xlsx...", Toast.LENGTH_SHORT).show()
+                            exporter.exportToXLSX()
+                            Toast.makeText(appContext, "Penyimpanan xlsx pada folder Documents berhasil...", Toast.LENGTH_SHORT).show()
+                        }
                     }
+                    dialog.dismiss()
                 }
-                dialog.dismiss()
+                builder.create().show()
             }
-            builder.create().show()
-
-            Toast.makeText(appContext, "Penyimpanan pada folder Documents berhasil...", Toast.LENGTH_SHORT).show()
         }
 
         sendButton.setOnClickListener {
@@ -113,6 +126,10 @@ class SettingsFragment : Fragment() {
 
     }
 
+    companion object {
+        private const val PERMISSION_REQUEST_CODE = 1001
+    }
+
     override fun onDestroyView() {
         super.onDestroyView()
         _binding = null
-- 
GitLab