You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by jc...@apache.org on 2018/12/04 11:21:45 UTC
[cordova-plugin-camera] branch master updated: CB-13813: (iOS)
Remove old iOS code (#381)
This is an automated email from the ASF dual-hosted git repository.
jcesarmobile pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-plugin-camera.git
The following commit(s) were added to refs/heads/master by this push:
new ce77aab CB-13813: (iOS) Remove old iOS code (#381)
ce77aab is described below
commit ce77aab010bdbedb43ba84dd831ea7352c09402c
Author: jcesarmobile <jc...@gmail.com>
AuthorDate: Tue Dec 4 12:21:39 2018 +0100
CB-13813: (iOS) Remove old iOS code (#381)
---
src/ios/CDVCamera.m | 124 ++++++++++++++++++++++++----------------------------
1 file changed, 56 insertions(+), 68 deletions(-)
diff --git a/src/ios/CDVCamera.m b/src/ios/CDVCamera.m
index 6e39d23..aae4247 100644
--- a/src/ios/CDVCamera.m
+++ b/src/ios/CDVCamera.m
@@ -139,11 +139,9 @@ static NSString* toBase64(NSData* data) {
- (void)takePicture:(CDVInvokedUrlCommand*)command
{
self.hasPendingOperation = YES;
-
__weak CDVCamera* weakSelf = self;
[self.commandDelegate runInBackground:^{
-
CDVPictureOptions* pictureOptions = [CDVPictureOptions createFromTakePictureArguments:command];
pictureOptions.popoverSupported = [weakSelf popoverSupported];
pictureOptions.usesGeolocation = [weakSelf usesGeolocation];
@@ -158,82 +156,72 @@ static NSString* toBase64(NSData* data) {
}
// Validate the app has permission to access the camera
- if (pictureOptions.sourceType == UIImagePickerControllerSourceTypeCamera && [AVCaptureDevice respondsToSelector:@selector(authorizationStatusForMediaType:)]) {
- AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
- if (authStatus == AVAuthorizationStatusDenied ||
- authStatus == AVAuthorizationStatusRestricted) {
- // If iOS 8+, offer a link to the Settings app
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wtautological-pointer-compare"
- NSString* settingsButton = (&UIApplicationOpenSettingsURLString != NULL)
- ? NSLocalizedString(@"Settings", nil)
- : nil;
-#pragma clang diagnostic pop
-
- // Denied; show an alert
- dispatch_async(dispatch_get_main_queue(), ^{
- [[[UIAlertView alloc] initWithTitle:[[NSBundle mainBundle]
- objectForInfoDictionaryKey:@"CFBundleDisplayName"]
- message:NSLocalizedString(@"Access to the camera has been prohibited; please enable it in the Settings app to continue.", nil)
- delegate:weakSelf
- cancelButtonTitle:NSLocalizedString(@"OK", nil)
- otherButtonTitles:settingsButton, nil] show];
- });
- }
+ if (pictureOptions.sourceType == UIImagePickerControllerSourceTypeCamera) {
+ [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted)
+ {
+ if(!granted)
+ {
+ // Denied; show an alert
+ dispatch_async(dispatch_get_main_queue(), ^{
+ UIAlertController *alertController = [UIAlertController alertControllerWithTitle:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"] message:NSLocalizedString(@"Access to the camera has been prohibited; please enable it in the Settings app to continue.", nil) preferredStyle:UIAlertControllerStyleAlert];
+ [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+ [weakSelf sendNoPermissionResult:command.callbackId];
+ }]];
+ [alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Settings", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+ [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
+ [weakSelf sendNoPermissionResult:command.callbackId];
+ }]];
+ [weakSelf.viewController presentViewController:alertController animated:YES completion:nil];
+ });
+ } else {
+ [weakSelf showCameraPicker:command.callbackId withOptions:pictureOptions];
+ }
+ }];
+ } else {
+ [weakSelf showCameraPicker:command.callbackId withOptions:pictureOptions];
}
-
- CDVCameraPicker* cameraPicker = [CDVCameraPicker createFromPictureOptions:pictureOptions];
- weakSelf.pickerController = cameraPicker;
-
- cameraPicker.delegate = weakSelf;
- cameraPicker.callbackId = command.callbackId;
- // we need to capture this state for memory warnings that dealloc this object
- cameraPicker.webView = weakSelf.webView;
-
- // Perform UI operations on the main thread
- dispatch_async(dispatch_get_main_queue(), ^{
- // If a popover is already open, close it; we only want one at a time.
- if (([[weakSelf pickerController] pickerPopoverController] != nil) && [[[weakSelf pickerController] pickerPopoverController] isPopoverVisible]) {
- [[[weakSelf pickerController] pickerPopoverController] dismissPopoverAnimated:YES];
- [[[weakSelf pickerController] pickerPopoverController] setDelegate:nil];
- [[weakSelf pickerController] setPickerPopoverController:nil];
- }
-
- if ([weakSelf popoverSupported] && (pictureOptions.sourceType != UIImagePickerControllerSourceTypeCamera)) {
- if (cameraPicker.pickerPopoverController == nil) {
- cameraPicker.pickerPopoverController = [[NSClassFromString(@"UIPopoverController") alloc] initWithContentViewController:cameraPicker];
- }
- [weakSelf displayPopover:pictureOptions.popoverOptions];
- weakSelf.hasPendingOperation = NO;
- } else {
- cameraPicker.modalPresentationStyle = UIModalPresentationCurrentContext;
- [weakSelf.viewController presentViewController:cameraPicker animated:YES completion:^{
- weakSelf.hasPendingOperation = NO;
- }];
- }
- });
}];
}
-// Delegate for camera permission UIAlertView
-- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
+- (void)showCameraPicker:(NSString*)callbackId withOptions:(CDVPictureOptions *) pictureOptions
{
- // If Settings button (on iOS 8), open the settings app
- if (buttonIndex == 1) {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wtautological-pointer-compare"
- if (&UIApplicationOpenSettingsURLString != NULL) {
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
+ CDVCameraPicker* cameraPicker = [CDVCameraPicker createFromPictureOptions:pictureOptions];
+ self.pickerController = cameraPicker;
+
+ cameraPicker.delegate = self;
+ cameraPicker.callbackId = callbackId;
+ // we need to capture this state for memory warnings that dealloc this object
+ cameraPicker.webView = self.webView;
+
+ // Perform UI operations on the main thread
+ dispatch_async(dispatch_get_main_queue(), ^{
+ // If a popover is already open, close it; we only want one at a time.
+ if (([[self pickerController] pickerPopoverController] != nil) && [[[self pickerController] pickerPopoverController] isPopoverVisible]) {
+ [[[self pickerController] pickerPopoverController] dismissPopoverAnimated:YES];
+ [[[self pickerController] pickerPopoverController] setDelegate:nil];
+ [[self pickerController] setPickerPopoverController:nil];
}
-#pragma clang diagnostic pop
- }
- // Dismiss the view
- [[self.pickerController presentingViewController] dismissViewControllerAnimated:YES completion:nil];
+ if ([self popoverSupported] && (pictureOptions.sourceType != UIImagePickerControllerSourceTypeCamera)) {
+ if (cameraPicker.pickerPopoverController == nil) {
+ cameraPicker.pickerPopoverController = [[NSClassFromString(@"UIPopoverController") alloc] initWithContentViewController:cameraPicker];
+ }
+ [self displayPopover:pictureOptions.popoverOptions];
+ self.hasPendingOperation = NO;
+ } else {
+ cameraPicker.modalPresentationStyle = UIModalPresentationCurrentContext;
+ [self.viewController presentViewController:cameraPicker animated:YES completion:^{
+ self.hasPendingOperation = NO;
+ }];
+ }
+ });
+}
+- (void)sendNoPermissionResult:(NSString*)callbackId
+{
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"has no access to camera"]; // error callback expects string ATM
- [self.commandDelegate sendPluginResult:result callbackId:self.pickerController.callbackId];
+ [self.commandDelegate sendPluginResult:result callbackId:callbackId];
self.hasPendingOperation = NO;
self.pickerController = nil;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org