Updated Branches: refs/heads/master 701f3cca0 -> 5f2c0b787
More Unified JS bug fixes and code cleanup *fix warnings in CDVCamera - bad use of || changed to a tertiary statement *capture - remove references to cast functions and updated to properly find "File" class *Location - updated returnLocationError to include message *Updated sound to return MediaError to onStatus when msg is MEDIA_ERROR. Added back support for playing audio multiple times via numberOfLoops option. Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/commit/5f2c0b78 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/tree/5f2c0b78 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/diff/5f2c0b78 Branch: refs/heads/master Commit: 5f2c0b78730a2a01940b58d7f0669797edc2250b Parents: 701f3cc Author: Becky Gibson <becka...@apache.org> Authored: Wed Mar 21 16:47:38 2012 -0400 Committer: Becky Gibson <becka...@apache.org> Committed: Wed Mar 21 16:55:01 2012 -0400 ---------------------------------------------------------------------- CordovaLib/Classes/CDVCamera.m | 4 +- CordovaLib/Classes/CDVCapture.m | 10 ++++---- CordovaLib/Classes/CDVLocation.h | 1 + CordovaLib/Classes/CDVLocation.m | 32 ++++++++++++++++---------- CordovaLib/Classes/CDVSound.m | 30 +++++++++++------------- CordovaLib/Classes/CDVViewController.h | 2 + 6 files changed, 44 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVCamera.m ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVCamera.m b/CordovaLib/Classes/CDVCamera.m index 7fa7e60..2d48f0e 100644 --- a/CordovaLib/Classes/CDVCamera.m +++ b/CordovaLib/Classes/CDVCamera.m @@ -77,9 +77,9 @@ self.pickerController.correctOrientation = [[options valueForKey:@"correctOrientation"] boolValue]; self.pickerController.saveToPhotoAlbum = [[options valueForKey:@"saveToPhotoAlbum"] boolValue]; - self.pickerController.encodingType = [[arguments objectAtIndex:6] intValue] || EncodingTypeJPEG; + self.pickerController.encodingType = ([arguments objectAtIndex:6]) ? [[arguments objectAtIndex:6] intValue] : EncodingTypeJPEG; - self.pickerController.quality = [[arguments objectAtIndex:1] intValue] || 50; + self.pickerController.quality = ([arguments objectAtIndex:1]) ? [[arguments objectAtIndex:1] intValue] : 50; self.pickerController.returnType = (CDVDestinationType)[[arguments objectAtIndex:2] intValue] || DestinationTypeFileUri; if (sourceType == UIImagePickerControllerSourceTypeCamera) { http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVCapture.m ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVCapture.m b/CordovaLib/Classes/CDVCapture.m index bc17462..05d1444 100644 --- a/CordovaLib/Classes/CDVCapture.m +++ b/CordovaLib/Classes/CDVCapture.m @@ -199,7 +199,7 @@ NSDictionary* fileDict = [self getMediaDictionaryFromPath:filePath ofType: mimeType]; NSArray* fileArray = [NSArray arrayWithObject:fileDict]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsArray: fileArray cast:@"navigator.device.capture._castMediaFile"]; + result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsArray: fileArray]; jsString = [result toSuccessCallbackString:callbackId]; } @@ -288,7 +288,7 @@ NSDictionary* fileDict = [self getMediaDictionaryFromPath:moviePath ofType:nil]; NSArray* fileArray = [NSArray arrayWithObject:fileDict]; - result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsArray: fileArray cast:@"navigator.device.capture._castMediaFile"]; + result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsArray: fileArray]; jsString = [result toSuccessCallbackString:callbackId]; // @@ -361,7 +361,7 @@ if (!mimeType){ // try to determine mime type if not provided - id command = [self.commandDelegate getCommandInstance: @"org.apache.cordova.file"]; + id command = [self.commandDelegate getCommandInstance: @"File"]; bError = !([command isKindOfClass:[CDVFile class]]); if (!bError) { CDVFile* pgFile = (CDVFile*)command; @@ -448,7 +448,7 @@ [fileDict setObject: fullPath forKey:@"fullPath"]; // determine type if(!type) { - id command = [self.commandDelegate getCommandInstance: @"org.apache.cordova.file"]; + id command = [self.commandDelegate getCommandInstance: @"File"]; if([command isKindOfClass:[CDVFile class]]) { CDVFile* pgFile = (CDVFile*)command; NSString* mimeType = [pgFile getMimeTypeFromPath:fullPath]; @@ -843,7 +843,7 @@ NSDictionary* fileDict = [captureCommand getMediaDictionaryFromPath:filePath ofType: @"audio/wav"]; NSArray* fileArray = [NSArray arrayWithObject:fileDict]; - CDVPluginResult* result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsArray: fileArray cast:@"navigator.device.capture._castMediaFile"]; + CDVPluginResult* result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK messageAsArray: fileArray]; self.resultString = [result toSuccessCallbackString:callbackId]; } else { CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageToErrorObject:CAPTURE_INTERNAL_ERR]; http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVLocation.h ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVLocation.h b/CordovaLib/Classes/CDVLocation.h index 6ec0dbc..ae6b4b9 100755 --- a/CordovaLib/Classes/CDVLocation.h +++ b/CordovaLib/Classes/CDVLocation.h @@ -82,6 +82,7 @@ typedef NSUInteger CDVLocationStatus; - (BOOL) hasHeadingSupport; - (void) getLocation:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; - (void) returnLocationInfo: (NSString*) callbackId; +- (void) returnLocationError: (NSUInteger) errorCode withMessage: (NSString*) message; - (void) startLocation; - (void) stopLocation; http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVLocation.m ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVLocation.m b/CordovaLib/Classes/CDVLocation.m index d85d7d4..665ea07 100755 --- a/CordovaLib/Classes/CDVLocation.m +++ b/CordovaLib/Classes/CDVLocation.m @@ -82,7 +82,7 @@ @implementation CDVLocationData -@synthesize locationInfo, locationCallbacks; +@synthesize locationStatus, locationInfo, locationCallbacks; -(CDVLocationData*) init { self = (CDVLocationData*)[super init]; @@ -184,19 +184,25 @@ */ if (!forcePrompt) { - [self returnLocationError:PERMISSIONDENIED]; + [self returnLocationError:PERMISSIONDENIED withMessage: nil]; return; } } if (![self isAuthorized]) { - NSUInteger code = -1; + NSString* message = nil; BOOL authStatusAvailable = [CLLocationManager respondsToSelector:@selector(authorizationStatus)]; // iOS 4.2+ if (authStatusAvailable) { - code = [CLLocationManager authorizationStatus]; + NSUInteger code = [CLLocationManager authorizationStatus]; + if (code == kCLAuthorizationStatusNotDetermined) { + // could return POSITION_UNAVAILABLE but need to coordinate with other platforms + message = @"User undecided on application's use of location services"; + } else if (code == kCLAuthorizationStatusRestricted) { + message = @"application use of location services is restricted"; + } } - - [self returnLocationError:code]; + //PERMISSIONDENIED is only PositionError that makes sense when authorization denied + [self returnLocationError:PERMISSIONDENIED withMessage: message]; return; } @@ -303,7 +309,7 @@ if (lData && !lData.locationInfo) { // return error - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:POSITIONUNAVAILABLE]; + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:POSITIONUNAVAILABLE]; jsString = [result toErrorCallbackString:callbackId]; } else if (lData && lData.locationInfo) { CLLocation* lInfo = lData.locationInfo; @@ -327,10 +333,13 @@ [super writeJavascript:jsString]; } } -- (void)returnLocationError: (NSInteger*) errorCode +- (void)returnLocationError: (NSUInteger) errorCode withMessage: (NSString*) message { + NSMutableDictionary* posError = [NSMutableDictionary dictionaryWithCapacity:2]; + [posError setObject: [NSNumber numberWithInt: errorCode] forKey:@"code"]; + [posError setObject: message ? message : @"" forKey: @"message"]; + CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:posError]; for (NSString *callbackId in self.locationData.locationCallbacks) { - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:*errorCode]; [super writeJavascript:[result toErrorCallbackString:callbackId]]; } [self.locationData.locationCallbacks removeAllObjects]; @@ -507,7 +516,6 @@ - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"locationManager::didFailWithError %@", [error localizedFailureReason]); - NSString* jsCallback = @""; // Compass Error if ([error code] == kCLErrorHeadingFailure) @@ -538,11 +546,11 @@ // PositionError.PERMISSION_DENIED = 1; // PositionError.POSITION_UNAVAILABLE = 2; // PositionError.TIMEOUT = 3; - NSInteger positionError = POSITIONUNAVAILABLE; + NSUInteger positionError = POSITIONUNAVAILABLE; if (error.code == kCLErrorDenied) { positionError = PERMISSIONDENIED; } - [self returnLocationError:positionError]; + [self returnLocationError:positionError withMessage: [error localizedDescription]]; } } http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVSound.m ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVSound.m b/CordovaLib/Classes/CDVSound.m index 0a5f756..03e9ed4 100644 --- a/CordovaLib/Classes/CDVSound.m +++ b/CordovaLib/Classes/CDVSound.m @@ -105,8 +105,8 @@ errMsg = [NSString stringWithFormat: @"Cannot use audio file from resource '%@'", resourcePath]; } if (bError) { - jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, errcode]; - //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR,[self createMediaErrorWithCode: errcode message: errMsg]]; + //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, errcode]; + jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR,[self createMediaErrorWithCode: errcode message: errMsg]]; [super writeJavascript:jsString]; } else { audioFile = [[[CDVAudioFile alloc] init] autorelease]; @@ -179,14 +179,12 @@ } if (!bError) { NSLog(@"Playing audio sample '%@'", audioFile.resourcePath); - /* TODO: do we want to keep numberOfLoops option for iOS only? NSNumber* loopOption = [options objectForKey:@"numberOfLoops"]; NSInteger numberOfLoops = 0; if (loopOption != nil) { numberOfLoops = [loopOption intValue] - 1; } audioFile.player.numberOfLoops = numberOfLoops; - */ if(audioFile.player.isPlaying){ [audioFile.player stop]; audioFile.player.currentTime = 0; @@ -212,8 +210,8 @@ [audioFile.player play]; } */ // error creating the session or player - jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_NONE_SUPPORTED]; - //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_NONE_SUPPORTED message: nil]]; + //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_NONE_SUPPORTED]; + jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_NONE_SUPPORTED message: nil]]; [super writeJavascript:jsString]; } } @@ -301,10 +299,10 @@ // NSLog(@"Prepared audio sample '%@' for playback.", audioFile.resourcePath); CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; - jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);\n%@", @"Cordova.Media.onStatus", mediaId, MEDIA_STATE, state, [result toSuccessCallbackString:callbackId]]; + jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);\n%@", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_STATE, state, [result toSuccessCallbackString:callbackId]]; } else { - jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"Cordova.Media.onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_NONE_SUPPORTED message: nil]]; + jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_NONE_SUPPORTED message: nil]]; } if (jsString) { [super writeJavascript:jsString]; @@ -478,8 +476,8 @@ if (![self.avSession setActive: YES error: &error]){ // other audio with higher priority that does not allow mixing could cause this to fail errorMsg = [NSString stringWithFormat: @"Unable to record audio: %@", [error localizedFailureReason]]; - jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_ABORTED]; - // jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_ABORTED message: errorMsg] ]; + //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_ABORTED]; + jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_ABORTED message: errorMsg] ]; [super writeJavascript:jsString]; return; } @@ -494,8 +492,8 @@ if (self.avSession) { [self.avSession setActive:NO error:nil]; } - jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_ABORTED]; - //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_ABORTED message: errorMsg]]; + //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_ABORTED]; + jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_ABORTED message: errorMsg]]; } else { audioFile.recorder.delegate = self; @@ -551,8 +549,8 @@ if (flag){ jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_STATE, MEDIA_STOPPED]; } else { - jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_DECODE]; - //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_DECODE message:nil]]; + //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_DECODE]; + jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"cordova.require('cordova/plugin/Media').onStatuss", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_DECODE message:nil]]; } if (self.avSession) { [self.avSession setActive:NO error:nil]; @@ -575,8 +573,8 @@ jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_STATE, MEDIA_STOPPED]; } else { - jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_DECODE]; - //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_DECODE message:nil]]; + //jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%d);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, MEDIA_ERR_DECODE]; + jsString = [NSString stringWithFormat: @"%@(\"%@\",%d,%@);", @"cordova.require('cordova/plugin/Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode: MEDIA_ERR_DECODE message:nil]]; } if (self.avSession) { http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/5f2c0b78/CordovaLib/Classes/CDVViewController.h ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVViewController.h b/CordovaLib/Classes/CDVViewController.h index 41f4d1b..11a15e1 100644 --- a/CordovaLib/Classes/CDVViewController.h +++ b/CordovaLib/Classes/CDVViewController.h @@ -51,12 +51,14 @@ + (NSString*) cordovaVersion; + (NSString*) applicationDocumentsDirectory; +- (void) printMultitaskingInfo; - (void) createGapView; - (int) executeQueuedCommands; - (void) flushCommandQueue; - (void) javascriptAlert:(NSString*)text; +//- (NSString*) pathForResource:(NSString*)resourcepath; - (NSString*) appURLScheme; - (NSDictionary*) deviceProperties;