From 146af2aad4f3dfab447c086e54ef5149ab7c820a Mon Sep 17 00:00:00 2001 From: "daniel.roek" Date: Fri, 5 Mar 2021 15:20:11 +0100 Subject: [PATCH 1/9] Implemented 2860 and added unitTest to test functionality --- .../flutter/plugins/imagepicker/FileUtils.java | 16 ++++++++++++---- .../plugins/imagepicker/FileUtilTest.java | 12 ++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java index 9ebf1fad826b..dfc2641cb802 100644 --- a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java +++ b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java @@ -23,8 +23,11 @@ package io.flutter.plugins.imagepicker; +import android.content.ContentResolver; import android.content.Context; import android.net.Uri; +import android.webkit.MimeTypeMap; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -39,7 +42,7 @@ String getPathFromUri(final Context context, final Uri uri) { OutputStream outputStream = null; boolean success = false; try { - String extension = getImageExtension(uri); + String extension = getImageExtension(context, uri); inputStream = context.getContentResolver().openInputStream(uri); file = File.createTempFile("image_picker", extension, context.getCacheDir()); file.deleteOnExit(); @@ -67,13 +70,18 @@ String getPathFromUri(final Context context, final Uri uri) { } /** @return extension of image with dot, or default .jpg if it none. */ - private static String getImageExtension(Uri uriImage) { + private static String getImageExtension(Context context, Uri uriImage) { String extension = null; try { String imagePath = uriImage.getPath(); - if (imagePath != null && imagePath.lastIndexOf(".") != -1) { - extension = imagePath.substring(imagePath.lastIndexOf(".") + 1); + if (uriImage.getScheme().equals(ContentResolver.SCHEME_CONTENT)) { + final MimeTypeMap mime = MimeTypeMap.getSingleton(); + extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uriImage)); + } else { + extension = + MimeTypeMap.getFileExtensionFromUrl( + Uri.fromFile(new File(uriImage.getPath())).toString()); } } catch (Exception e) { extension = null; diff --git a/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java b/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java index c9fa3381ebe5..70c3b7e4087d 100644 --- a/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java +++ b/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java @@ -16,6 +16,9 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.util.Arrays; +import java.util.Objects; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -54,4 +57,13 @@ public void FileUtil_GetPathFromUri() throws IOException { String imageStream = new String(bytes, UTF_8); assertTrue(imageStream.equals("imageStream")); } + + @Test + public void FileUtil_getImageExtension() throws IOException { + Uri uri = Uri.parse("content://dummy/dummy.png"); + shadowContentResolver.registerInputStream( + uri, new ByteArrayInputStream("imageStream".getBytes(UTF_8))); + String path = fileUtils.getPathFromUri(context, uri); + assert(path.endsWith(".jpg")); + } } From d4d1975c337ea7095032dfa16d896ba5198a464e Mon Sep 17 00:00:00 2001 From: "daniel.roek" Date: Fri, 5 Mar 2021 15:26:45 +0100 Subject: [PATCH 2/9] Updated version --- packages/image_picker/image_picker/CHANGELOG.md | 4 ++++ packages/image_picker/image_picker/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index 7be13a574a77..4f2a054f1520 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.2+1 + +* Android: fixes an issue where videos could be wrongly picked with `.jpg` extension. + ## 0.7.2 * Run CocoaPods iOS tests in RunnerUITests target diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index 562528466861..9e571d781518 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker description: Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera. homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker/image_picker -version: 0.7.2 +version: 0.7.3+1 flutter: plugin: From e7f78afebd07b622400ddd6d10283a5eef715607 Mon Sep 17 00:00:00 2001 From: "daniel.roek" Date: Fri, 5 Mar 2021 15:27:19 +0100 Subject: [PATCH 3/9] Updated version --- packages/image_picker/image_picker/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index 9e571d781518..9ea8e5ddcbd4 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker description: Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera. homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker/image_picker -version: 0.7.3+1 +version: 0.7.2+1 flutter: plugin: From c251a20d6ab7759ecad1ebd7e17ab636aee470fa Mon Sep 17 00:00:00 2001 From: "daniel.roek" Date: Fri, 5 Mar 2021 15:32:10 +0100 Subject: [PATCH 4/9] Fixed formatting --- .../main/java/io/flutter/plugins/imagepicker/FileUtils.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java index dfc2641cb802..a44b5b867f10 100644 --- a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java +++ b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java @@ -79,9 +79,9 @@ private static String getImageExtension(Context context, Uri uriImage) { final MimeTypeMap mime = MimeTypeMap.getSingleton(); extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uriImage)); } else { - extension = - MimeTypeMap.getFileExtensionFromUrl( - Uri.fromFile(new File(uriImage.getPath())).toString()); + extension = + MimeTypeMap.getFileExtensionFromUrl( + Uri.fromFile(new File(uriImage.getPath())).toString()); } } catch (Exception e) { extension = null; From a34dad7132a5f26b14653408730e5b10e2bb8318 Mon Sep 17 00:00:00 2001 From: "daniel.roek" Date: Fri, 5 Mar 2021 15:42:24 +0100 Subject: [PATCH 5/9] Fixed formatting --- .../test/java/io/flutter/plugins/imagepicker/FileUtilTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java b/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java index 70c3b7e4087d..816852cd8103 100644 --- a/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java +++ b/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java @@ -62,7 +62,7 @@ public void FileUtil_GetPathFromUri() throws IOException { public void FileUtil_getImageExtension() throws IOException { Uri uri = Uri.parse("content://dummy/dummy.png"); shadowContentResolver.registerInputStream( - uri, new ByteArrayInputStream("imageStream".getBytes(UTF_8))); + uri, new ByteArrayInputStream("imageStream".getBytes(UTF_8))); String path = fileUtils.getPathFromUri(context, uri); assert(path.endsWith(".jpg")); } From c7a02d46003ebd4e8a5e06d97bfac6952e084b75 Mon Sep 17 00:00:00 2001 From: "daniel.roek" Date: Fri, 5 Mar 2021 15:42:55 +0100 Subject: [PATCH 6/9] remove unused imports --- .../test/java/io/flutter/plugins/imagepicker/FileUtilTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java b/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java index 816852cd8103..0ae2158e0069 100644 --- a/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java +++ b/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java @@ -16,8 +16,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.util.Arrays; -import java.util.Objects; import org.junit.Before; import org.junit.Test; From d184be14404b7a09dadf967796faffbb172fccf8 Mon Sep 17 00:00:00 2001 From: "daniel.roek" Date: Fri, 5 Mar 2021 15:52:34 +0100 Subject: [PATCH 7/9] Fixed formatting --- .../java/io/flutter/plugins/imagepicker/FileUtilTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java b/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java index 0ae2158e0069..a4ba642d6b0f 100644 --- a/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java +++ b/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java @@ -60,8 +60,8 @@ public void FileUtil_GetPathFromUri() throws IOException { public void FileUtil_getImageExtension() throws IOException { Uri uri = Uri.parse("content://dummy/dummy.png"); shadowContentResolver.registerInputStream( - uri, new ByteArrayInputStream("imageStream".getBytes(UTF_8))); + uri, new ByteArrayInputStream("imageStream".getBytes(UTF_8))); String path = fileUtils.getPathFromUri(context, uri); - assert(path.endsWith(".jpg")); + assertTrue(path.endsWith(".jpg")); } } From 96f3559773e200789c970d92d0e2a15e72aa3b59 Mon Sep 17 00:00:00 2001 From: "daniel.roek" Date: Fri, 5 Mar 2021 15:52:41 +0100 Subject: [PATCH 8/9] Fixed formatting --- .../main/java/io/flutter/plugins/imagepicker/FileUtils.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java index a44b5b867f10..19e304ea9eee 100644 --- a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java +++ b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/FileUtils.java @@ -27,7 +27,6 @@ import android.content.Context; import android.net.Uri; import android.webkit.MimeTypeMap; - import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -79,7 +78,7 @@ private static String getImageExtension(Context context, Uri uriImage) { final MimeTypeMap mime = MimeTypeMap.getSingleton(); extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uriImage)); } else { - extension = + extension = MimeTypeMap.getFileExtensionFromUrl( Uri.fromFile(new File(uriImage.getPath())).toString()); } From 9b35f416d2f9bca59b81f503ef59a1e7943b00fb Mon Sep 17 00:00:00 2001 From: "daniel.roek" Date: Fri, 5 Mar 2021 15:56:17 +0100 Subject: [PATCH 9/9] Fixed formatting --- .../test/java/io/flutter/plugins/imagepicker/FileUtilTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java b/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java index a4ba642d6b0f..bd705d2374e5 100644 --- a/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java +++ b/packages/image_picker/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/FileUtilTest.java @@ -16,7 +16,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith;