diff --git a/core/ui/src/main/kotlin/com/ruleup/ui/image/ImagePicker.kt b/core/ui/src/main/kotlin/com/ruleup/ui/image/ImagePicker.kt index c56dd2dca..4df76e006 100644 --- a/core/ui/src/main/kotlin/com/ruleup/ui/image/ImagePicker.kt +++ b/core/ui/src/main/kotlin/com/ruleup/ui/image/ImagePicker.kt @@ -1,6 +1,8 @@ package com.ruleup.ui.image +import android.Manifest import android.content.Context +import android.content.pm.PackageManager import android.net.Uri import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.PickVisualMediaRequest @@ -12,6 +14,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode +import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import java.io.File @@ -41,11 +44,24 @@ fun rememberImagePicker(onImagePicked: (String) -> Unit): ImagePicker { if (success && uri != null) onImagePicked(uri) } + fun takePicture() { + val uri = createCameraImageUri(context) + cameraImageUri = uri.toString() + camera.launch(uri) + } + + // 앱이 CAMERA 를 선언해 두었으므로, 허용 전에 카메라 앱을 띄우면 SecurityException 이 난다. + val cameraPermission = + rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) { granted -> + if (granted) takePicture() + } + return object : ImagePicker { override fun launchCamera() { - val uri = createCameraImageUri(context) - cameraImageUri = uri.toString() - camera.launch(uri) + val granted = + ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) == + PackageManager.PERMISSION_GRANTED + if (granted) takePicture() else cameraPermission.launch(Manifest.permission.CAMERA) } override fun launchGallery() {