From a9bef63352ae1a5154176e73ca20a91db5f3dc9d Mon Sep 17 00:00:00 2001 From: Mattermost Build Date: Thu, 24 Oct 2019 21:01:15 +0200 Subject: [PATCH] Automated cherry pick of #3463 (#3464) * MM-18647 Request only needed Android permissions for storage and camera * Remove build folder from patch --- .../react-native-image-picker+0.28.1.patch | 64 ++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/patches/react-native-image-picker+0.28.1.patch b/patches/react-native-image-picker+0.28.1.patch index 46b8ac1b5..e881691b6 100644 --- a/patches/react-native-image-picker+0.28.1.patch +++ b/patches/react-native-image-picker+0.28.1.patch @@ -1,3 +1,65 @@ +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 permissions = new ArrayList(); ++ 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 @@ -27,4 +89,4 @@ index 28d5870..3f70983 100644 + } } } - +