CB-4003 - Add config option to not use location information in Camera plugin (and default to not use it)
Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-camera/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-camera/commit/ae228200 Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-camera/tree/ae228200 Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-camera/diff/ae228200 Branch: refs/heads/master Commit: ae228200464023cf7fada8d483a3ed647bc864cc Parents: fa30a56 Author: Shazron Abdullah <shaz...@apache.org> Authored: Wed Sep 3 17:40:20 2014 -0700 Committer: Anis Kadri <a...@apache.org> Committed: Fri Sep 5 11:08:15 2014 -0700 ---------------------------------------------------------------------- doc/index.md | 9 ++++++++- plugin.xml | 1 + src/ios/CDVCamera.h | 1 + src/ios/CDVCamera.m | 36 +++++++++++++++++++++++------------- 4 files changed, 33 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-plugin-camera/blob/ae228200/doc/index.md ---------------------------------------------------------------------- diff --git a/doc/index.md b/doc/index.md index 8429769..0ca141f 100644 --- a/doc/index.md +++ b/doc/index.md @@ -85,6 +85,13 @@ than `DATA_URL`. - Windows Phone 7 and 8 - Windows 8 +### Preferences (iOS) + +- __CameraUsesGeolocation__ (boolean, defaults to false). For capturing JPEGs, set to true to get geolocation data in the EXIF header. This will trigger a request for geolocation permissions if set to true. + + <preference name="CameraUsesGeolocation" value="false" /> + + ### Amazon Fire OS Quirks Amazon Fire OS uses intents to launch the camera activity on the device to capture @@ -226,7 +233,7 @@ Optional parameters to customize the camera settings. FRONT : 1 // Use the front-facing camera }; -### Amazon Fire OSQuirks +### Amazon Fire OS Quirks - Any `cameraDirection` value results in a back-facing photo. http://git-wip-us.apache.org/repos/asf/cordova-plugin-camera/blob/ae228200/plugin.xml ---------------------------------------------------------------------- diff --git a/plugin.xml b/plugin.xml index c9276e5..a124ee9 100644 --- a/plugin.xml +++ b/plugin.xml @@ -126,6 +126,7 @@ <feature name="Camera"> <param name="ios-package" value="CDVCamera" /> </feature> + <preference name="CameraUsesGeolocation" value="false" /> </config-file> <js-module src="www/ios/CameraPopoverHandle.js" name="CameraPopoverHandle"> http://git-wip-us.apache.org/repos/asf/cordova-plugin-camera/blob/ae228200/src/ios/CDVCamera.h ---------------------------------------------------------------------- diff --git a/src/ios/CDVCamera.h b/src/ios/CDVCamera.h index 5d4a81d..c2a71ac 100644 --- a/src/ios/CDVCamera.h +++ b/src/ios/CDVCamera.h @@ -57,6 +57,7 @@ typedef NSUInteger CDVMediaType; @property (assign) bool cropToSize; @property (strong) UIView* webView; @property (assign) BOOL popoverSupported; +@property (assign) BOOL usesGeolocation; @end http://git-wip-us.apache.org/repos/asf/cordova-plugin-camera/blob/ae228200/src/ios/CDVCamera.m ---------------------------------------------------------------------- diff --git a/src/ios/CDVCamera.m b/src/ios/CDVCamera.m index ac20c39..c2409be 100644 --- a/src/ios/CDVCamera.m +++ b/src/ios/CDVCamera.m @@ -49,6 +49,13 @@ static NSSet* org_apache_cordova_validArrowDirections; @synthesize hasPendingOperation, pickerController, locationManager; + +- (BOOL)usesGeolocation +{ + id useGeo = [self.commandDelegate.settings objectForKey:[@"CameraUsesGeolocation" lowercaseString]]; + return [(NSNumber*)useGeo boolValue]; +} + - (BOOL)popoverSupported { return (NSClassFromString(@"UIPopoverController") != nil) && @@ -121,6 +128,7 @@ static NSSet* org_apache_cordova_validArrowDirections; // we need to capture this state for memory warnings that dealloc this object cameraPicker.webView = self.webView; cameraPicker.popoverSupported = [self popoverSupported]; + cameraPicker.usesGeolocation = [self usesGeolocation]; cameraPicker.correctOrientation = [[arguments objectAtIndex:8] boolValue]; cameraPicker.saveToPhotoAlbum = [[arguments objectAtIndex:9] boolValue]; @@ -306,20 +314,22 @@ static NSSet* org_apache_cordova_validArrowDirections; data = UIImageJPEGRepresentation(returnedImage, 1.0); } else { data = UIImageJPEGRepresentation(returnedImage, cameraPicker.quality / 100.0f); - - NSDictionary *controllerMetadata = [info objectForKey:@"UIImagePickerControllerMediaMetadata"]; - if (controllerMetadata) { - self.data = data; - self.metadata = [[NSMutableDictionary alloc] init]; - - NSMutableDictionary *EXIFDictionary = [[controllerMetadata objectForKey:(NSString *)kCGImagePropertyExifDictionary]mutableCopy]; - if (EXIFDictionary) [self.metadata setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary]; - - if (IsAtLeastiOSVersion(@"8.0")) { - [[self locationManager] performSelector:NSSelectorFromString(@"requestWhenInUseAuthorization") withObject:nil afterDelay:0]; + + if (cameraPicker.usesGeolocation) { + NSDictionary *controllerMetadata = [info objectForKey:@"UIImagePickerControllerMediaMetadata"]; + if (controllerMetadata) { + self.data = data; + self.metadata = [[NSMutableDictionary alloc] init]; + + NSMutableDictionary *EXIFDictionary = [[controllerMetadata objectForKey:(NSString *)kCGImagePropertyExifDictionary]mutableCopy]; + if (EXIFDictionary) [self.metadata setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary]; + + if (IsAtLeastiOSVersion(@"8.0")) { + [[self locationManager] performSelector:NSSelectorFromString(@"requestWhenInUseAuthorization") withObject:nil afterDelay:0]; + } + [[self locationManager] startUpdatingLocation]; + return; } - [[self locationManager] startUpdatingLocation]; - return; } }