diff --git a/android/build.gradle b/android/build.gradle
index 48443cca5..6ad2e4316 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -18,9 +18,10 @@ android {
abortOnError false
}
}
-
dependencies {
implementation 'com.facebook.react:react-native:+'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'com.github.yalantis:ucrop:2.2.6-native'
+ implementation 'androidx.activity:activity:1.9.2'
+ implementation "androidx.core:core:1.13.1"
}
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 0f5c93fa2..ffed3a254 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Tue May 17 14:28:43 CEST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index 391f3037a..a08629b2c 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -25,6 +25,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java b/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java
index 00af623b8..c183fee6e 100644
--- a/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java
+++ b/android/src/main/java/com/reactnative/ivpusic/imagepicker/PickerModule.java
@@ -3,8 +3,8 @@
import android.Manifest;
import android.app.Activity;
import android.content.ClipData;
-import android.content.Context;
import android.content.ContentResolver;
+import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
@@ -18,6 +18,8 @@
import android.util.Base64;
import android.util.Log;
import android.webkit.MimeTypeMap;
+import androidx.activity.result.PickVisualMediaRequest;
+import androidx.activity.result.contract.ActivityResultContracts;
import androidx.core.app.ActivityCompat;
import androidx.core.content.FileProvider;
@@ -41,8 +43,8 @@
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -365,28 +367,32 @@ private void initiateCamera(Activity activity) {
private void initiatePicker(final Activity activity) {
try {
- final Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
+ PickVisualMediaRequest.Builder builder = new PickVisualMediaRequest.Builder();
+ PickVisualMediaRequest request = new PickVisualMediaRequest();
if (cropping || mediaType.equals("photo")) {
- galleryIntent.setType("image/*");
+ request = builder.setMediaType(new ActivityResultContracts.PickVisualMedia.SingleMimeType("image/*")).build();
+ }
+ else{
if (cropping) {
- String[] mimetypes = {"image/jpeg", "image/png"};
- galleryIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
+ request = builder.setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE).build();
}
- } else if (mediaType.equals("video")) {
- galleryIntent.setType("video/*");
+ else if (mediaType.equals("video")) {
+ request = builder.setMediaType(ActivityResultContracts.PickVisualMedia.VideoOnly.INSTANCE).build();
} else {
- galleryIntent.setType("*/*");
- String[] mimetypes = {"image/*", "video/*"};
- galleryIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
+ request = builder.setMediaType(ActivityResultContracts.PickVisualMedia.ImageAndVideo.INSTANCE).build();
+ }
}
- galleryIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- galleryIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, multiple);
- galleryIntent.addCategory(Intent.CATEGORY_OPENABLE);
+ Intent intent;
- final Intent chooserIntent = Intent.createChooser(galleryIntent, "Pick an image");
- activity.startActivityForResult(chooserIntent, IMAGE_PICKER_REQUEST);
+ if (multiple) {
+ intent = new ActivityResultContracts.PickMultipleVisualMedia().createIntent(activity, request);
+ } else {
+ intent = new ActivityResultContracts.PickVisualMedia().createIntent(activity, request);
+ }
+
+ activity.startActivityForResult(intent, IMAGE_PICKER_REQUEST);
} catch (Exception e) {
resultCollector.notifyProblem(E_FAILED_TO_SHOW_PICKER, e);
}
@@ -801,7 +807,17 @@ private void imagePickerResult(Activity activity, final int requestCode, final i
} else {
Uri uri = data.getData();
+ // if the result comes in clipData format (which apparently it does in some cases)
if (uri == null) {
+ ClipData clipData = data.getClipData();
+ if (clipData != null && clipData.getItemCount() > 0) {
+ ClipData.Item item = clipData.getItemAt(0);
+ uri = item.getUri();
+ }
+ }
+
+ // error out if uri is still null
+ if(uri == null) {
resultCollector.notifyProblem(E_NO_IMAGE_DATA_FOUND, "Cannot resolve image url");
return;
}