[image_picker] Implemented 2860 and added Unit Test to test functionality (#3685)
diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md
index 7be13a5..4f2a054 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/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 9ebf1fa..19e304e 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,10 @@
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 +41,7 @@
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 +69,18 @@
}
/** @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 c9fa338..bd705d2 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
@@ -54,4 +54,13 @@
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);
+ assertTrue(path.endsWith(".jpg"));
+ }
}
diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml
index 5625284..9ea8e5d 100755
--- a/packages/image_picker/image_picker/pubspec.yaml
+++ b/packages/image_picker/image_picker/pubspec.yaml
@@ -2,7 +2,7 @@
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.2+1
flutter:
plugin: