CB-4003 - Add config option to not use location information in Camera plugin (and default to not use it)

This commit is contained in:
Shazron Abdullah 2014-09-03 17:40:20 -07:00 committed by Anis Kadri
parent fa30a56760
commit ae22820046
4 changed files with 33 additions and 14 deletions

View File

@ -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.

View File

@ -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">

View File

@ -57,6 +57,7 @@ typedef NSUInteger CDVMediaType;
@property (assign) bool cropToSize;
@property (strong) UIView* webView;
@property (assign) BOOL popoverSupported;
@property (assign) BOOL usesGeolocation;
@end

View File

@ -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;
}
}