diff --git a/app/src/main/java/com/example/abe/data/network/Retrofit.kt b/app/src/main/java/com/example/abe/data/network/Retrofit.kt index bd9b8605b78f7b6f4714a7d04256661d3cb9bc53..21536640fdf2b360b5306ab1bbbe4817ef1b918c 100644 --- a/app/src/main/java/com/example/abe/data/network/Retrofit.kt +++ b/app/src/main/java/com/example/abe/data/network/Retrofit.kt @@ -126,7 +126,6 @@ class Retrofit { } override fun onFailure(call: Call<ItemsRoot>, t: Throwable) { - Log.d("ABE-PHO", "Failed to send request: " + t.message) callback.onFailure("Failed to send photo") } }) 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 8fe010b7d3bb0da3083171c84767c0bf2d3c72a7..7988086650124b35ef44585061d22ff331e78b83 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 @@ -139,15 +139,20 @@ class ScannerFragment : Fragment(), UploadResultCallback { } lifecycleScope.launch { - user = (activity as MainActivity).preferenceDataStoreHelper.getFirstPreference( - PreferenceDataStoreConstants.USER,"") + user = (activity as MainActivity).preferenceDataStoreHelper.getFirstPreference( + PreferenceDataStoreConstants.USER, "" + ) } binding.captureButton.setOnClickListener { if (cameraPermissionGranted()) { takePicture() } else { - Toast.makeText(requireContext(), "Please allow camera to take photos", Toast.LENGTH_SHORT).show() + Toast.makeText( + requireContext(), + "Please allow camera to take photos", + Toast.LENGTH_SHORT + ).show() } } @@ -196,13 +201,17 @@ class ScannerFragment : Fragment(), UploadResultCallback { private fun attemptUpload(imageFile: File) { lifecycleScope.launch { val retrofit = Retrofit() - val token = (activity as MainActivity).preferenceDataStoreHelper.getFirstPreference(PreferenceDataStoreConstants.TOKEN, "") + val token = (activity as MainActivity).preferenceDataStoreHelper.getFirstPreference( + PreferenceDataStoreConstants.TOKEN, + "" + ) retrofit.upload(token, imageFile, this@ScannerFragment) } } private fun showPreviewDialog(imageUri: Uri) { val dialog = Dialog(requireContext()).apply { + setCancelable(false) setContentView(R.layout.dialog_image_preview) window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) } @@ -218,23 +227,25 @@ class ScannerFragment : Fragment(), UploadResultCallback { confirmButton.setOnClickListener { val activity = activity as MainActivity - if(!isConnected(activity.getNetworkState())) { + if (!isConnected(activity.getNetworkState())) { dialog.dismiss() binding.scanLayout.visibility = View.GONE binding.noNetworkLayout.visibility = View.VISIBLE + isProcessingPhoto = false } else { - val filePath = imageUri.path - if (filePath != null) { - val imageFile = File(filePath) - attemptUpload(imageFile) + val filePath = imageUri.path + if (filePath != null) { + val imageFile = File(filePath) + attemptUpload(imageFile) - val msg = "Uploading photo, please wait" - Toast.makeText(requireContext(), msg, Toast.LENGTH_LONG).show() + val msg = "Uploading photo, please wait" + Toast.makeText(requireContext(), msg, Toast.LENGTH_LONG).show() - dialog.dismiss() - } else { - dialog.dismiss() - } + dialog.dismiss() + } else { + isProcessingPhoto = false + dialog.dismiss() + } } } @@ -245,6 +256,7 @@ class ScannerFragment : Fragment(), UploadResultCallback { cancelButton.setOnClickListener { dialog.dismiss() + isProcessingPhoto = false } dialog.show() @@ -252,7 +264,11 @@ class ScannerFragment : Fragment(), UploadResultCallback { private fun takePicture() { if (isProcessingPhoto) { - Toast.makeText(requireContext(), "Unable to take picture, processing previous image", Toast.LENGTH_SHORT).show() + Toast.makeText( + requireContext(), + "Unable to take picture, processing previous image", + Toast.LENGTH_SHORT + ).show() return } @@ -279,7 +295,6 @@ class ScannerFragment : Fragment(), UploadResultCallback { override fun onImageSaved(output: ImageCapture.OutputFileResults) { val savedUri = Uri.fromFile(photoFile) showPreviewDialog(savedUri) - isProcessingPhoto = false } } ) @@ -386,7 +401,11 @@ class ScannerFragment : Fragment(), UploadResultCallback { private fun openGallery() { if (isProcessingPhoto) { - Toast.makeText(requireContext(), "Unable choose image, processing previous image", Toast.LENGTH_SHORT).show() + Toast.makeText( + requireContext(), + "Unable choose image, processing previous image", + Toast.LENGTH_SHORT + ).show() return } diff --git a/app/src/main/java/com/example/abe/ui/twibbon/TwibbonFragment.kt b/app/src/main/java/com/example/abe/ui/twibbon/TwibbonFragment.kt index 0e0d14031ea1dbc825c23120e0fee0b9c498efaa..ffc798f88d346c698bf7e8ee551b7f6dd55dd0e4 100644 --- a/app/src/main/java/com/example/abe/ui/twibbon/TwibbonFragment.kt +++ b/app/src/main/java/com/example/abe/ui/twibbon/TwibbonFragment.kt @@ -47,6 +47,8 @@ class TwibbonFragment : Fragment() { private var imageCapture: ImageCapture? = null + private var isProcessingPhoto = false + companion object { private const val TAG = "ABE-TWB" private const val FILENAME_FORMAT = "yyyy-MM-dd-HH-mm-ss-SSS" @@ -64,7 +66,13 @@ class TwibbonFragment : Fragment() { requestCameraPermissions() } - binding.btnCaptureTwibbon.setOnClickListener { previewTwibbon() } + binding.btnCaptureTwibbon.setOnClickListener { + if (cameraPermissionsGranted()) { + previewTwibbon() + } else { + Toast.makeText(requireContext(), "Please allow camera to take photos", Toast.LENGTH_SHORT).show() + } + } return binding.root } @@ -115,6 +123,12 @@ class TwibbonFragment : Fragment() { } private fun previewTwibbon() { + if (isProcessingPhoto) { + Toast.makeText(requireContext(), "Unable to take picture, processing previous image", Toast.LENGTH_SHORT).show() + return + } + + isProcessingPhoto = true Toast.makeText(requireContext(), "Generating twibbon", Toast.LENGTH_SHORT).show() val imageCapture = imageCapture ?: return deletePreviousTwibbons() @@ -138,6 +152,7 @@ class TwibbonFragment : Fragment() { override fun onError(exc: ImageCaptureException) { Toast.makeText(requireContext(), "Photo capture failed", Toast.LENGTH_SHORT) .show() + isProcessingPhoto = false } override fun onImageSaved(output: ImageCapture.OutputFileResults) { @@ -151,8 +166,6 @@ class TwibbonFragment : Fragment() { private fun overlayTwibbonToImage(imageUri: Uri) { try { - Log.d(TAG, "Start overlaying twibbon") - val exifIms = requireActivity().contentResolver.openInputStream(imageUri) ?: return val exif = ExifInterface(exifIms) val orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1) @@ -255,7 +268,6 @@ class TwibbonFragment : Fragment() { fos.flush() fos.close() - Log.d(TAG, "Finished overlaying twibbon") } catch (e: FileNotFoundException) { e.printStackTrace() } @@ -272,9 +284,8 @@ class TwibbonFragment : Fragment() { } private fun showPreviewDialog(imageUri: Uri) { - Log.d(TAG, "Previewing twibbon") - val dialog = Dialog(requireContext()).apply { + setCancelable(false) setContentView(R.layout.dialog_twibbon_preview) window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) } @@ -288,6 +299,7 @@ class TwibbonFragment : Fragment() { val closeButton = dialog.findViewById<Button>(R.id.btnCloseTwibbon) closeButton.setOnClickListener { + isProcessingPhoto = false dialog.dismiss() }