private void processResultFromGallery()

in src/android/CameraLauncher.java [696:778]


    private void processResultFromGallery(int destType, Intent intent) {
        Uri uri = intent.getData();
        if (uri == null) {
            if (croppedUri != null) {
                uri = croppedUri;
            } else {
                this.failPicture("null data from photo library");
                return;
            }
        }

        String fileLocation = FileHelper.getRealPath(uri, this.cordova);
        LOG.d(LOG_TAG, "File location is: " + fileLocation);

        String uriString = uri.toString();
        String finalLocation = fileLocation != null ? fileLocation : uriString;
        String mimeTypeOfGalleryFile = FileHelper.getMimeType(uriString, this.cordova);

        if (finalLocation == null) {
            this.failPicture("Error retrieving result.");
        } else {
            // If you ask for video or the selected file cannot be processed
            // there will be no attempt to resize any returned data.
            if (this.mediaType == VIDEO  || !isImageMimeTypeProcessable(mimeTypeOfGalleryFile)) {
                this.callbackContext.success(finalLocation);
            } 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 && !this.correctOrientation &&
                        getMimetypeForEncodingType().equalsIgnoreCase(mimeTypeOfGalleryFile))
                {
                    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) {
                        // Did we modify the image?
                        if ( (this.targetHeight > 0 && this.targetWidth > 0) ||
                                (this.correctOrientation && this.orientationCorrected) ||
                                !mimeTypeOfGalleryFile.equalsIgnoreCase(getMimetypeForEncodingType()))
                        {
                            try {
                                String modifiedPath = this.outputModifiedBitmap(bitmap, uri, mimeTypeOfGalleryFile);
                                // 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: "+e.getLocalizedMessage());
                            }
                        } else {
                            this.callbackContext.success(finalLocation);
                        }
                    }
                    if (bitmap != null) {
                        bitmap.recycle();
                        bitmap = null;
                    }
                    System.gc();
                }
            }
        }

    }