You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by pu...@apache.org on 2014/08/07 22:22:50 UTC

[07/14] git commit: CB-5114 Append Windows 8.1 into plugin.xml + Optimize Windows 8 Geolocation proxy

CB-5114 Append Windows 8.1 into plugin.xml + Optimize Windows 8 Geolocation proxy


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/commit/e9eaa78a
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/tree/e9eaa78a
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/diff/e9eaa78a

Branch: refs/heads/master
Commit: e9eaa78a9016783a1f8576c88e3cbda943bf5e3b
Parents: 7295540
Author: SomaticIT <co...@somatic.fr>
Authored: Thu Oct 17 12:45:40 2013 +0200
Committer: sgrebnov <v-...@microsoft.com>
Committed: Fri Jul 11 16:05:31 2014 +0400

----------------------------------------------------------------------
 plugin.xml                        |  10 +++
 src/windows8/GeolocationProxy.js  |  34 +++----
 src/windows81/GeolocationProxy.js | 157 +++++++++++++++++++++++++++++++++
 3 files changed, 181 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/e9eaa78a/plugin.xml
----------------------------------------------------------------------
diff --git a/plugin.xml b/plugin.xml
index feee53a..5996fbe 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -199,6 +199,16 @@ xmlns:android="http://schemas.android.com/apk/res/android"
         </js-module>
     </platform>
 
+    <!-- windows81 -->
+    <platform name="windows81">
+      <config-file target="package.appxmanifest" parent="/Package/Capabilities">
+        <DeviceCapability Name="location" />
+      </config-file>
+      <js-module src="src/windows81/GeolocationProxy.js" name="GeolocationProxy">
+        <merges target="" />
+      </js-module>
+    </platform>
+
     <!-- firefoxos -->
     <platform name="firefoxos">
       <config-file target="config.xml" parent="/*">

http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/e9eaa78a/src/windows8/GeolocationProxy.js
----------------------------------------------------------------------
diff --git a/src/windows8/GeolocationProxy.js b/src/windows8/GeolocationProxy.js
index c341431..6fca696 100644
--- a/src/windows8/GeolocationProxy.js
+++ b/src/windows8/GeolocationProxy.js
@@ -48,6 +48,18 @@ function createErrorCode() {
             break;
     }
 }
+function createResult(pos) {
+    return {
+        latitude: pos.coordinate.latitude,
+        longitude: pos.coordinate.longitude,
+        altitude: pos.coordinate.altitude,
+        accuracy: pos.coordinate.accuracy,
+        heading: pos.coordinate.heading,
+        velocity: pos.coordinate.speed,
+        altitudeAccuracy: pos.coordinate.altitudeAccuracy,
+        timestamp: pos.coordinate.timestamp
+    };
+}
 
 module.exports = {
     getLocation: function (success, fail, args, env) {
@@ -65,16 +77,7 @@ module.exports = {
 
             loc.getGeopositionAsync().then(
                 function (pos) {
-                    success({
-                        latitude: pos.coordinate.latitude,
-                        longitude: pos.coordinate.longitude,
-                        altitude: pos.coordinate.altitude,
-                        accuracy: pos.coordinate.accuracy,
-                        heading: pos.coordinate.heading,
-                        velocity: pos.coordinate.speed,
-                        altitudeAccuracy: pos.coordinate.altitudeAccuracy,
-                        timestamp: pos.coordinate.timestamp
-                    });
+                    success(getResult(pos));
                 },
                 function (err) {
                     fail({
@@ -99,16 +102,7 @@ module.exports = {
             highAccuracy = args[1],
 
             onPositionChanged = function (e) {
-                success({
-                    latitude: e.position.coordinate.latitude,
-                    longitude: e.position.coordinate.longitude,
-                    altitude: e.position.coordinate.altitude,
-                    accuracy: e.position.coordinate.accuracy,
-                    heading: e.position.coordinate.heading,
-                    velocity: e.position.coordinate.speed,
-                    altitudeAccuracy: e.position.coordinate.altitudeAccuracy,
-                    timestamp: e.position.coordinate.timestamp
-                });
+                success(getResult(e.position));
             },
 
             onStatusChanged = function (e) {

http://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation/blob/e9eaa78a/src/windows81/GeolocationProxy.js
----------------------------------------------------------------------
diff --git a/src/windows81/GeolocationProxy.js b/src/windows81/GeolocationProxy.js
new file mode 100644
index 0000000..c954a4b
--- /dev/null
+++ b/src/windows81/GeolocationProxy.js
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2013 Research In Motion Limited.
+ *
+ * Licensed 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.
+ */
+
+var PositionError = require('./PositionError'),
+    ids = {},
+    loc;
+
+function ensureLocator() {
+    if (loc == null)
+        loc = new Windows.Devices.Geolocation.Geolocator();
+
+    return loc;
+}
+
+function createErrorCode() {
+    switch (loc.locationStatus) {
+        case Windows.Devices.Geolocation.PositionStatus.initializing:
+            // This status indicates that a location device is still initializing
+        case Windows.Devices.Geolocation.PositionStatus.noData:
+            // No location data is currently available 
+        case Windows.Devices.Geolocation.PositionStatus.notInitialized:
+            // This status indicates that the app has not yet requested
+            // location data by calling GetGeolocationAsync() or 
+            // registering an event handler for the positionChanged event. 
+        case Windows.Devices.Geolocation.PositionStatus.notAvailable:
+            // Location is not available on this version of Windows
+            return PositionError.POSITION_UNAVAILABLE;
+
+        case Windows.Devices.Geolocation.PositionStatus.disabled:
+            // The app doesn't have permission to access location,
+            // either because location has been turned off.
+            return PositionError.PERMISSION_DENIED;
+
+        default:
+            break;
+    }
+}
+function createResult(pos) {
+    return {
+        latitude: pos.coordinate.point.position.latitude,
+        longitude: pos.coordinate.point.position.longitude,
+        altitude: pos.coordinate.point.position.altitude,
+        accuracy: pos.coordinate.accuracy,
+        heading: pos.coordinate.heading,
+        velocity: pos.coordinate.speed,
+        altitudeAccuracy: pos.coordinate.altitudeAccuracy,
+        timestamp: pos.coordinate.timestamp
+    };
+}
+
+module.exports = {
+    getLocation: function (success, fail, args, env) {
+        ensureLocator();
+        if (loc != null)
+        {
+            var highAccuracy = args[0],
+                maxAge = args[1];
+
+            loc.desiredAccuracy = highAccuracy ?
+                Windows.Devices.Geolocation.PositionAccuracy.high :
+                Windows.Devices.Geolocation.PositionAccuracy.default;
+
+            loc.reportInterval = maxAge ? maxAge : 0;
+
+            loc.getGeopositionAsync().then(
+                function (pos) {
+                    success(createResult(pos));
+                },
+                function (err) {
+                    fail({
+                        code: createErrorCode(),
+                        message: err.message
+                    });
+                }
+            );
+        }
+        else
+        {
+            fail({
+                code: PositionError.POSITION_UNAVAILABLE,
+                message: "You do not have the required location services present on your system."
+            });
+        }
+    },
+
+    addWatch: function (success, fail, args, env) {
+        ensureLocator();
+        var clientId = args[0],
+            highAccuracy = args[1],
+
+            onPositionChanged = function (e) {
+                success(createResult(e.position));
+            },
+
+            onStatusChanged = function (e) {
+                switch (e.status) {
+                    case Windows.Devices.Geolocation.PositionStatus.noData:
+                    case Windows.Devices.Geolocation.PositionStatus.notAvailable:
+                        fail({
+                            code: PositionError.POSITION_UNAVAILABLE,
+                            message: "Data from location services is currently unavailable or you do not have the required location services present on your system."
+                        });
+                        break;
+
+                    case Windows.Devices.Geolocation.PositionStatus.disabled:
+                        fail({
+                            code: PositionError.PERMISSION_DENIED,
+                            message: "Your location is currently turned off."
+                        });
+                        break;
+
+                    case Windows.Devices.Geolocation.PositionStatus.initializing:
+                    case Windows.Devices.Geolocation.PositionStatus.ready:
+                    default:
+                        break;
+                }
+            };
+
+        loc.desiredAccuracy = highAccuracy ?
+                Windows.Devices.Geolocation.PositionAccuracy.high :
+                Windows.Devices.Geolocation.PositionAccuracy.default;
+
+        loc.addEventListener("positionchanged", onPositionChanged);
+        loc.addEventListener("statuschanged", onStatusChanged);
+
+        ids[clientId] = { pos: onPositionChanged, status: onStatusChanged };
+    },
+
+    clearWatch: function (success, fail, args, env) {
+        var clientId = args[0],
+            callbacks = ids[clientId];
+
+        if (callbacks) {
+            loc.removeEventListener("positionchanged", callbacks.pos);
+            loc.removeEventListener("statuschanged", callbacks.status);
+
+            delete ids[clientId];
+        }
+
+        success && success();
+    }
+};
+
+require("cordova/windows8/commandProxy").add("Geolocation", module.exports);
\ No newline at end of file