diff --git a/src/android/Capture.java b/src/android/Capture.java index 40c49e49..044cacde 100644 --- a/src/android/Capture.java +++ b/src/android/Capture.java @@ -366,8 +366,19 @@ else if (resultCode == Activity.RESULT_CANCELED) { public void onAudioActivityResult(Request req, Intent intent) { // Get the uri of the audio clip Uri data = intent.getData(); - // create a file object from the uri - req.results.put(createMediaFile(data)); + if (data == null) { + pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_NO_MEDIA_FILES, "Error: data is null")); + return; + } + + // Create a file object from the uri + JSONObject mediaFile = createMediaFile(data); + if (mediaFile == null) { + pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_INTERNAL_ERR, "Error: no mediaFile created from " + data)); + return; + } + + req.results.put(mediaFile); if (req.results.length() >= req.limit) { // Send Uri back to JavaScript for listening to audio @@ -379,8 +390,21 @@ public void onAudioActivityResult(Request req, Intent intent) { } public void onImageActivityResult(Request req) { - // Add image to results - req.results.put(createMediaFile(imageUri)); + // Get the uri of the image + Uri data = imageUri; + if (data == null) { + pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_NO_MEDIA_FILES, "Error: data is null")); + return; + } + + // Create a file object from the uri + JSONObject mediaFile = createMediaFile(data); + if (mediaFile == null) { + pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_INTERNAL_ERR, "Error: no mediaFile created from " + data)); + return; + } + + req.results.put(mediaFile); checkForDuplicateImage(); @@ -396,21 +420,26 @@ public void onImageActivityResult(Request req) { public void onVideoActivityResult(Request req, Intent intent) { // Get the uri of the video clip Uri data = intent.getData(); - - // create a file object from the uri - if(data == null) { + if (data == null) { pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_NO_MEDIA_FILES, "Error: data is null")); + return; } - else { - req.results.put(createMediaFile(data)); - if (req.results.length() >= req.limit) { - // Send Uri back to JavaScript for viewing video - pendingRequests.resolveWithSuccess(req); - } else { - // still need to capture more video clips - captureVideo(req); - } + // Create a file object from the uri + JSONObject mediaFile = createMediaFile(data); + if (mediaFile == null) { + pendingRequests.resolveWithFailure(req, createErrorObject(CAPTURE_INTERNAL_ERR, "Error: no mediaFile created from " + data)); + return; + } + + req.results.put(mediaFile); + + if (req.results.length() >= req.limit) { + // Send Uri back to JavaScript for viewing video + pendingRequests.resolveWithSuccess(req); + } else { + // still need to capture more video clips + captureVideo(req); } } @@ -423,6 +452,10 @@ public void onVideoActivityResult(Request req, Intent intent) { */ private JSONObject createMediaFile(Uri data) { File fp = webView.getResourceApi().mapUriToFile(data); + if (fp == null) { + return null; + } + JSONObject obj = new JSONObject(); Class webViewClass = webView.getClass();