From 1d26239809fa6c32cc1ed293a911110f551d8985 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Fri, 9 Nov 2012 09:28:26 +0200 Subject: [PATCH 1/4] not getting the path correctly if the URI contains a file:// Previous to 2.2 this function was crashing if the URI wasn't different than a 'content://' but still if it is a 'file://' it fails getting the correct path. This happens for example picking a picture from dropbox instead of local gallery. --- framework/src/org/apache/cordova/FileUtils.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/framework/src/org/apache/cordova/FileUtils.java b/framework/src/org/apache/cordova/FileUtils.java index 973b820d..46f2e9c3 100755 --- a/framework/src/org/apache/cordova/FileUtils.java +++ b/framework/src/org/apache/cordova/FileUtils.java @@ -1069,16 +1069,18 @@ public class FileUtils extends CordovaPlugin { */ @SuppressWarnings("deprecation") protected static String getRealPathFromURI(Uri contentUri, CordovaInterface cordova) { - String uri = contentUri.toString(); - if (uri.startsWith("content:")) { + final String scheme = contentUri.getScheme(); + + if (scheme.compareTo("content") == 0) { String[] proj = { _DATA }; Cursor cursor = cordova.getActivity().managedQuery(contentUri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(_DATA); cursor.moveToFirst(); return cursor.getString(column_index); + } else if (scheme.compareTo("file") == 0) { + return contentUri.getPath(); } else { - return uri; + return contentUri.toString(); } - } } From 4fe73cf6ad5ebeb85f0c5868c12af25b66b6b2a0 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Mon, 12 Nov 2012 10:00:32 -0500 Subject: [PATCH 2/4] CB-1835: Camera.getPicture gives error when get a picture from photo library with spaces in its name on Android --- framework/src/org/apache/cordova/FileUtils.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/framework/src/org/apache/cordova/FileUtils.java b/framework/src/org/apache/cordova/FileUtils.java index 46f2e9c3..c2f90b64 100755 --- a/framework/src/org/apache/cordova/FileUtils.java +++ b/framework/src/org/apache/cordova/FileUtils.java @@ -984,8 +984,11 @@ public class FileUtils extends CordovaPlugin { * @return a mime type */ public static String getMimeType(String filename) { + // Stupid bug in getFileExtensionFromUrl when the file name has a space + // So we need to replace the space with a url encoded %20 + String url = filename.replace(" ", "%20"); MimeTypeMap map = MimeTypeMap.getSingleton(); - return map.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(filename)); + return map.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url)); } /** From e95bde62a24557c903234adcef2f8e9c087d5d45 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Mon, 12 Nov 2012 10:22:35 -0500 Subject: [PATCH 3/4] Correctly report the mime type of 3ga files --- framework/src/org/apache/cordova/FileUtils.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/framework/src/org/apache/cordova/FileUtils.java b/framework/src/org/apache/cordova/FileUtils.java index c2f90b64..8aff2629 100755 --- a/framework/src/org/apache/cordova/FileUtils.java +++ b/framework/src/org/apache/cordova/FileUtils.java @@ -988,7 +988,12 @@ public class FileUtils extends CordovaPlugin { // So we need to replace the space with a url encoded %20 String url = filename.replace(" ", "%20"); MimeTypeMap map = MimeTypeMap.getSingleton(); - return map.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url)); + String extension = MimeTypeMap.getFileExtensionFromUrl(url); + if (extension.toLowerCase().equals("3ga")) { + return "audio/3gpp"; + } else { + return map.getMimeTypeFromExtension(extension); + } } /** From 5212cd4dcdc195e96e3b376bd44e162e2b0b1b57 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Tue, 13 Nov 2012 12:50:15 -0500 Subject: [PATCH 4/4] Disable JS Interface on Honeycomb Fixes https://issues.apache.org/jira/browse/CB-1818 --- framework/src/org/apache/cordova/CordovaWebView.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/framework/src/org/apache/cordova/CordovaWebView.java b/framework/src/org/apache/cordova/CordovaWebView.java index 47406101..95890b18 100755 --- a/framework/src/org/apache/cordova/CordovaWebView.java +++ b/framework/src/org/apache/cordova/CordovaWebView.java @@ -274,13 +274,15 @@ public class CordovaWebView extends WebView { } private void exposeJsInterface() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) { + int SDK_INT = Build.VERSION.SDK_INT; + boolean isHoneycomb = (SDK_INT >= Build.VERSION_CODES.HONEYCOMB && SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR2); + if (isHoneycomb || (SDK_INT < Build.VERSION_CODES.GINGERBREAD)) { Log.i(TAG, "Disabled addJavascriptInterface() bridge since Android version is old."); // Bug being that Java Strings do not get converted to JS strings automatically. // This isn't hard to work-around on the JS side, but it's easier to just // use the prompt bridge instead. return; - } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB && Build.MANUFACTURER.equals("unknown")) { + } else if (SDK_INT < Build.VERSION_CODES.HONEYCOMB && Build.MANUFACTURER.equals("unknown")) { // addJavascriptInterface crashes on the 2.3 emulator. Log.i(TAG, "Disabled addJavascriptInterface() bridge callback due to a bug on the 2.3 emulator"); return;