mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-05-12 03:35:30 +08:00
Updates from Tue Mar 10
- [ReactNative] Make tests run on TravisCI | Alex Kotliarskyi - [Relay] Update Relay + ES6 class containers | Christoph Pojer - [React Native] Add RCTAdSupport.xcodeproj | Alexsander Akers - [ReactNative][Android] Fix after a new React version was downstreamed | Philipp von Weitershausen - [React Native] Add preliminary animation API | Alex Akers - [ReactKit] Create test for OSS ReactKit | Alex Kotliarskyi - [React Native][Device ID][wip] implement most basic js access | Alex Akers - [ReactNative] OSS Picker | Spencer Ahrens - [ReactNative] Fix typo in RCTUIManager | Tadeu Zagallo - [ReactNative] Fix GeoLocation files letter case | Tadeu Zagallo - Unified the method signature for addUIBlock: to further simplify porting ViewManagers | Nick Lockwood - [ReactNative] Oss GeoMap | Tadeu Zagallo - [ReactNative] OSS CameraRoll | Tadeu Zagallo - [ReactNative] allowLossyConversion on NSString->NSData conversion | Andrew Rasmussen - [React Native][RFC] Print __DEV__ value on app start | Alex Kotliarskyi
This commit is contained in:
98
Libraries/Geolocation/Geolocation.ios.js
Normal file
98
Libraries/Geolocation/Geolocation.ios.js
Normal file
@@ -0,0 +1,98 @@
|
||||
/**
|
||||
* Copyright 2004-present Facebook. All Rights Reserved.
|
||||
*
|
||||
* @providesModule Geolocation
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
|
||||
var RCTLocationObserver = require('NativeModulesDeprecated').RKLocationObserver;
|
||||
|
||||
var invariant = require('invariant');
|
||||
var logError = require('logError');
|
||||
var warning = require('warning');
|
||||
|
||||
var subscriptions = [];
|
||||
|
||||
var updatesEnabled = false;
|
||||
|
||||
/**
|
||||
* /!\ ATTENTION /!\
|
||||
* You need to add NSLocationWhenInUseUsageDescription key
|
||||
* in Info.plist to enable geolocation, otherwise it's going
|
||||
* to *fail silently*!
|
||||
* \!/ \!/
|
||||
*
|
||||
* Geolocation follows the MDN specification:
|
||||
* https://developer.mozilla.org/en-US/docs/Web/API/Geolocation
|
||||
*/
|
||||
var Geolocation = {
|
||||
|
||||
getCurrentPosition: function(geo_success, geo_error, geo_options) {
|
||||
invariant(
|
||||
typeof geo_success === 'function',
|
||||
'Must provide a valid geo_success callback.'
|
||||
);
|
||||
RCTLocationObserver.getCurrentPosition(
|
||||
geo_success,
|
||||
geo_error || logError,
|
||||
geo_options || {}
|
||||
);
|
||||
},
|
||||
|
||||
watchPosition: function(success, error, options) {
|
||||
if (!updatesEnabled) {
|
||||
RCTLocationObserver.startObserving(options || {});
|
||||
updatesEnabled = true;
|
||||
}
|
||||
var watchID = subscriptions.length;
|
||||
subscriptions.push([
|
||||
RCTDeviceEventEmitter.addListener(
|
||||
'geolocationDidChange',
|
||||
success
|
||||
),
|
||||
error ? RCTDeviceEventEmitter.addListener(
|
||||
'geolocationError',
|
||||
error
|
||||
) : null,
|
||||
]);
|
||||
return watchID;
|
||||
},
|
||||
|
||||
clearWatch: function(watchID) {
|
||||
var sub = subscriptions[watchID];
|
||||
if (!sub) {
|
||||
// Silently exit when the watchID is invalid or already cleared
|
||||
// This is consistent with timers
|
||||
return;
|
||||
}
|
||||
sub[0].remove();
|
||||
sub[1] && sub[1].remove();
|
||||
subscriptions[watchID] = undefined;
|
||||
var noWatchers = true;
|
||||
for (var ii = 0; ii < subscriptions.length; ii++) {
|
||||
if (subscriptions[ii]) {
|
||||
noWatchers = false; // still valid subscriptions
|
||||
}
|
||||
}
|
||||
if (noWatchers) {
|
||||
Geolocation.stopObserving();
|
||||
}
|
||||
},
|
||||
|
||||
stopObserving: function() {
|
||||
if (updatesEnabled) {
|
||||
RCTLocationObserver.stopObserving();
|
||||
updatesEnabled = false;
|
||||
for (var ii = 0; ii < subscriptions.length; ii++) {
|
||||
if (subscriptions[ii]) {
|
||||
warning('Called stopObserving with existing subscriptions.');
|
||||
subscriptions[ii].remove();
|
||||
}
|
||||
}
|
||||
subscriptions = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Geolocation;
|
||||
Reference in New Issue
Block a user