From d2e35ef4e20c165758ed043dc55b6d4535cf68af Mon Sep 17 00:00:00 2001
From: Rinaldy Adin <16521390@mahasiswa.itb.ac.id>
Date: Fri, 5 Apr 2024 14:32:06 +0700
Subject: [PATCH] fix: handle clicking when not permitted and is processing
 other image in ScannerFragment

---
 .../example/abe/ui/scanner/ScannerFragment.kt | 26 ++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/com/example/abe/ui/scanner/ScannerFragment.kt b/app/src/main/java/com/example/abe/ui/scanner/ScannerFragment.kt
index 2b98b2c..8fe010b 100644
--- a/app/src/main/java/com/example/abe/ui/scanner/ScannerFragment.kt
+++ b/app/src/main/java/com/example/abe/ui/scanner/ScannerFragment.kt
@@ -70,6 +70,8 @@ class ScannerFragment : Fragment(), UploadResultCallback {
 
     private lateinit var user: String
 
+    private var isProcessingPhoto = false
+
     private val viewModel: ScannerViewModel by viewModels {
         ScannerViewModelFactory((activity?.application as ABEApplication).repository)
     }
@@ -117,6 +119,7 @@ class ScannerFragment : Fragment(), UploadResultCallback {
                 } else {
                     val msg = "Failed to fetch image from gallery"
                     Toast.makeText(requireContext(), msg, Toast.LENGTH_SHORT).show()
+                    isProcessingPhoto = false
                 }
             }
         }
@@ -141,7 +144,11 @@ class ScannerFragment : Fragment(), UploadResultCallback {
         }
 
         binding.captureButton.setOnClickListener {
-            takePicture()
+            if (cameraPermissionGranted()) {
+                takePicture()
+            } else {
+                Toast.makeText(requireContext(), "Please allow camera to take photos", Toast.LENGTH_SHORT).show()
+            }
         }
 
         binding.galleryPreviewButton.setOnClickListener {
@@ -244,6 +251,11 @@ class ScannerFragment : Fragment(), UploadResultCallback {
     }
 
     private fun takePicture() {
+        if (isProcessingPhoto) {
+            Toast.makeText(requireContext(), "Unable to take picture, processing previous image", Toast.LENGTH_SHORT).show()
+            return
+        }
+
         val imageCapture = imageCapture
 
         val photoFile = File(
@@ -253,6 +265,7 @@ class ScannerFragment : Fragment(), UploadResultCallback {
 
         val outputOptions = ImageCapture.OutputFileOptions.Builder(photoFile).build()
 
+        isProcessingPhoto = true
         imageCapture.takePicture(
             outputOptions,
             ContextCompat.getMainExecutor(requireContext()),
@@ -260,11 +273,13 @@ class ScannerFragment : Fragment(), UploadResultCallback {
                 override fun onError(exc: ImageCaptureException) {
                     Toast.makeText(requireContext(), "Photo capture failed", Toast.LENGTH_SHORT)
                         .show()
+                    isProcessingPhoto = false
                 }
 
                 override fun onImageSaved(output: ImageCapture.OutputFileResults) {
                     val savedUri = Uri.fromFile(photoFile)
                     showPreviewDialog(savedUri)
+                    isProcessingPhoto = false
                 }
             }
         )
@@ -293,6 +308,7 @@ class ScannerFragment : Fragment(), UploadResultCallback {
                 }
         } else {
             setLocationAsDefault()
+            insertItems()
         }
     }
 
@@ -359,16 +375,24 @@ class ScannerFragment : Fragment(), UploadResultCallback {
 
         findNavController().navigate(R.id.action_navigation_scanner_to_navigation_transactions)
         uploadResponse = null
+        isProcessingPhoto = false
     }
 
     override fun onFailure(errorMessage: String) {
         Toast.makeText(requireContext(), "Upload failed", Toast.LENGTH_SHORT).show()
         Log.e("ABE-PHO", errorMessage)
+        isProcessingPhoto = false
     }
 
     private fun openGallery() {
+        if (isProcessingPhoto) {
+            Toast.makeText(requireContext(), "Unable choose image, processing previous image", Toast.LENGTH_SHORT).show()
+            return
+        }
+
         val intent = Intent(Intent.ACTION_PICK)
         intent.type = "image/*"
+        isProcessingPhoto = true
         openGalleryLauncher.launch(intent)
     }
 
-- 
GitLab