fixed merge issue with config.xml
Project: http://git-wip-us.apache.org/repos/asf/cordova-ios/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-ios/commit/e292c05c Tree: http://git-wip-us.apache.org/repos/asf/cordova-ios/tree/e292c05c Diff: http://git-wip-us.apache.org/repos/asf/cordova-ios/diff/e292c05c Branch: refs/heads/3.0.0 Commit: e292c05c8edae7ca9f8ad0fdd7edbd733ba8cb83 Parents: 0ae9ce8 Author: Steven Gill <[email protected]> Authored: Mon May 13 11:26:49 2013 -0700 Committer: Steven Gill <[email protected]> Committed: Mon May 13 11:26:49 2013 -0700 ---------------------------------------------------------------------- CordovaLib/Classes/CDV.h | 1 - CordovaLib/Classes/CDVLocation.h | 104 --- CordovaLib/Classes/CDVLocation.m | 623 ------------------ CordovaLib/Classes/CDVViewController.m | 9 - CordovaLib/CordovaLib.xcodeproj/project.pbxproj | 8 - 5 files changed, 0 insertions(+), 745 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/e292c05c/CordovaLib/Classes/CDV.h ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDV.h b/CordovaLib/Classes/CDV.h index 593e9b5..b559f2d 100644 --- a/CordovaLib/Classes/CDV.h +++ b/CordovaLib/Classes/CDV.h @@ -35,7 +35,6 @@ #import "CDVDevice.h" #import "CDVFile.h" #import "CDVFileTransfer.h" -#import "CDVLocation.h" #import "CDVNotification.h" #import "CDVPluginResult.h" #import "CDVReachability.h" http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/e292c05c/CordovaLib/Classes/CDVLocation.h ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVLocation.h b/CordovaLib/Classes/CDVLocation.h deleted file mode 100644 index caf0798..0000000 --- a/CordovaLib/Classes/CDVLocation.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - */ - -#import <UIKit/UIKit.h> -#import <CoreLocation/CoreLocation.h> -#import "CDVPlugin.h" - -enum CDVHeadingStatus { - HEADINGSTOPPED = 0, - HEADINGSTARTING, - HEADINGRUNNING, - HEADINGERROR -}; -typedef NSUInteger CDVHeadingStatus; - -enum CDVLocationStatus { - PERMISSIONDENIED = 1, - POSITIONUNAVAILABLE, - TIMEOUT -}; -typedef NSUInteger CDVLocationStatus; - -// simple object to keep track of heading information -@interface CDVHeadingData : NSObject {} - -@property (nonatomic, assign) CDVHeadingStatus headingStatus; -@property (nonatomic, strong) CLHeading* headingInfo; -@property (nonatomic, strong) NSMutableArray* headingCallbacks; -@property (nonatomic, copy) NSString* headingFilter; -@property (nonatomic, strong) NSDate* headingTimestamp; -@property (assign) NSInteger timeout; - -@end - -// simple object to keep track of location information -@interface CDVLocationData : NSObject { - CDVLocationStatus locationStatus; - NSMutableArray* locationCallbacks; - NSMutableDictionary* watchCallbacks; - CLLocation* locationInfo; -} - -@property (nonatomic, assign) CDVLocationStatus locationStatus; -@property (nonatomic, strong) CLLocation* locationInfo; -@property (nonatomic, strong) NSMutableArray* locationCallbacks; -@property (nonatomic, strong) NSMutableDictionary* watchCallbacks; - -@end - -@interface CDVLocation : CDVPlugin <CLLocationManagerDelegate>{ - @private BOOL __locationStarted; - @private BOOL __highAccuracyEnabled; - CDVHeadingData* headingData; - CDVLocationData* locationData; -} - -@property (nonatomic, strong) CLLocationManager* locationManager; -@property (strong) CDVHeadingData* headingData; -@property (nonatomic, strong) CDVLocationData* locationData; - -- (BOOL)hasHeadingSupport; -- (void)getLocation:(CDVInvokedUrlCommand*)command; -- (void)addWatch:(CDVInvokedUrlCommand*)command; -- (void)clearWatch:(CDVInvokedUrlCommand*)command; -- (void)returnLocationInfo:(NSString*)callbackId andKeepCallback:(BOOL)keepCallback; -- (void)returnLocationError:(NSUInteger)errorCode withMessage:(NSString*)message; -- (void)startLocation:(BOOL)enableHighAccuracy; - -- (void)locationManager:(CLLocationManager*)manager - didUpdateToLocation:(CLLocation*)newLocation - fromLocation:(CLLocation*)oldLocation; - -- (void)locationManager:(CLLocationManager*)manager - didFailWithError:(NSError*)error; - -- (BOOL)isLocationServicesEnabled; - -- (void)getHeading:(CDVInvokedUrlCommand*)command; -- (void)returnHeadingInfo:(NSString*)callbackId keepCallback:(BOOL)bRetain; -- (void)watchHeadingFilter:(CDVInvokedUrlCommand*)command; -- (void)stopHeading:(CDVInvokedUrlCommand*)command; -- (void)startHeadingWithFilter:(CLLocationDegrees)filter; -- (void)locationManager:(CLLocationManager*)manager - didUpdateHeading:(CLHeading*)heading; - -- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager*)manager; - -@end http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/e292c05c/CordovaLib/Classes/CDVLocation.m ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVLocation.m b/CordovaLib/Classes/CDVLocation.m deleted file mode 100644 index ed9ec26..0000000 --- a/CordovaLib/Classes/CDVLocation.m +++ /dev/null @@ -1,623 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, - software distributed under the License is distributed on an - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, either express or implied. See the License for the - specific language governing permissions and limitations - under the License. - */ - -#import "CDVLocation.h" -#import "NSArray+Comparisons.h" - -#pragma mark Constants - -#define kPGLocationErrorDomain @"kPGLocationErrorDomain" -#define kPGLocationDesiredAccuracyKey @"desiredAccuracy" -#define kPGLocationForcePromptKey @"forcePrompt" -#define kPGLocationDistanceFilterKey @"distanceFilter" -#define kPGLocationFrequencyKey @"frequency" - -#pragma mark - -#pragma mark Categories - -@interface NSError (JSONMethods) - -- (NSString*)JSONRepresentation; - -@end - -@interface CLLocation (JSONMethods) - -- (NSString*)JSONRepresentation; - -@end - -@interface CLHeading (JSONMethods) - -- (NSString*)JSONRepresentation; - -@end - -#pragma mark - -#pragma mark CDVHeadingData - -@implementation CDVHeadingData - -@synthesize headingStatus, headingInfo, headingCallbacks, headingFilter, headingTimestamp, timeout; -- (CDVHeadingData*)init -{ - self = (CDVHeadingData*)[super init]; - if (self) { - self.headingStatus = HEADINGSTOPPED; - self.headingInfo = nil; - self.headingCallbacks = nil; - self.headingFilter = nil; - self.headingTimestamp = nil; - self.timeout = 10; - } - return self; -} - -@end - -@implementation CDVLocationData - -@synthesize locationStatus, locationInfo, locationCallbacks, watchCallbacks; -- (CDVLocationData*)init -{ - self = (CDVLocationData*)[super init]; - if (self) { - self.locationInfo = nil; - self.locationCallbacks = nil; - self.watchCallbacks = nil; - } - return self; -} - -@end - -#pragma mark - -#pragma mark CDVLocation - -@implementation CDVLocation - -@synthesize locationManager, headingData, locationData; - -- (CDVPlugin*)initWithWebView:(UIWebView*)theWebView -{ - self = (CDVLocation*)[super initWithWebView:(UIWebView*)theWebView]; - if (self) { - self.locationManager = [[CLLocationManager alloc] init]; - self.locationManager.delegate = self; // Tells the location manager to send updates to this object - __locationStarted = NO; - __highAccuracyEnabled = NO; - self.headingData = nil; - self.locationData = nil; - } - return self; -} - -- (BOOL)hasHeadingSupport -{ - BOOL headingInstancePropertyAvailable = [self.locationManager respondsToSelector:@selector(headingAvailable)]; // iOS 3.x - BOOL headingClassPropertyAvailable = [CLLocationManager respondsToSelector:@selector(headingAvailable)]; // iOS 4.x - - if (headingInstancePropertyAvailable) { // iOS 3.x - return [(id)self.locationManager headingAvailable]; - } else if (headingClassPropertyAvailable) { // iOS 4.x - return [CLLocationManager headingAvailable]; - } else { // iOS 2.x - return NO; - } -} - -- (BOOL)isAuthorized -{ - BOOL authorizationStatusClassPropertyAvailable = [CLLocationManager respondsToSelector:@selector(authorizationStatus)]; // iOS 4.2+ - - if (authorizationStatusClassPropertyAvailable) { - NSUInteger authStatus = [CLLocationManager authorizationStatus]; - return (authStatus == kCLAuthorizationStatusAuthorized) || (authStatus == kCLAuthorizationStatusNotDetermined); - } - - // by default, assume YES (for iOS < 4.2) - return YES; -} - -- (BOOL)isLocationServicesEnabled -{ - BOOL locationServicesEnabledInstancePropertyAvailable = [self.locationManager respondsToSelector:@selector(locationServicesEnabled)]; // iOS 3.x - BOOL locationServicesEnabledClassPropertyAvailable = [CLLocationManager respondsToSelector:@selector(locationServicesEnabled)]; // iOS 4.x - - if (locationServicesEnabledClassPropertyAvailable) { // iOS 4.x - return [CLLocationManager locationServicesEnabled]; - } else if (locationServicesEnabledInstancePropertyAvailable) { // iOS 2.x, iOS 3.x - return [(id)self.locationManager locationServicesEnabled]; - } else { - return NO; - } -} - -- (void)startLocation:(BOOL)enableHighAccuracy -{ - if (![self isLocationServicesEnabled]) { - [self returnLocationError:PERMISSIONDENIED withMessage:@"Location services are not enabled."]; - return; - } - if (![self isAuthorized]) { - NSString* message = nil; - BOOL authStatusAvailable = [CLLocationManager respondsToSelector:@selector(authorizationStatus)]; // iOS 4.2+ - if (authStatusAvailable) { - 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's use of location services is restricted."; - } - } - // PERMISSIONDENIED is only PositionError that makes sense when authorization denied - [self returnLocationError:PERMISSIONDENIED withMessage:message]; - - return; - } - - // Tell the location manager to start notifying us of location updates. We - // first stop, and then start the updating to ensure we get at least one - // update, even if our location did not change. - [self.locationManager stopUpdatingLocation]; - [self.locationManager startUpdatingLocation]; - __locationStarted = YES; - if (enableHighAccuracy) { - __highAccuracyEnabled = YES; - // Set to distance filter to "none" - which should be the minimum for best results. - self.locationManager.distanceFilter = kCLDistanceFilterNone; - // Set desired accuracy to Best. - self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; - } else { - __highAccuracyEnabled = NO; - // TODO: Set distance filter to 10 meters? and desired accuracy to nearest ten meters? arbitrary. - self.locationManager.distanceFilter = 10; - self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; - } -} - -- (void)_stopLocation -{ - if (__locationStarted) { - if (![self isLocationServicesEnabled]) { - return; - } - - [self.locationManager stopUpdatingLocation]; - __locationStarted = NO; - __highAccuracyEnabled = NO; - } -} - -- (void)locationManager:(CLLocationManager*)manager - didUpdateToLocation:(CLLocation*)newLocation - fromLocation:(CLLocation*)oldLocation -{ - CDVLocationData* cData = self.locationData; - - cData.locationInfo = newLocation; - if (self.locationData.locationCallbacks.count > 0) { - for (NSString* callbackId in self.locationData.locationCallbacks) { - [self returnLocationInfo:callbackId andKeepCallback:NO]; - } - - [self.locationData.locationCallbacks removeAllObjects]; - } - if (self.locationData.watchCallbacks.count > 0) { - for (NSString* timerId in self.locationData.watchCallbacks) { - [self returnLocationInfo:[self.locationData.watchCallbacks objectForKey:timerId] andKeepCallback:YES]; - } - } else { - // No callbacks waiting on us anymore, turn off listening. - [self _stopLocation]; - } -} - -- (void)getLocation:(CDVInvokedUrlCommand*)command -{ - NSString* callbackId = command.callbackId; - BOOL enableHighAccuracy = [[command.arguments objectAtIndex:0] boolValue]; - - if ([self isLocationServicesEnabled] == NO) { - NSMutableDictionary* posError = [NSMutableDictionary dictionaryWithCapacity:2]; - [posError setObject:[NSNumber numberWithInt:PERMISSIONDENIED] forKey:@"code"]; - [posError setObject:@"Location services are disabled." forKey:@"message"]; - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:posError]; - [self.commandDelegate sendPluginResult:result callbackId:callbackId]; - } else { - if (!self.locationData) { - self.locationData = [[CDVLocationData alloc] init]; - } - CDVLocationData* lData = self.locationData; - if (!lData.locationCallbacks) { - lData.locationCallbacks = [NSMutableArray arrayWithCapacity:1]; - } - - if (!__locationStarted || (__highAccuracyEnabled != enableHighAccuracy)) { - // add the callbackId into the array so we can call back when get data - if (callbackId != nil) { - [lData.locationCallbacks addObject:callbackId]; - } - // Tell the location manager to start notifying us of heading updates - [self startLocation:enableHighAccuracy]; - } else { - [self returnLocationInfo:callbackId andKeepCallback:NO]; - } - } -} - -- (void)addWatch:(CDVInvokedUrlCommand*)command -{ - NSString* callbackId = command.callbackId; - NSString* timerId = [command.arguments objectAtIndex:0]; - BOOL enableHighAccuracy = [[command.arguments objectAtIndex:1] boolValue]; - - if (!self.locationData) { - self.locationData = [[CDVLocationData alloc] init]; - } - CDVLocationData* lData = self.locationData; - - if (!lData.watchCallbacks) { - lData.watchCallbacks = [NSMutableDictionary dictionaryWithCapacity:1]; - } - - // add the callbackId into the dictionary so we can call back whenever get data - [lData.watchCallbacks setObject:callbackId forKey:timerId]; - - if ([self isLocationServicesEnabled] == NO) { - NSMutableDictionary* posError = [NSMutableDictionary dictionaryWithCapacity:2]; - [posError setObject:[NSNumber numberWithInt:PERMISSIONDENIED] forKey:@"code"]; - [posError setObject:@"Location services are disabled." forKey:@"message"]; - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsDictionary:posError]; - [self.commandDelegate sendPluginResult:result callbackId:callbackId]; - } else { - if (!__locationStarted || (__highAccuracyEnabled != enableHighAccuracy)) { - // Tell the location manager to start notifying us of location updates - [self startLocation:enableHighAccuracy]; - } - } -} - -- (void)clearWatch:(CDVInvokedUrlCommand*)command -{ - NSString* timerId = [command.arguments objectAtIndex:0]; - - if (self.locationData && self.locationData.watchCallbacks && [self.locationData.watchCallbacks objectForKey:timerId]) { - [self.locationData.watchCallbacks removeObjectForKey:timerId]; - } -} - -- (void)stopLocation:(CDVInvokedUrlCommand*)command -{ - [self _stopLocation]; -} - -- (void)returnLocationInfo:(NSString*)callbackId andKeepCallback:(BOOL)keepCallback -{ - CDVPluginResult* result = nil; - CDVLocationData* lData = self.locationData; - - if (lData && !lData.locationInfo) { - // return error - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageToErrorObject:POSITIONUNAVAILABLE]; - } else if (lData && lData.locationInfo) { - CLLocation* lInfo = lData.locationInfo; - NSMutableDictionary* returnInfo = [NSMutableDictionary dictionaryWithCapacity:8]; - NSNumber* timestamp = [NSNumber numberWithDouble:([lInfo.timestamp timeIntervalSince1970] * 1000)]; - [returnInfo setObject:timestamp forKey:@"timestamp"]; - [returnInfo setObject:[NSNumber numberWithDouble:lInfo.speed] forKey:@"velocity"]; - [returnInfo setObject:[NSNumber numberWithDouble:lInfo.verticalAccuracy] forKey:@"altitudeAccuracy"]; - [returnInfo setObject:[NSNumber numberWithDouble:lInfo.horizontalAccuracy] forKey:@"accuracy"]; - [returnInfo setObject:[NSNumber numberWithDouble:lInfo.course] forKey:@"heading"]; - [returnInfo setObject:[NSNumber numberWithDouble:lInfo.altitude] forKey:@"altitude"]; - [returnInfo setObject:[NSNumber numberWithDouble:lInfo.coordinate.latitude] forKey:@"latitude"]; - [returnInfo setObject:[NSNumber numberWithDouble:lInfo.coordinate.longitude] forKey:@"longitude"]; - - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:returnInfo]; - [result setKeepCallbackAsBool:keepCallback]; - } - if (result) { - [self.commandDelegate sendPluginResult:result callbackId:callbackId]; - } -} - -- (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) { - [self.commandDelegate sendPluginResult:result callbackId:callbackId]; - } - - [self.locationData.locationCallbacks removeAllObjects]; - - for (NSString* callbackId in self.locationData.watchCallbacks) { - [self.commandDelegate sendPluginResult:result callbackId:callbackId]; - } -} - -// called to get the current heading -// Will call location manager to startUpdatingHeading if necessary - -- (void)getHeading:(CDVInvokedUrlCommand*)command -{ - NSString* callbackId = command.callbackId; - NSDictionary* options = [command.arguments objectAtIndex:0 withDefault:nil]; - NSNumber* filter = [options valueForKey:@"filter"]; - - if (filter) { - [self watchHeadingFilter:command]; - return; - } - if ([self hasHeadingSupport] == NO) { - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:20]; - [self.commandDelegate sendPluginResult:result callbackId:callbackId]; - } else { - // heading retrieval does is not affected by disabling locationServices and authorization of app for location services - if (!self.headingData) { - self.headingData = [[CDVHeadingData alloc] init]; - } - CDVHeadingData* hData = self.headingData; - - if (!hData.headingCallbacks) { - hData.headingCallbacks = [NSMutableArray arrayWithCapacity:1]; - } - // add the callbackId into the array so we can call back when get data - [hData.headingCallbacks addObject:callbackId]; - - if ((hData.headingStatus != HEADINGRUNNING) && (hData.headingStatus != HEADINGERROR)) { - // Tell the location manager to start notifying us of heading updates - [self startHeadingWithFilter:0.2]; - } else { - [self returnHeadingInfo:callbackId keepCallback:NO]; - } - } -} - -// called to request heading updates when heading changes by a certain amount (filter) -- (void)watchHeadingFilter:(CDVInvokedUrlCommand*)command -{ - NSString* callbackId = command.callbackId; - NSDictionary* options = [command.arguments objectAtIndex:0 withDefault:nil]; - NSNumber* filter = [options valueForKey:@"filter"]; - CDVHeadingData* hData = self.headingData; - - if ([self hasHeadingSupport] == NO) { - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:20]; - [self.commandDelegate sendPluginResult:result callbackId:callbackId]; - } else { - if (!hData) { - self.headingData = [[CDVHeadingData alloc] init]; - hData = self.headingData; - } - if (hData.headingStatus != HEADINGRUNNING) { - // Tell the location manager to start notifying us of heading updates - [self startHeadingWithFilter:[filter doubleValue]]; - } else { - // if already running check to see if due to existing watch filter - if (hData.headingFilter && ![hData.headingFilter isEqualToString:callbackId]) { - // new watch filter being specified - // send heading data one last time to clear old successCallback - [self returnHeadingInfo:hData.headingFilter keepCallback:NO]; - } - } - // save the new filter callback and update the headingFilter setting - hData.headingFilter = callbackId; - // check if need to stop and restart in order to change value??? - self.locationManager.headingFilter = [filter doubleValue]; - } -} - -- (void)returnHeadingInfo:(NSString*)callbackId keepCallback:(BOOL)bRetain -{ - CDVPluginResult* result = nil; - CDVHeadingData* hData = self.headingData; - - self.headingData.headingTimestamp = [NSDate date]; - - if (hData && (hData.headingStatus == HEADINGERROR)) { - // return error - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:0]; - } else if (hData && (hData.headingStatus == HEADINGRUNNING) && hData.headingInfo) { - // if there is heading info, return it - CLHeading* hInfo = hData.headingInfo; - NSMutableDictionary* returnInfo = [NSMutableDictionary dictionaryWithCapacity:4]; - NSNumber* timestamp = [NSNumber numberWithDouble:([hInfo.timestamp timeIntervalSince1970] * 1000)]; - [returnInfo setObject:timestamp forKey:@"timestamp"]; - [returnInfo setObject:[NSNumber numberWithDouble:hInfo.magneticHeading] forKey:@"magneticHeading"]; - id trueHeading = __locationStarted ? (id)[NSNumber numberWithDouble : hInfo.trueHeading] : (id)[NSNull null]; - [returnInfo setObject:trueHeading forKey:@"trueHeading"]; - [returnInfo setObject:[NSNumber numberWithDouble:hInfo.headingAccuracy] forKey:@"headingAccuracy"]; - - result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:returnInfo]; - [result setKeepCallbackAsBool:bRetain]; - } - if (result) { - [self.commandDelegate sendPluginResult:result callbackId:callbackId]; - } -} - -- (void)stopHeading:(CDVInvokedUrlCommand*)command -{ - // CDVHeadingData* hData = self.headingData; - if (self.headingData && (self.headingData.headingStatus != HEADINGSTOPPED)) { - if (self.headingData.headingFilter) { - // callback one last time to clear callback - [self returnHeadingInfo:self.headingData.headingFilter keepCallback:NO]; - self.headingData.headingFilter = nil; - } - [self.locationManager stopUpdatingHeading]; - NSLog(@"heading STOPPED"); - self.headingData = nil; - } -} - -// helper method to check the orientation and start updating headings -- (void)startHeadingWithFilter:(CLLocationDegrees)filter -{ - // FYI UIDeviceOrientation and CLDeviceOrientation enums are currently the same - self.locationManager.headingOrientation = (CLDeviceOrientation)self.viewController.interfaceOrientation; - self.locationManager.headingFilter = filter; - [self.locationManager startUpdatingHeading]; - self.headingData.headingStatus = HEADINGSTARTING; -} - -- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager*)manager -{ - return YES; -} - -- (void)locationManager:(CLLocationManager*)manager - didUpdateHeading:(CLHeading*)heading -{ - CDVHeadingData* hData = self.headingData; - - // normally we would clear the delegate to stop getting these notifications, but - // we are sharing a CLLocationManager to get location data as well, so we do a nil check here - // ideally heading and location should use their own CLLocationManager instances - if (hData == nil) { - return; - } - - // save the data for next call into getHeadingData - hData.headingInfo = heading; - BOOL bTimeout = NO; - if (!hData.headingFilter && hData.headingTimestamp) { - bTimeout = fabs([hData.headingTimestamp timeIntervalSinceNow]) > hData.timeout; - } - - if (hData.headingStatus == HEADINGSTARTING) { - hData.headingStatus = HEADINGRUNNING; // so returnHeading info will work - - // this is the first update - for (NSString* callbackId in hData.headingCallbacks) { - [self returnHeadingInfo:callbackId keepCallback:NO]; - } - - [hData.headingCallbacks removeAllObjects]; - } - if (hData.headingFilter) { - [self returnHeadingInfo:hData.headingFilter keepCallback:YES]; - } else if (bTimeout) { - [self stopHeading:nil]; - } - hData.headingStatus = HEADINGRUNNING; // to clear any error -} - -- (void)locationManager:(CLLocationManager*)manager didFailWithError:(NSError*)error -{ - NSLog(@"locationManager::didFailWithError %@", [error localizedFailureReason]); - - // Compass Error - if ([error code] == kCLErrorHeadingFailure) { - CDVHeadingData* hData = self.headingData; - if (hData) { - if (hData.headingStatus == HEADINGSTARTING) { - // heading error during startup - report error - for (NSString* callbackId in hData.headingCallbacks) { - CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:0]; - [self.commandDelegate sendPluginResult:result callbackId:callbackId]; - } - - [hData.headingCallbacks removeAllObjects]; - } // else for frequency watches next call to getCurrentHeading will report error - if (hData.headingFilter) { - CDVPluginResult* resultFilter = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsInt:0]; - [self.commandDelegate sendPluginResult:resultFilter callbackId:hData.headingFilter]; - } - hData.headingStatus = HEADINGERROR; - } - } - // Location Error - else { - CDVLocationData* lData = self.locationData; - if (lData && __locationStarted) { - // TODO: probably have to once over the various error codes and return one of: - // PositionError.PERMISSION_DENIED = 1; - // PositionError.POSITION_UNAVAILABLE = 2; - // PositionError.TIMEOUT = 3; - NSUInteger positionError = POSITIONUNAVAILABLE; - if (error.code == kCLErrorDenied) { - positionError = PERMISSIONDENIED; - } - [self returnLocationError:positionError withMessage:[error localizedDescription]]; - } - } - - [self.locationManager stopUpdatingLocation]; - __locationStarted = NO; -} - -- (void)dealloc -{ - self.locationManager.delegate = nil; -} - -- (void)onReset -{ - [self _stopLocation]; - [self.locationManager stopUpdatingHeading]; - self.headingData = nil; -} - -@end - -#pragma mark - -#pragma mark CLLocation(JSONMethods) - -@implementation CLLocation (JSONMethods) - -- (NSString*)JSONRepresentation -{ - return [NSString stringWithFormat: - @"{ timestamp: %.00f, \ - coords: { latitude: %f, longitude: %f, altitude: %.02f, heading: %.02f, speed: %.02f, accuracy: %.02f, altitudeAccuracy: %.02f } \ - }", - [self.timestamp timeIntervalSince1970] * 1000.0, - self.coordinate.latitude, - self.coordinate.longitude, - self.altitude, - self.course, - self.speed, - self.horizontalAccuracy, - self.verticalAccuracy - ]; -} - -@end - -#pragma mark NSError(JSONMethods) - -@implementation NSError (JSONMethods) - -- (NSString*)JSONRepresentation -{ - return [NSString stringWithFormat: - @"{ code: %d, message: '%@'}", - self.code, - [self localizedDescription] - ]; -} - -@end http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/e292c05c/CordovaLib/Classes/CDVViewController.m ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVViewController.m b/CordovaLib/Classes/CDVViewController.m index 94f4552..5bd347f 100644 --- a/CordovaLib/Classes/CDVViewController.m +++ b/CordovaLib/Classes/CDVViewController.m @@ -276,15 +276,6 @@ self.webView.scalesPageToFit = [enableViewportScale boolValue]; - /* - * Fire up the GPS Service right away as it takes a moment for data to come back. - */ - - if ([enableLocation boolValue]) { - NSLog(@"Deprecated: The 'EnableLocation' boolean property is deprecated in 2.5.0, and will be removed in 3.0.0. Use the 'onload' boolean attribute (of the CDVLocation plugin."); - [[self.commandDelegate getCommandInstance:@"Geolocation"] getLocation:[CDVInvokedUrlCommand new]]; - } - if (hideKeyboardFormAccessoryBar) { __weak CDVViewController* weakSelf = self; [[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillShowNotification http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/e292c05c/CordovaLib/CordovaLib.xcodeproj/project.pbxproj ---------------------------------------------------------------------- diff --git a/CordovaLib/CordovaLib.xcodeproj/project.pbxproj b/CordovaLib/CordovaLib.xcodeproj/project.pbxproj index b46ecdb..88e43c4 100644 --- a/CordovaLib/CordovaLib.xcodeproj/project.pbxproj +++ b/CordovaLib/CordovaLib.xcodeproj/project.pbxproj @@ -61,8 +61,6 @@ 8887FD711090FBE7009987E8 /* CDVFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 8887FD311090FBE7009987E8 /* CDVFile.m */; }; 8887FD741090FBE7009987E8 /* CDVInvokedUrlCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 8887FD341090FBE7009987E8 /* CDVInvokedUrlCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8887FD751090FBE7009987E8 /* CDVInvokedUrlCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 8887FD351090FBE7009987E8 /* CDVInvokedUrlCommand.m */; }; - 8887FD851090FBE7009987E8 /* CDVLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8887FD461090FBE7009987E8 /* CDVLocation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8887FD861090FBE7009987E8 /* CDVLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8887FD471090FBE7009987E8 /* CDVLocation.m */; }; 8887FD8D1090FBE7009987E8 /* CDVNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 8887FD4E1090FBE7009987E8 /* CDVNotification.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8887FD8E1090FBE7009987E8 /* CDVNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 8887FD4F1090FBE7009987E8 /* CDVNotification.m */; }; 8887FD8F1090FBE7009987E8 /* NSData+Base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 8887FD501090FBE7009987E8 /* NSData+Base64.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -160,8 +158,6 @@ 8887FD311090FBE7009987E8 /* CDVFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVFile.m; path = Classes/CDVFile.m; sourceTree = "<group>"; }; 8887FD341090FBE7009987E8 /* CDVInvokedUrlCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVInvokedUrlCommand.h; path = Classes/CDVInvokedUrlCommand.h; sourceTree = "<group>"; }; 8887FD351090FBE7009987E8 /* CDVInvokedUrlCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVInvokedUrlCommand.m; path = Classes/CDVInvokedUrlCommand.m; sourceTree = "<group>"; }; - 8887FD461090FBE7009987E8 /* CDVLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVLocation.h; path = Classes/CDVLocation.h; sourceTree = "<group>"; }; - 8887FD471090FBE7009987E8 /* CDVLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVLocation.m; path = Classes/CDVLocation.m; sourceTree = "<group>"; }; 8887FD4E1090FBE7009987E8 /* CDVNotification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVNotification.h; path = Classes/CDVNotification.h; sourceTree = "<group>"; }; 8887FD4F1090FBE7009987E8 /* CDVNotification.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVNotification.m; path = Classes/CDVNotification.m; sourceTree = "<group>"; }; 8887FD501090FBE7009987E8 /* NSData+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSData+Base64.h"; path = "Classes/NSData+Base64.h"; sourceTree = "<group>"; }; @@ -309,8 +305,6 @@ 8887FD351090FBE7009987E8 /* CDVInvokedUrlCommand.m */, C937A4541337599E002C4C79 /* CDVFileTransfer.h */, C937A4551337599E002C4C79 /* CDVFileTransfer.m */, - 8887FD461090FBE7009987E8 /* CDVLocation.h */, - 8887FD471090FBE7009987E8 /* CDVLocation.m */, 8887FD4E1090FBE7009987E8 /* CDVNotification.h */, 8887FD4F1090FBE7009987E8 /* CDVNotification.m */, 8887FD5E1090FBE7009987E8 /* CDVReachability.h */, @@ -376,7 +370,6 @@ 8887FD6A1090FBE7009987E8 /* CDVContacts.h in Headers */, 8887FD701090FBE7009987E8 /* CDVFile.h in Headers */, 8887FD741090FBE7009987E8 /* CDVInvokedUrlCommand.h in Headers */, - 8887FD851090FBE7009987E8 /* CDVLocation.h in Headers */, 8887FD8D1090FBE7009987E8 /* CDVNotification.h in Headers */, 8887FD8F1090FBE7009987E8 /* NSData+Base64.h in Headers */, 8887FD9D1090FBE7009987E8 /* CDVReachability.h in Headers */, @@ -475,7 +468,6 @@ 8887FD6B1090FBE7009987E8 /* CDVContacts.m in Sources */, 8887FD711090FBE7009987E8 /* CDVFile.m in Sources */, 8887FD751090FBE7009987E8 /* CDVInvokedUrlCommand.m in Sources */, - 8887FD861090FBE7009987E8 /* CDVLocation.m in Sources */, 8887FD8E1090FBE7009987E8 /* CDVNotification.m in Sources */, 8887FD901090FBE7009987E8 /* NSData+Base64.m in Sources */, 8887FD9E1090FBE7009987E8 /* CDVReachability.m in Sources */,
