mirror of
https://github.com/inaturalist/iNaturalistReactNative.git
synced 2026-04-18 05:49:24 -04:00
* Move file * Add type * Destructure uri * Update optional argument * Add screen params interface * Access uri from image This is probably a functional change, but the intention behind the previous code was clear. TS revealed that there is an object of `image` though that needs to be accessed first. Have not seen any effect as to what is fixed by this. * Add type * Throw error when essential strings are undefined * Add types to our package patch * Update PhotoLibrary.tsx * Only import what we use * Add param property * Type param as to what is passed in from AddObsButton * Check for UUID and error out if not given * Specify mandatory option This is not a functional change because local ? x : y is used in the function and so the not branch was already executed. * break part out into explicitly platform-specific flows
112 lines
9.7 KiB
Diff
112 lines
9.7 KiB
Diff
diff --git a/node_modules/react-native-image-picker/README.md b/node_modules/react-native-image-picker/README.md
|
|
index 708c7d1..ed5b33c 100644
|
|
--- a/node_modules/react-native-image-picker/README.md
|
|
+++ b/node_modules/react-native-image-picker/README.md
|
|
@@ -124,6 +124,7 @@ The `callback` will be called with a response object, refer to [The Response Obj
|
|
| presentationStyle | OK | NO | NO | Controls how the picker is presented. `currentContext`, `pageSheet`, `fullScreen`, `formSheet`, `popover`, `overFullScreen`, `overCurrentContext`. Default is `currentContext`. |
|
|
| formatAsMp4 | OK | NO | NO | Converts the selected video to MP4 (iOS Only). |
|
|
| assetRepresentationMode | OK | OK | NO | A mode that determines which representation to use if an asset contains more than one on iOS or disables HEIC/HEIF to JPEG conversion on Android if set to 'current'. Possible values: 'auto', 'current', 'compatible'. Default is 'auto'. |
|
|
+| forceOldAndroidPhotoPicker | NO | OK | NO | If true, forces to use old photo picker on Android, since new one redacts EXIF metadata (see https://issuetracker.google.com/issues/243294058) |
|
|
|
|
|
|
|
|
|
@@ -142,7 +143,7 @@ The `callback` will be called with a response object, refer to [The Response Obj
|
|
| ------------ | --- | ------- | --- | ----------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
| base64 | OK | OK | OK | PHOTO ONLY | NO | The base64 string of the image (photos only) |
|
|
| uri | OK | OK | OK | BOTH | NO | The file uri in app specific cache storage. Except when picking **video from Android gallery** where you will get read only content uri, to get file uri in this case copy the file to app specific storage using any react-native library. For web it uses the base64 as uri. |
|
|
-| originalPath | NO | OK | NO | BOTH | NO | The original file path. |
|
|
+| originalPath | OK | OK | NO | BOTH | NO | The original file path. |
|
|
| width | OK | OK | OK | BOTH | NO | Asset dimensions |
|
|
| height | OK | OK | OK | BOTH | NO | Asset dimensions |
|
|
| fileSize | OK | OK | NO | BOTH | NO | The file size |
|
|
diff --git a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModuleImpl.java b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModuleImpl.java
|
|
index 56149f1..48ea38c 100644
|
|
--- a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModuleImpl.java
|
|
+++ b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModuleImpl.java
|
|
@@ -162,7 +162,37 @@ public class ImagePickerModuleImpl implements ActivityEventListener {
|
|
}
|
|
|
|
try {
|
|
- currentActivity.startActivityForResult(libraryIntent, requestCode);
|
|
+ if (this.options.forceOldAndroidPhotoPicker) {
|
|
+ // Since we're forcing the old Android photo picker - we use a method that is used to selecting
|
|
+ // any type of file, and the Google Photos app (for example) won't show up in the side menu
|
|
+ // of that selector - so we need a hybrid approach which shows
|
|
+ Intent pickIntent = new Intent(Intent.ACTION_PICK);
|
|
+ if (!isSingleSelect) {
|
|
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
|
+ pickIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
|
|
+ } else {
|
|
+ if ((selectionLimit != 1) && (!libraryIntent.getAction().equals(Intent.ACTION_GET_CONTENT))) {
|
|
+ int maxNum = selectionLimit;
|
|
+ if (selectionLimit == 0) maxNum = MediaStore.getPickImagesMaxLimit();
|
|
+ pickIntent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNum);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ if (isPhoto) {
|
|
+ pickIntent.setType("image/*");
|
|
+ } else if (isVideo) {
|
|
+ pickIntent.setType("video/*");
|
|
+ } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
|
+ pickIntent.setType("*/*");
|
|
+ pickIntent.putExtra(Intent.EXTRA_MIME_TYPES, new String[]{"image/*", "video/*"});
|
|
+ }
|
|
+ String chooserTitle = this.options.chooserTitle != null ? this.options.chooserTitle : "Import Photos From";
|
|
+ Intent chooserIntent = Intent.createChooser(pickIntent, chooserTitle);
|
|
+ chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{libraryIntent});
|
|
+ currentActivity.startActivityForResult(chooserIntent, requestCode);
|
|
+ } else {
|
|
+ currentActivity.startActivityForResult(libraryIntent, requestCode);
|
|
+ }
|
|
} catch (ActivityNotFoundException e) {
|
|
callback.invoke(getErrorMap(errOthers, e.getMessage()));
|
|
this.callback = null;
|
|
diff --git a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Options.java b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Options.java
|
|
index 21970d5..b1cd9e9 100644
|
|
--- a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Options.java
|
|
+++ b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/Options.java
|
|
@@ -19,6 +19,8 @@ public class Options {
|
|
Boolean useFrontCamera = false;
|
|
String mediaType;
|
|
String[] restrictMimeTypes;
|
|
+ Boolean forceOldAndroidPhotoPicker = false;
|
|
+ String chooserTitle = null;
|
|
|
|
Options(ReadableMap options) {
|
|
mediaType = options.getString("mediaType");
|
|
@@ -28,6 +30,8 @@ public class Options {
|
|
selectionLimit = options.getInt("selectionLimit");
|
|
includeBase64 = options.getBoolean("includeBase64");
|
|
includeExtra = options.getBoolean("includeExtra");
|
|
+ forceOldAndroidPhotoPicker = options.getBoolean("forceOldAndroidPhotoPicker");
|
|
+ chooserTitle = options.getString("chooserTitle");
|
|
|
|
String videoQualityString = options.getString("videoQuality");
|
|
if (!TextUtils.isEmpty(videoQualityString) && !videoQualityString.toLowerCase().equals("high")) {
|
|
diff --git a/node_modules/react-native-image-picker/ios/ImagePickerManager.mm b/node_modules/react-native-image-picker/ios/ImagePickerManager.mm
|
|
index 93e99be..b42b3be 100644
|
|
--- a/node_modules/react-native-image-picker/ios/ImagePickerManager.mm
|
|
+++ b/node_modules/react-native-image-picker/ios/ImagePickerManager.mm
|
|
@@ -207,6 +207,7 @@ -(NSMutableDictionary *)mapImageToAsset:(UIImage *)image data:(NSData *)data phA
|
|
if(phAsset){
|
|
asset[@"timestamp"] = [self getDateTimeInUTC:phAsset.creationDate];
|
|
asset[@"id"] = phAsset.localIdentifier;
|
|
+ asset[@"originalPath"] = [NSString stringWithFormat:@"ph://%@", phAsset.localIdentifier];
|
|
// Add more extra data here ...
|
|
}
|
|
|
|
diff --git a/node_modules/react-native-image-picker/lib/typescript/types.d.ts b/node_modules/react-native-image-picker/lib/typescript/types.d.ts
|
|
index 2d703a7..595e6cd 100644
|
|
--- a/node_modules/react-native-image-picker/lib/typescript/types.d.ts
|
|
+++ b/node_modules/react-native-image-picker/lib/typescript/types.d.ts
|
|
@@ -14,6 +14,8 @@ export interface OptionsCommon {
|
|
export interface ImageLibraryOptions extends OptionsCommon {
|
|
selectionLimit?: number;
|
|
restrictMimeTypes?: string[];
|
|
+ forceOldAndroidPhotoPicker?: boolean;
|
|
+ chooserTitle?: string;
|
|
}
|
|
export interface CameraOptions extends OptionsCommon {
|
|
durationLimit?: number;
|