From 5b8324e98477b3066a00a1e8ecf4ac9fe0fbc714 Mon Sep 17 00:00:00 2001 From: Manu Garcia Urreta Date: Fri, 28 Mar 2014 20:05:04 -0300 Subject: [PATCH 1/5] Prevent NPE on processResiultFromGallery when intent comes null close #22 --- src/android/CameraLauncher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/android/CameraLauncher.java b/src/android/CameraLauncher.java index 96c15da..6d80f73 100755 --- a/src/android/CameraLauncher.java +++ b/src/android/CameraLauncher.java @@ -641,7 +641,7 @@ private String ouputModifiedBitmap(Bitmap bitmap, Uri uri) throws IOException { // If retrieving photo from library else if ((srcType == PHOTOLIBRARY) || (srcType == SAVEDPHOTOALBUM)) { - if (resultCode == Activity.RESULT_OK) { + if (resultCode == Activity.RESULT_OK && intent != null) { this.processResultFromGallery(destType, intent); } else if (resultCode == Activity.RESULT_CANCELED) { From 1650dce693cccca785ecf03a6b5e4124ba4e8355 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Fri, 27 Jun 2014 13:49:56 -0400 Subject: [PATCH 2/5] ios: Delete postImage (dead code) --- src/ios/CDVCamera.h | 1 - src/ios/CDVCamera.m | 42 ------------------------------------------ 2 files changed, 43 deletions(-) diff --git a/src/ios/CDVCamera.h b/src/ios/CDVCamera.h index 744ae7f..63deac9 100644 --- a/src/ios/CDVCamera.h +++ b/src/ios/CDVCamera.h @@ -84,7 +84,6 @@ typedef NSUInteger CDVMediaType; * quality: integer between 1 and 100 */ - (void)takePicture:(CDVInvokedUrlCommand*)command; -- (void)postImage:(UIImage*)anImage withFilename:(NSString*)filename toUrl:(NSURL*)url; - (void)cleanup:(CDVInvokedUrlCommand*)command; - (void)repositionPopover:(CDVInvokedUrlCommand*)command; diff --git a/src/ios/CDVCamera.m b/src/ios/CDVCamera.m index ab99297..fc1afb4 100644 --- a/src/ios/CDVCamera.m +++ b/src/ios/CDVCamera.m @@ -533,48 +533,6 @@ static NSSet* org_apache_cordova_validArrowDirections; return newImage; } -- (void)postImage:(UIImage*)anImage withFilename:(NSString*)filename toUrl:(NSURL*)url -{ - self.hasPendingOperation = YES; - - NSString* boundary = @"----BOUNDARY_IS_I"; - - NSMutableURLRequest* req = [NSMutableURLRequest requestWithURL:url]; - [req setHTTPMethod:@"POST"]; - - NSString* contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; - [req setValue:contentType forHTTPHeaderField:@"Content-type"]; - - NSData* imageData = UIImagePNGRepresentation(anImage); - - // adding the body - NSMutableData* postBody = [NSMutableData data]; - - // first parameter an image - [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"upload\"; filename=\"%@\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]]; - [postBody appendData:[@"Content-Type: image/png\r\n\r\n" dataUsingEncoding : NSUTF8StringEncoding]]; - [postBody appendData:imageData]; - - // // second parameter information - // [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; - // [postBody appendData:[@"Content-Disposition: form-data; name=\"some_other_name\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; - // [postBody appendData:[@"some_other_value" dataUsingEncoding:NSUTF8StringEncoding]]; - // [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r \n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; - - [req setHTTPBody:postBody]; - - NSURLResponse* response; - NSError* error; - [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error]; - - // NSData* result = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error]; - // NSString * resultStr = [[[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding] autorelease]; - - self.hasPendingOperation = NO; -} - - - (CLLocationManager *)locationManager { if (locationManager != nil) { From 543c4198d8bd5f4d8ecd02a778d4b9009062cd80 Mon Sep 17 00:00:00 2001 From: Dominik Pesch Date: Wed, 4 Jun 2014 22:16:32 +0200 Subject: [PATCH 3/5] CB-6875 android: Handle exception when SDCard is not mounted close #29 --- src/android/CameraLauncher.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) mode change 100755 => 100644 src/android/CameraLauncher.java diff --git a/src/android/CameraLauncher.java b/src/android/CameraLauncher.java old mode 100755 new mode 100644 index 6d80f73..64d185b --- a/src/android/CameraLauncher.java +++ b/src/android/CameraLauncher.java @@ -380,14 +380,19 @@ public class CameraLauncher extends CordovaPlugin implements MediaScannerConnect else if (destType == FILE_URI || destType == NATIVE_URI) { if (this.saveToPhotoAlbum) { Uri inputUri = getUriFromMediaStore(); - //Just because we have a media URI doesn't mean we have a real file, we need to make it - uri = Uri.fromFile(new File(FileHelper.getRealPath(inputUri, this.cordova))); + try { + //Just because we have a media URI doesn't mean we have a real file, we need to make it + uri = Uri.fromFile(new File(FileHelper.getRealPath(inputUri, this.cordova))); + } catch (NullPointerException e) { + uri = null; + } } else { uri = Uri.fromFile(new File(getTempDirectoryPath(), System.currentTimeMillis() + ".jpg")); } if (uri == null) { this.failPicture("Error capturing image - no media storage found."); + return; } // If all this is true we shouldn't compress the image. @@ -735,11 +740,11 @@ private String ouputModifiedBitmap(Bitmap bitmap, Uri uri) throws IOException { Uri uri; try { uri = this.cordova.getActivity().getContentResolver().insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); - } catch (UnsupportedOperationException e) { + } catch (RuntimeException e) { LOG.d(LOG_TAG, "Can't write to external media storage."); try { uri = this.cordova.getActivity().getContentResolver().insert(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, values); - } catch (UnsupportedOperationException ex) { + } catch (RuntimeException ex) { LOG.d(LOG_TAG, "Can't write to internal media storage."); return null; } From f20703de20fbc30f80b6c6f859d6cfb86a6dffdb Mon Sep 17 00:00:00 2001 From: kieferhagin Date: Mon, 31 Mar 2014 11:04:17 -0500 Subject: [PATCH 4/5] Tweak docs to not use []'s for optional arg since that's JS array notation close #21 --- doc/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/index.md b/doc/index.md index 5875a93..d7016b0 100644 --- a/doc/index.md +++ b/doc/index.md @@ -33,7 +33,7 @@ base64-encoded `String`, or as the URI for the image file. The method itself returns a `CameraPopoverHandle` object that can be used to reposition the file selection popover. - navigator.camera.getPicture( cameraSuccess, cameraError, [ cameraOptions ] ); + navigator.camera.getPicture( cameraSuccess, cameraError, cameraOptions ); ### Description From e4ab155fd097381151357b64e69a1e6f40b076a5 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Thu, 3 Jul 2014 13:21:52 -0400 Subject: [PATCH 5/5] CB-7071 android: Fix callback firing before CROP intent is sent when allowEdit=true --- src/android/CameraLauncher.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/android/CameraLauncher.java b/src/android/CameraLauncher.java index 64d185b..7196fcf 100644 --- a/src/android/CameraLauncher.java +++ b/src/android/CameraLauncher.java @@ -425,14 +425,14 @@ public class CameraLauncher extends CordovaPlugin implements MediaScannerConnect exif.writeExifData(); } if (this.allowEdit) { - performCrop(uri); - } else { - // Send Uri back to JavaScript for viewing image - this.callbackContext.success(uri.toString()); - } + performCrop(uri); + } else { + // Send Uri back to JavaScript for viewing image + this.callbackContext.success(uri.toString()); + } } - // Send Uri back to JavaScript for viewing image - this.callbackContext.success(uri.toString()); + } else { + throw new IllegalStateException(); } this.cleanup(FILE_URI, this.imageUri, uri, bitmap);