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 Phone 7 and 8
- Windows 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 Quirks
Amazon Fire OS uses intents to launch the camera activity on the device to capture 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 FRONT : 1 // Use the front-facing camera
}; };
### Amazon Fire OSQuirks ### Amazon Fire OS Quirks
- Any `cameraDirection` value results in a back-facing photo. - Any `cameraDirection` value results in a back-facing photo.

View File

@ -126,6 +126,7 @@
<feature name="Camera"> <feature name="Camera">
<param name="ios-package" value="CDVCamera" /> <param name="ios-package" value="CDVCamera" />
</feature> </feature>
<preference name="CameraUsesGeolocation" value="false" />
</config-file> </config-file>
<js-module src="www/ios/CameraPopoverHandle.js" name="CameraPopoverHandle"> <js-module src="www/ios/CameraPopoverHandle.js" name="CameraPopoverHandle">

View File

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

View File

@ -49,6 +49,13 @@ static NSSet* org_apache_cordova_validArrowDirections;
@synthesize hasPendingOperation, pickerController, locationManager; @synthesize hasPendingOperation, pickerController, locationManager;
- (BOOL)usesGeolocation
{
id useGeo = [self.commandDelegate.settings objectForKey:[@"CameraUsesGeolocation" lowercaseString]];
return [(NSNumber*)useGeo boolValue];
}
- (BOOL)popoverSupported - (BOOL)popoverSupported
{ {
return (NSClassFromString(@"UIPopoverController") != nil) && 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 // we need to capture this state for memory warnings that dealloc this object
cameraPicker.webView = self.webView; cameraPicker.webView = self.webView;
cameraPicker.popoverSupported = [self popoverSupported]; cameraPicker.popoverSupported = [self popoverSupported];
cameraPicker.usesGeolocation = [self usesGeolocation];
cameraPicker.correctOrientation = [[arguments objectAtIndex:8] boolValue]; cameraPicker.correctOrientation = [[arguments objectAtIndex:8] boolValue];
cameraPicker.saveToPhotoAlbum = [[arguments objectAtIndex:9] boolValue]; cameraPicker.saveToPhotoAlbum = [[arguments objectAtIndex:9] boolValue];
@ -307,19 +315,21 @@ static NSSet* org_apache_cordova_validArrowDirections;
} else { } else {
data = UIImageJPEGRepresentation(returnedImage, cameraPicker.quality / 100.0f); data = UIImageJPEGRepresentation(returnedImage, cameraPicker.quality / 100.0f);
NSDictionary *controllerMetadata = [info objectForKey:@"UIImagePickerControllerMediaMetadata"]; if (cameraPicker.usesGeolocation) {
if (controllerMetadata) { NSDictionary *controllerMetadata = [info objectForKey:@"UIImagePickerControllerMediaMetadata"];
self.data = data; if (controllerMetadata) {
self.metadata = [[NSMutableDictionary alloc] init]; self.data = data;
self.metadata = [[NSMutableDictionary alloc] init];
NSMutableDictionary *EXIFDictionary = [[controllerMetadata objectForKey:(NSString *)kCGImagePropertyExifDictionary]mutableCopy]; NSMutableDictionary *EXIFDictionary = [[controllerMetadata objectForKey:(NSString *)kCGImagePropertyExifDictionary]mutableCopy];
if (EXIFDictionary) [self.metadata setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary]; if (EXIFDictionary) [self.metadata setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary];
if (IsAtLeastiOSVersion(@"8.0")) { if (IsAtLeastiOSVersion(@"8.0")) {
[[self locationManager] performSelector:NSSelectorFromString(@"requestWhenInUseAuthorization") withObject:nil afterDelay:0]; [[self locationManager] performSelector:NSSelectorFromString(@"requestWhenInUseAuthorization") withObject:nil afterDelay:0];
}
[[self locationManager] startUpdatingLocation];
return;
} }
[[self locationManager] startUpdatingLocation];
return;
} }
} }