Merge branch 'haileyok-fix/android-image-picker-patch' into main
commit
0842df3675
|
@ -0,0 +1,64 @@
|
||||||
|
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..41aaf12 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
|
||||||
|
@@ -26,51 +26,26 @@ import java.io.Serializable
|
||||||
|
* @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()
|
||||||
|
|
||||||
|
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?) =
|
|
@ -0,0 +1,3 @@
|
||||||
|
added by https://github.com/bluesky-social/social-app/pull/2384#pullrequestreview-1800985521
|
||||||
|
|
||||||
|
hackfixes the image picker on android so that the user can select from their typical image sources
|
|
@ -4,6 +4,7 @@ import {
|
||||||
MediaTypeOptions,
|
MediaTypeOptions,
|
||||||
} from 'expo-image-picker'
|
} from 'expo-image-picker'
|
||||||
import {getDataUriSize} from './util'
|
import {getDataUriSize} from './util'
|
||||||
|
import * as Toast from 'view/com/util/Toast'
|
||||||
|
|
||||||
export async function openPicker(opts?: ImagePickerOptions) {
|
export async function openPicker(opts?: ImagePickerOptions) {
|
||||||
const response = await launchImageLibraryAsync({
|
const response = await launchImageLibraryAsync({
|
||||||
|
@ -13,7 +14,11 @@ export async function openPicker(opts?: ImagePickerOptions) {
|
||||||
...opts,
|
...opts,
|
||||||
})
|
})
|
||||||
|
|
||||||
return (response.assets ?? []).map(image => ({
|
if (response.assets && response.assets.length > 4) {
|
||||||
|
Toast.show('You may only select up to 4 images')
|
||||||
|
}
|
||||||
|
|
||||||
|
return (response.assets ?? []).slice(0, 4).map(image => ({
|
||||||
mime: 'image/jpeg',
|
mime: 'image/jpeg',
|
||||||
height: image.height,
|
height: image.height,
|
||||||
width: image.width,
|
width: image.width,
|
||||||
|
|
Loading…
Reference in New Issue