Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 19 additions & 3 deletions core/ui/src/main/kotlin/com/ruleup/ui/image/ImagePicker.kt
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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() {
Expand Down
Loading