diff --git a/README.md b/README.md index 446511744..492df7687 100644 --- a/README.md +++ b/README.md @@ -393,6 +393,8 @@ location. | [width] | Number | 320 | width, in pixels, of the screen element onto which to anchor the popover. | | [height] | Number | 480 | height, in pixels, of the screen element onto which to anchor the popover. | | [arrowDir] | [PopoverArrowDirection](#module_Camera.PopoverArrowDirection) | ARROW_ANY | Direction the arrow on the popover should point. | +| [popoverWidth] | Number | 0 | width of the popover (0 or not specified will use apple's default width). | +| [popoverHeight] | Number | 0 | height of the popover (0 or not specified will use apple's default height). | --- @@ -411,13 +413,13 @@ navigator.camera.getPicture(onSuccess, onFail, { destinationType: Camera.DestinationType.FILE_URI, sourceType: Camera.PictureSourceType.PHOTOLIBRARY, - popoverOptions: new CameraPopoverOptions(300, 300, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY) + popoverOptions: new CameraPopoverOptions(300, 300, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY, 300, 600) }); // Reposition the popover if the orientation changes. window.onorientationchange = function() { var cameraPopoverHandle = new CameraPopoverHandle(); - var cameraPopoverOptions = new CameraPopoverOptions(0, 0, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY); + var cameraPopoverOptions = new CameraPopoverOptions(0, 0, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY, 400, 500); cameraPopoverHandle.setPosition(cameraPopoverOptions); } ``` diff --git a/src/ios/CDVCamera.m b/src/ios/CDVCamera.m index c71de0546..6e39d2313 100644 --- a/src/ios/CDVCamera.m +++ b/src/ios/CDVCamera.m @@ -291,6 +291,19 @@ - (void)displayPopover:(NSDictionary*)options - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { if([navigationController isKindOfClass:[UIImagePickerController class]]){ + + // If popoverWidth and popoverHeight are specified and are greater than 0, then set popover size, else use apple's default popoverSize + NSDictionary* options = self.pickerController.pictureOptions.popoverOptions; + if(options) { + NSInteger popoverWidth = [self integerValueForKey:options key:@"popoverWidth" defaultValue:0]; + NSInteger popoverHeight = [self integerValueForKey:options key:@"popoverHeight" defaultValue:0]; + if(popoverWidth > 0 && popoverHeight > 0) + { + [viewController setPreferredContentSize:CGSizeMake(popoverWidth,popoverHeight)]; + } + } + + UIImagePickerController* cameraPicker = (UIImagePickerController*)navigationController; if(![cameraPicker.mediaTypes containsObject:(NSString*)kUTTypeImage]){ diff --git a/tests/ios/CDVCameraTest/CDVCameraLibTests/CameraTest.m b/tests/ios/CDVCameraTest/CDVCameraLibTests/CameraTest.m index b9439d108..d74cdbaac 100644 --- a/tests/ios/CDVCameraTest/CDVCameraLibTests/CameraTest.m +++ b/tests/ios/CDVCameraTest/CDVCameraLibTests/CameraTest.m @@ -82,7 +82,7 @@ - (void) testPictureOptionsCreate XCTAssertEqual(options.usesGeolocation, NO); // Set each argument, check whether they are set. different from defaults - popoverOptions = @{ @"x" : @1, @"y" : @2, @"width" : @3, @"height" : @4 }; + popoverOptions = @{ @"x" : @1, @"y" : @2, @"width" : @3, @"height" : @4, @"popoverWidth": @200, @"popoverHeight": @300 }; args = @[ @(49), @@ -127,7 +127,7 @@ - (void) testCameraPickerCreate // Souce is Camera, and image type - popoverOptions = @{ @"x" : @1, @"y" : @2, @"width" : @3, @"height" : @4 }; + popoverOptions = @{ @"x" : @1, @"y" : @2, @"width" : @3, @"height" : @4, @"popoverWidth": @200, @"popoverHeight": @300 }; args = @[ @(49), @(DestinationTypeDataUrl), diff --git a/tests/ios/package.json b/tests/ios/package.json index 4b9486f4a..39053030c 100644 --- a/tests/ios/package.json +++ b/tests/ios/package.json @@ -8,6 +8,6 @@ "cordova-ios": "*" }, "scripts": { - "test": "xcodebuild -scheme CordovaLib && xcodebuild test -scheme CDVCameraLibTests -destination 'platform=iOS Simulator,name=iPhone 5'" + "test": "xcodebuild -scheme CordovaLib && xcodebuild test -scheme CDVCameraLibTests -destination 'platform=iOS Simulator,name=iPhone 5s'" } } diff --git a/tests/tests.js b/tests/tests.js index f45b8b66c..e4425d403 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -162,7 +162,7 @@ exports.defineManualTests = function (contentEl, createActionButton) { // Reposition the popover if the orientation changes. window.onorientationchange = function () { - var newPopoverOptions = new CameraPopoverOptions(0, 0, 100, 100, 0); + var newPopoverOptions = new CameraPopoverOptions(0, 0, 100, 100, 0, 300, 400); popoverHandle.setPosition(newPopoverOptions); }; } diff --git a/types/index.d.ts b/types/index.d.ts index fa50e9ce2..6bf45d805 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -136,6 +136,8 @@ interface CameraPopoverOptions { * ARROW_ANY : 15 */ arrowDir : number; + popoverWidth: number; + popoverHeight: number; } declare var Camera: { diff --git a/www/CameraPopoverOptions.js b/www/CameraPopoverOptions.js index 14829fd56..95ff43f96 100644 --- a/www/CameraPopoverOptions.js +++ b/www/CameraPopoverOptions.js @@ -39,14 +39,18 @@ var Camera = require('./Camera'); * @param {Number} [width=320] - width, in pixels, of the screen element onto which to anchor the popover. * @param {Number} [height=480] - height, in pixels, of the screen element onto which to anchor the popover. * @param {module:Camera.PopoverArrowDirection} [arrowDir=ARROW_ANY] - Direction the arrow on the popover should point. + * @param {Number} [popoverWidth=0] - width of the popover (0 or not specified will use apple's default width). + * @param {Number} [popoverHeight=0] - height of the popover (0 or not specified will use apple's default height). */ -var CameraPopoverOptions = function (x, y, width, height, arrowDir) { +var CameraPopoverOptions = function (x, y, width, height, arrowDir, popoverWidth, popoverHeight) { // information of rectangle that popover should be anchored to this.x = x || 0; this.y = y || 32; this.width = width || 320; this.height = height || 480; this.arrowDir = arrowDir || Camera.PopoverArrowDirection.ARROW_ANY; + this.popoverWidth = popoverWidth || 0; + this.popoverHeight = popoverHeight || 0; }; module.exports = CameraPopoverOptions; diff --git a/www/ios/CameraPopoverHandle.js b/www/ios/CameraPopoverHandle.js index 6912a4e44..30728d158 100644 --- a/www/ios/CameraPopoverHandle.js +++ b/www/ios/CameraPopoverHandle.js @@ -37,13 +37,13 @@ var exec = require('cordova/exec'); * { * destinationType: Camera.DestinationType.FILE_URI, * sourceType: Camera.PictureSourceType.PHOTOLIBRARY, - * popoverOptions: new CameraPopoverOptions(300, 300, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY) + * popoverOptions: new CameraPopoverOptions(300, 300, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY, 300, 600) * }); * * // Reposition the popover if the orientation changes. * window.onorientationchange = function() { * var cameraPopoverHandle = new CameraPopoverHandle(); - * var cameraPopoverOptions = new CameraPopoverOptions(0, 0, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY); + * var cameraPopoverOptions = new CameraPopoverOptions(0, 0, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY, 400, 500); * cameraPopoverHandle.setPosition(cameraPopoverOptions); * } * @module CameraPopoverHandle