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 } } 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 index ff15c91..9763012 100644 --- 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 @@ -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 * @see [androidx.activity.result.contract.ActivityResultContracts.GetMultipleContents] */ internal class ImageLibraryContract( - private val appContextProvider: AppContextProvider + private val appContextProvider: AppContextProvider, ) : AppContextActivityResultContract { private val contentResolver: ContentResolver get() = appContextProvider.appContext.reactContext?.contentResolver ?: throw Exceptions.ReactContextLost() 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/*") if (input.options.allowsMultipleSelection) { - 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. - return PickVisualMedia().createIntent(context, request) + if(input.options.selectionLimit == 1) { + return intent } - if (selectionLimit > 1) { - return PickMultipleVisualMedia(selectionLimit).createIntent(context, request) - } - - // If the selection limit is 0, it is the same as unlimited selection. - if (selectionLimit == UNLIMITED_SELECTION) { - return PickMultipleVisualMedia().createIntent(context, request) - } + intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true) } - return PickVisualMedia().createIntent(context, request) + return intent } override fun parseResult(input: ImageLibraryContractOptions, resultCode: Int, intent: Intent?) =