|
3 | 3 | import android.Manifest;
|
4 | 4 | import android.app.Activity;
|
5 | 5 | import android.content.ClipData;
|
6 |
| -import android.content.Context; |
7 | 6 | import android.content.ContentResolver;
|
| 7 | +import android.content.Context; |
8 | 8 | import android.content.Intent;
|
9 | 9 | import android.content.pm.PackageManager;
|
10 | 10 | import android.graphics.Bitmap;
|
|
18 | 18 | import android.util.Base64;
|
19 | 19 | import android.util.Log;
|
20 | 20 | import android.webkit.MimeTypeMap;
|
| 21 | +import androidx.activity.result.PickVisualMediaRequest; |
| 22 | +import androidx.activity.result.contract.ActivityResultContracts; |
21 | 23 |
|
22 | 24 | import androidx.core.app.ActivityCompat;
|
23 | 25 | import androidx.core.content.FileProvider;
|
|
41 | 43 | import java.io.ByteArrayOutputStream;
|
42 | 44 | import java.io.File;
|
43 | 45 | import java.io.FileInputStream;
|
44 |
| -import java.io.FileOutputStream; |
45 | 46 | import java.io.FileNotFoundException;
|
| 47 | +import java.io.FileOutputStream; |
46 | 48 | import java.io.IOException;
|
47 | 49 | import java.io.InputStream;
|
48 | 50 | import java.io.OutputStream;
|
@@ -365,28 +367,32 @@ private void initiateCamera(Activity activity) {
|
365 | 367 |
|
366 | 368 | private void initiatePicker(final Activity activity) {
|
367 | 369 | try {
|
368 |
| - final Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT); |
| 370 | + PickVisualMediaRequest.Builder builder = new PickVisualMediaRequest.Builder(); |
| 371 | + PickVisualMediaRequest request = new PickVisualMediaRequest(); |
369 | 372 |
|
370 | 373 | if (cropping || mediaType.equals("photo")) {
|
371 |
| - galleryIntent.setType("image/*"); |
| 374 | + request = builder.setMediaType(new ActivityResultContracts.PickVisualMedia.SingleMimeType("image/*")).build(); |
| 375 | + } |
| 376 | + else{ |
372 | 377 | if (cropping) {
|
373 |
| - String[] mimetypes = {"image/jpeg", "image/png"}; |
374 |
| - galleryIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); |
| 378 | + request = builder.setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE).build(); |
375 | 379 | }
|
376 |
| - } else if (mediaType.equals("video")) { |
377 |
| - galleryIntent.setType("video/*"); |
| 380 | + else if (mediaType.equals("video")) { |
| 381 | + request = builder.setMediaType(ActivityResultContracts.PickVisualMedia.VideoOnly.INSTANCE).build(); |
378 | 382 | } else {
|
379 |
| - galleryIntent.setType("*/*"); |
380 |
| - String[] mimetypes = {"image/*", "video/*"}; |
381 |
| - galleryIntent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); |
| 383 | + request = builder.setMediaType(ActivityResultContracts.PickVisualMedia.ImageAndVideo.INSTANCE).build(); |
| 384 | + } |
382 | 385 | }
|
383 | 386 |
|
384 |
| - galleryIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); |
385 |
| - galleryIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, multiple); |
386 |
| - galleryIntent.addCategory(Intent.CATEGORY_OPENABLE); |
| 387 | + Intent intent; |
387 | 388 |
|
388 |
| - final Intent chooserIntent = Intent.createChooser(galleryIntent, "Pick an image"); |
389 |
| - activity.startActivityForResult(chooserIntent, IMAGE_PICKER_REQUEST); |
| 389 | + if (multiple) { |
| 390 | + intent = new ActivityResultContracts.PickMultipleVisualMedia().createIntent(activity, request); |
| 391 | + } else { |
| 392 | + intent = new ActivityResultContracts.PickVisualMedia().createIntent(activity, request); |
| 393 | + } |
| 394 | + |
| 395 | + activity.startActivityForResult(intent, IMAGE_PICKER_REQUEST); |
390 | 396 | } catch (Exception e) {
|
391 | 397 | resultCollector.notifyProblem(E_FAILED_TO_SHOW_PICKER, e);
|
392 | 398 | }
|
@@ -801,7 +807,17 @@ private void imagePickerResult(Activity activity, final int requestCode, final i
|
801 | 807 | } else {
|
802 | 808 | Uri uri = data.getData();
|
803 | 809 |
|
| 810 | + // if the result comes in clipData format (which apparently it does in some cases) |
804 | 811 | if (uri == null) {
|
| 812 | + ClipData clipData = data.getClipData(); |
| 813 | + if (clipData != null && clipData.getItemCount() > 0) { |
| 814 | + ClipData.Item item = clipData.getItemAt(0); |
| 815 | + uri = item.getUri(); |
| 816 | + } |
| 817 | + } |
| 818 | + |
| 819 | + // error out if uri is still null |
| 820 | + if(uri == null) { |
805 | 821 | resultCollector.notifyProblem(E_NO_IMAGE_DATA_FOUND, "Cannot resolve image url");
|
806 | 822 | return;
|
807 | 823 | }
|
|
0 commit comments