private void processResultFromGallery()

in src/android/CameraLauncher.java [732:866]


    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 uriString = uri.toString();
        String mimeTypeOfGalleryFile = FileHelper.getMimeType(uriString, this.cordova);
        InputStream input;
        try {
            input = cordova.getActivity().getContentResolver().openInputStream(uri);
        } catch (FileNotFoundException e) {
            this.failPicture("Unable to open gallery input stream");
            return;
        }

        if (input == null) {
            this.failPicture("Unable to open gallery input stream");
            return;
        }

        try {
            byte[] data = readData(input);

            // 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(uriString);
            } else {
                Bitmap bitmap = null;

                // 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(uriString);
                } else {
                    try {
                        bitmap = getScaledAndRotatedBitmap(data, mimeTypeOfGalleryFile);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (bitmap == null) {
                        LOG.d(LOG_TAG, "I either have an unreadable uri or null 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(uriString);
                        }
                    }
                    if (bitmap != null) {
                        bitmap.recycle();
                        bitmap = null;
                    }
                    System.gc();
                }
                if (bitmap == null) {
                    LOG.d(LOG_TAG, "I either have an unreadable uri or null 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(uriString);
                    }
                }
                if (bitmap != null) {
                    bitmap.recycle();
                    bitmap = null;
                }
                System.gc();
            }

            input.close();
        }
        catch (Exception e) {
            try {
                input.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            this.failPicture(e.getLocalizedMessage());
        }
    }