2024-03-19 20:03:16 +01:00
|
|
|
diff --git a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
|
|
|
|
index 3f50f8c..ee47fa1 100644
|
|
|
|
--- a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
|
|
|
|
+++ b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
|
|
|
|
@@ -33,7 +33,9 @@ import kotlin.coroutines.resumeWithException
|
|
|
|
// TODO(@bbarthec): rename to ExpoImagePicker
|
|
|
|
private const val moduleName = "ExponentImagePicker"
|
|
|
|
|
|
|
|
+
|
|
|
|
class ImagePickerModule : Module() {
|
|
|
|
+ private var isPickerOpen = false
|
|
|
|
|
|
|
|
override fun definition() = ModuleDefinition {
|
|
|
|
Name(moduleName)
|
|
|
|
@@ -129,6 +131,11 @@ class ImagePickerModule : Module() {
|
|
|
|
options: ImagePickerOptions
|
|
|
|
): Any {
|
|
|
|
return try {
|
|
|
|
+ if(isPickerOpen) {
|
|
|
|
+ return ImagePickerResponse(canceled = true)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ isPickerOpen = true
|
|
|
|
var result = launchPicker(pickerLauncher)
|
|
|
|
if (
|
|
|
|
!options.allowsMultipleSelection &&
|
|
|
|
@@ -143,6 +150,8 @@ class ImagePickerModule : Module() {
|
|
|
|
mediaHandler.readExtras(result.data, options)
|
|
|
|
} catch (cause: OperationCanceledException) {
|
|
|
|
return ImagePickerResponse(canceled = true)
|
|
|
|
+ } finally {
|
|
|
|
+ isPickerOpen = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-30 06:42:18 +01:00
|
|
|
diff --git a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt
|
2024-03-19 20:03:16 +01:00
|
|
|
index ff15c91..9763012 100644
|
2023-12-30 06:42:18 +01:00
|
|
|
--- a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt
|
|
|
|
+++ b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt
|
2024-03-19 20:03:16 +01:00
|
|
|
@@ -5,12 +5,7 @@ import android.content.ContentResolver
|
|
|
|
import android.content.Context
|
|
|
|
import android.content.Intent
|
|
|
|
import android.net.Uri
|
|
|
|
-import androidx.activity.result.PickVisualMediaRequest
|
|
|
|
-import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
|
|
|
|
-import androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia
|
|
|
|
import expo.modules.imagepicker.ImagePickerOptions
|
|
|
|
-import expo.modules.imagepicker.MediaTypes
|
|
|
|
-import expo.modules.imagepicker.UNLIMITED_SELECTION
|
|
|
|
import expo.modules.imagepicker.getAllDataUris
|
|
|
|
import expo.modules.imagepicker.toMediaType
|
|
|
|
import expo.modules.kotlin.activityresult.AppContextActivityResultContract
|
|
|
|
@@ -26,51 +21,26 @@ import java.io.Serializable
|
2023-12-30 06:42:18 +01:00
|
|
|
* @see [androidx.activity.result.contract.ActivityResultContracts.GetMultipleContents]
|
|
|
|
*/
|
|
|
|
internal class ImageLibraryContract(
|
|
|
|
- private val appContextProvider: AppContextProvider
|
|
|
|
+ private val appContextProvider: AppContextProvider,
|
|
|
|
) : AppContextActivityResultContract<ImageLibraryContractOptions, ImagePickerContractResult> {
|
|
|
|
private val contentResolver: ContentResolver
|
|
|
|
get() = appContextProvider.appContext.reactContext?.contentResolver
|
|
|
|
?: throw Exceptions.ReactContextLost()
|
2024-03-19 20:03:16 +01:00
|
|
|
|
2023-12-30 06:42:18 +01:00
|
|
|
override fun createIntent(context: Context, input: ImageLibraryContractOptions): Intent {
|
|
|
|
- val request = PickVisualMediaRequest.Builder()
|
|
|
|
- .setMediaType(
|
|
|
|
- when (input.options.mediaTypes) {
|
|
|
|
- MediaTypes.VIDEOS -> {
|
|
|
|
- PickVisualMedia.VideoOnly
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- MediaTypes.IMAGES -> {
|
|
|
|
- PickVisualMedia.ImageOnly
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- else -> {
|
|
|
|
- PickVisualMedia.ImageAndVideo
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- )
|
|
|
|
- .build()
|
|
|
|
+ val intent = Intent(Intent.ACTION_GET_CONTENT)
|
|
|
|
+ .addCategory(Intent.CATEGORY_OPENABLE)
|
|
|
|
+ .setType("image/*")
|
2024-03-19 20:03:16 +01:00
|
|
|
|
2023-12-30 06:42:18 +01:00
|
|
|
if (input.options.allowsMultipleSelection) {
|
2023-12-30 06:53:17 +01:00
|
|
|
- val selectionLimit = input.options.selectionLimit
|
|
|
|
-
|
|
|
|
- if (selectionLimit == 1) {
|
|
|
|
- // If multiple selection is allowed but the limit is 1, we should ignore
|
|
|
|
- // the multiple selection flag and just treat it as a single selection.
|
2023-12-30 06:42:18 +01:00
|
|
|
- return PickVisualMedia().createIntent(context, request)
|
2023-12-30 06:53:17 +01:00
|
|
|
+ if(input.options.selectionLimit == 1) {
|
|
|
|
+ return intent
|
2023-12-30 06:42:18 +01:00
|
|
|
}
|
2024-03-19 20:03:16 +01:00
|
|
|
|
2023-12-30 06:53:17 +01:00
|
|
|
- if (selectionLimit > 1) {
|
2023-12-30 06:42:18 +01:00
|
|
|
- return PickMultipleVisualMedia(selectionLimit).createIntent(context, request)
|
2023-12-30 06:53:17 +01:00
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // If the selection limit is 0, it is the same as unlimited selection.
|
|
|
|
- if (selectionLimit == UNLIMITED_SELECTION) {
|
2023-12-30 06:42:18 +01:00
|
|
|
- return PickMultipleVisualMedia().createIntent(context, request)
|
2023-12-30 06:53:17 +01:00
|
|
|
- }
|
|
|
|
+ intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
|
2023-12-30 06:42:18 +01:00
|
|
|
}
|
2024-03-19 20:03:16 +01:00
|
|
|
|
2023-12-30 06:42:18 +01:00
|
|
|
- return PickVisualMedia().createIntent(context, request)
|
|
|
|
+ return intent
|
|
|
|
}
|
2024-03-19 20:03:16 +01:00
|
|
|
|
2023-12-30 06:42:18 +01:00
|
|
|
override fun parseResult(input: ImageLibraryContractOptions, resultCode: Int, intent: Intent?) =
|