diff --git a/app/src/main/java/com/example/nerbos/fragments/scan/ScanFragment.kt b/app/src/main/java/com/example/nerbos/fragments/scan/ScanFragment.kt index 4183f233a2501dff427b704d1b569f63f7f3b4a5..24a2c6bad30832785d9ad8c90d82234278728624 100644 --- a/app/src/main/java/com/example/nerbos/fragments/scan/ScanFragment.kt +++ b/app/src/main/java/com/example/nerbos/fragments/scan/ScanFragment.kt @@ -1,15 +1,19 @@ package com.example.nerbos.fragments.scan +import android.Manifest +import android.content.pm.PackageManager import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.content.ContextCompat +import androidx.fragment.app.Fragment import androidx.camera.core.CameraSelector import androidx.camera.core.Preview import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.view.PreviewView -import androidx.core.content.ContextCompat import com.example.nerbos.R import java.util.concurrent.ExecutorService import java.util.concurrent.Executors @@ -19,6 +23,8 @@ class ScanFragment : Fragment() { private lateinit var previewView: PreviewView private lateinit var cameraExecutor: ExecutorService + private val requestCameraPermissionCode = Manifest.permission.CAMERA + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -31,12 +37,29 @@ class ScanFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - cameraExecutor = Executors.newSingleThreadExecutor() - - startCamera() + if (allPermissionsGranted()) { + startCamera() + } else { + requestCameraPermission.launch(requestCameraPermissionCode) + } } + private fun allPermissionsGranted() = ContextCompat.checkSelfPermission( + requireContext(), + Manifest.permission.CAMERA + ) == PackageManager.PERMISSION_GRANTED + + private val requestCameraPermission = + registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> + if (isGranted) { + startCamera() + } else { + // Handle the case where the user denied the permission + Toast.makeText(requireContext(), "Camera permission denied", Toast.LENGTH_SHORT).show() + } + } + private fun startCamera() { val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext())