| /* |
| * |
| * 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. |
| * |
| */ |
| |
| function Acceleration(x, y, z, timestamp) { |
| this.x = x; |
| this.y = y; |
| this.z = z; |
| this.timestamp = timestamp || new Date().getTime(); |
| }; |
| |
| /** |
| * Class provides access to device accelerometer data. |
| * @constructor |
| */ |
| function Accelerometer() { |
| |
| /** |
| * The last known acceleration. type=Acceleration() |
| */ |
| this.lastAcceleration = null; |
| this.id = null; |
| }; |
| |
| /** |
| * Asynchronously acquires the current acceleration. |
| * |
| * @param {Function} successCallback The function to call when the acceleration data is available |
| * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL) |
| * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL) |
| */ |
| Accelerometer.prototype.getCurrentAcceleration = function(successCallback, errorCallback, options) { |
| |
| // successCallback required |
| if (typeof successCallback != "function") { |
| console.log("Accelerometer Error: successCallback is not a function"); |
| return; |
| } |
| |
| // errorCallback optional |
| if (errorCallback && (typeof errorCallback != "function")) { |
| console.log("Accelerometer Error: errorCallback is not a function"); |
| return; |
| } |
| |
| // Get acceleration |
| Cordova.exec(successCallback, errorCallback, "org.apache.cordova.Accelerometer", "getCurrentAcceleration", []); |
| }; |
| |
| /** |
| * Asynchronously acquires the device acceleration at a given interval. |
| * |
| * @param {Function} successCallback The function to call each time the acceleration data is available |
| * @param {Function} errorCallback The function to call when there is an error getting the acceleration data. (OPTIONAL) |
| * @param {AccelerationOptions} options The options for getting the accelerometer data such as timeout. (OPTIONAL) |
| * @return String The watch id that must be passed to #clearWatch to stop watching. |
| */ |
| Accelerometer.prototype.watchAcceleration = function(successCallback, errorCallback, options) { |
| |
| // Default interval (10 sec) |
| var frequency = (options != undefined) ? options.frequency : 10000; |
| |
| // successCallback required |
| if (typeof successCallback != "function") { |
| console.log("Accelerometer Error: successCallback is not a function"); |
| return; |
| } |
| |
| // errorCallback optional |
| if (errorCallback && (typeof errorCallback != "function")) { |
| console.log("Accelerometer Error: errorCallback is not a function"); |
| return; |
| } |
| // Start watch timer |
| this.id = Cordova.createUUID(); |
| Cordova.exec(successCallback, errorCallback, "org.apache.cordova.Accelerometer", "watchAcceleration", []); |
| return this.id; |
| }; |
| |
| /** |
| * Clears the specified accelerometer watch. |
| * |
| * @param {String} id The id of the watch returned from #watchAcceleration. |
| */ |
| Accelerometer.prototype.clearWatch = function(id) { |
| |
| // Stop javascript timer & remove from timer list |
| if (id == this.id) { |
| Cordova.exec(null, null, "org.apache.cordova.Accelerometer", "clearWatch", []); |
| } |
| }; |
| |
| /* |
| * Native callback when watchAcceleration has a new acceleration. |
| */ |
| Accelerometer.prototype.success = function(id, result) { |
| try { |
| var accel = new Acceleration(result.x, result.y, result.z, result.timestamp); |
| navigator.accelerometer.lastAcceleration = accel; |
| navigator.accelerometer.listeners[id].success(accel); |
| } |
| catch (e) { |
| debugPrint("Geolocation Error: "+e.message); |
| console.log("Geolocation Error: Error calling success callback function."); |
| } |
| |
| if (id == "global") { |
| delete navigator.accelerometer.listeners["global"]; |
| } |
| }; |
| |
| Cordova.addConstructor(function() { |
| if (typeof navigator.accelerometer == "undefined") navigator.accelerometer = new Accelerometer(); |
| }); |