* MM-18647 Request only needed Android permissions for storage and camera * Remove build folder from patch
92 lines
4.6 KiB
Diff
92 lines
4.6 KiB
Diff
diff --git a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModule.java b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModule.java
|
|
index b4311eb..9d3f3d2 100644
|
|
--- a/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModule.java
|
|
+++ b/node_modules/react-native-image-picker/android/src/main/java/com/imagepicker/ImagePickerModule.java
|
|
@@ -47,6 +47,7 @@ import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
import java.lang.ref.WeakReference;
|
|
import java.util.List;
|
|
+import java.util.ArrayList;
|
|
|
|
import com.facebook.react.modules.core.PermissionListener;
|
|
import com.facebook.react.modules.core.PermissionAwareActivity;
|
|
@@ -542,14 +543,23 @@ public class ImagePickerModule extends ReactContextBaseJavaModule
|
|
@NonNull final Callback callback,
|
|
@NonNull final int requestCode)
|
|
{
|
|
- final int writePermission = ActivityCompat
|
|
- .checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
|
- final int cameraPermission = ActivityCompat
|
|
+ int selfCheckResult = 0;
|
|
+ switch (requestCode) {
|
|
+ case REQUEST_PERMISSIONS_FOR_CAMERA:
|
|
+ selfCheckResult = ActivityCompat
|
|
.checkSelfPermission(activity, Manifest.permission.CAMERA);
|
|
+ if (selfCheckResult == PackageManager.PERMISSION_GRANTED) {
|
|
+ selfCheckResult = ActivityCompat
|
|
+ .checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
|
+ }
|
|
+ break;
|
|
+ case REQUEST_PERMISSIONS_FOR_LIBRARY:
|
|
+ selfCheckResult = ActivityCompat
|
|
+ .checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
|
+ break;
|
|
+ }
|
|
|
|
- final boolean permissionsGrated = writePermission == PackageManager.PERMISSION_GRANTED &&
|
|
- cameraPermission == PackageManager.PERMISSION_GRANTED;
|
|
-
|
|
+ final boolean permissionsGrated = selfCheckResult == PackageManager.PERMISSION_GRANTED;
|
|
if (!permissionsGrated)
|
|
{
|
|
final Boolean dontAskAgain = ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) && ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA);
|
|
@@ -598,7 +608,18 @@ public class ImagePickerModule extends ReactContextBaseJavaModule
|
|
}
|
|
else
|
|
{
|
|
- String[] PERMISSIONS = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
|
|
+ List<String> permissions = new ArrayList<String>();
|
|
+ if (requestCode == REQUEST_PERMISSIONS_FOR_CAMERA )
|
|
+ {
|
|
+ permissions.add(Manifest.permission.CAMERA);
|
|
+ permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
|
+ }
|
|
+ if (requestCode == REQUEST_PERMISSIONS_FOR_LIBRARY )
|
|
+ {
|
|
+ permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
|
+ }
|
|
+
|
|
+ String[] PERMISSIONS = permissions.toArray(new String[0]);
|
|
if (activity instanceof ReactActivity)
|
|
{
|
|
((ReactActivity) activity).requestPermissions(PERMISSIONS, requestCode, listener);
|
|
diff --git a/node_modules/react-native-image-picker/ios/ImagePickerManager.m b/node_modules/react-native-image-picker/ios/ImagePickerManager.m
|
|
index 28d5870..3f70983 100644
|
|
--- a/node_modules/react-native-image-picker/ios/ImagePickerManager.m
|
|
+++ b/node_modules/react-native-image-picker/ios/ImagePickerManager.m
|
|
@@ -455,12 +455,19 @@ - (void)imagePickerController:(UIImagePickerController *)picker didFinishPicking
|
|
}
|
|
|
|
if (videoURL) { // Protect against reported crash
|
|
- NSError *error = nil;
|
|
- [fileManager moveItemAtURL:videoURL toURL:videoDestinationURL error:&error];
|
|
- if (error) {
|
|
- self.callback(@[@{@"error": error.localizedFailureReason}]);
|
|
- return;
|
|
- }
|
|
+ NSError *error = nil;
|
|
+
|
|
+ // If we have write access to the source file, move it. Otherwise use copy.
|
|
+ if ([fileManager isWritableFileAtPath:[videoURL path]]) {
|
|
+ [fileManager moveItemAtURL:videoURL toURL:videoDestinationURL error:&error];
|
|
+ } else {
|
|
+ [fileManager copyItemAtURL:videoURL toURL:videoDestinationURL error:&error];
|
|
+ }
|
|
+
|
|
+ if (error) {
|
|
+ self.callback(@[@{@"error": error.localizedFailureReason}]);
|
|
+ return;
|
|
+ }
|
|
}
|
|
}
|
|
|