diff --git a/src/android/CameraLauncher.java b/src/android/CameraLauncher.java index b9f5b71..114bb9b 100644 --- a/src/android/CameraLauncher.java +++ b/src/android/CameraLauncher.java @@ -686,68 +686,75 @@ public class CameraLauncher extends CordovaPlugin implements MediaScannerConnect LOG.d(LOG_TAG, "File location is: " + fileLocation); String uriString = uri.toString(); + String finalLocation = fileLocation != null ? fileLocation : uriString; String mimeType = FileHelper.getMimeType(uriString, this.cordova); - // If you ask for video or the selected file doesn't have JPEG or PNG mime type - // there will be no attempt to resize any returned data - if (this.mediaType == VIDEO || !(JPEG_MIME_TYPE.equalsIgnoreCase(mimeType) || PNG_MIME_TYPE.equalsIgnoreCase(mimeType))) { - this.callbackContext.success(fileLocation); - } - else { + if (finalLocation == null) { + this.failPicture("Error retrieving result."); + } else { - // This is a special case to just return the path as no scaling, - // rotating, nor compressing needs to be done - if (this.targetHeight == -1 && this.targetWidth == -1 && - (destType == FILE_URI || destType == NATIVE_URI) && !this.correctOrientation && - mimeType != null && mimeType.equalsIgnoreCase(getMimetypeForFormat(encodingType))) - { - this.callbackContext.success(uriString); - } else { - Bitmap bitmap = null; - try { - bitmap = getScaledAndRotatedBitmap(uriString); - } catch (IOException e) { - e.printStackTrace(); - } - if (bitmap == null) { - LOG.d(LOG_TAG, "I either have a null image path or bitmap"); - this.failPicture("Unable to create bitmap!"); - return; - } + // If you ask for video or the selected file doesn't have JPEG or PNG mime type + // there will be no attempt to resize any returned data + if (this.mediaType == VIDEO || !(JPEG_MIME_TYPE.equalsIgnoreCase(mimeType) || PNG_MIME_TYPE.equalsIgnoreCase(mimeType))) { + this.callbackContext.success(finalLocation); + } + else { - // If sending base64 image back - if (destType == DATA_URL) { - this.processPicture(bitmap, this.encodingType); - } - - // If sending filename back - else if (destType == FILE_URI || destType == NATIVE_URI) { - // Did we modify the image? - if ( (this.targetHeight > 0 && this.targetWidth > 0) || - (this.correctOrientation && this.orientationCorrected) || - !mimeType.equalsIgnoreCase(getMimetypeForFormat(encodingType))) - { - try { - String modifiedPath = this.outputModifiedBitmap(bitmap, uri); - // The modified image is cached by the app in order to get around this and not have to delete you - // application cache I'm adding the current system time to the end of the file url. - this.callbackContext.success("file://" + modifiedPath + "?" + System.currentTimeMillis()); - - } catch (Exception e) { - e.printStackTrace(); - this.failPicture("Error retrieving image."); - } - } else { - this.callbackContext.success(fileLocation); + // This is a special case to just return the path as no scaling, + // rotating, nor compressing needs to be done + if (this.targetHeight == -1 && this.targetWidth == -1 && + (destType == FILE_URI || destType == NATIVE_URI) && !this.correctOrientation && + mimeType != null && mimeType.equalsIgnoreCase(getMimetypeForFormat(encodingType))) + { + this.callbackContext.success(finalLocation); + } else { + Bitmap bitmap = null; + try { + bitmap = getScaledAndRotatedBitmap(uriString); + } catch (IOException e) { + e.printStackTrace(); } + if (bitmap == null) { + LOG.d(LOG_TAG, "I either have a null image path or bitmap"); + this.failPicture("Unable to create bitmap!"); + return; + } + + // If sending base64 image back + if (destType == DATA_URL) { + this.processPicture(bitmap, this.encodingType); + } + + // If sending filename back + else if (destType == FILE_URI || destType == NATIVE_URI) { + // Did we modify the image? + if ( (this.targetHeight > 0 && this.targetWidth > 0) || + (this.correctOrientation && this.orientationCorrected) || + !mimeType.equalsIgnoreCase(getMimetypeForFormat(encodingType))) + { + try { + String modifiedPath = this.outputModifiedBitmap(bitmap, uri); + // The modified image is cached by the app in order to get around this and not have to delete you + // application cache I'm adding the current system time to the end of the file url. + this.callbackContext.success("file://" + modifiedPath + "?" + System.currentTimeMillis()); + + } catch (Exception e) { + e.printStackTrace(); + this.failPicture("Error retrieving image."); + } + } else { + this.callbackContext.success(finalLocation); + } + } + if (bitmap != null) { + bitmap.recycle(); + bitmap = null; + } + System.gc(); } - if (bitmap != null) { - bitmap.recycle(); - bitmap = null; - } - System.gc(); } } + } /**