'dependencies': [
'cordova/cordova.gyp:*',
'device/cordova_device.gyp:*',
+ 'devicemotion/cordova_devicemotion.gyp:*',
'dialog/cordova_dialog.gyp:*',
'file/cordova_file.gyp:*',
'globalization/cordova_globalization.gyp:*',
--- /dev/null
+{
+ 'includes':[
+ '/usr/include/webapi-plugins/src/common/common.gypi',
+ ],
+ 'targets': [
+ {
+ 'target_name': 'tizen_cordova_devicemotion',
+ 'type': 'loadable_module',
+ 'sources': [
+ 'cordova_devicemotion_api.js',
+ 'cordova_devicemotion_extension.cc',
+ 'cordova_devicemotion_extension.h',
+ ],
+ 'include_dirs': [
+ '../',
+ '<(SHARED_INTERMEDIATE_DIR)',
+ ],
+ 'variables': {
+ 'packages': [
+ 'webapi-plugins',
+ ],
+ },
+ },
+ ],
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+// TODO: remove when added to public cordova repository -> begin
+var plugin_name = 'cordova-plugin-device-motion.tizen.Accelerometer';
+
+cordova.define(plugin_name, function(require, exports, module) {
+// TODO: remove -> end
+
+var successCB = null;
+
+function listener(eventData) {
+ var accel = {};
+
+ accel.x = eventData.acceleration.x;
+ accel.y = eventData.acceleration.y;
+ accel.z = eventData.acceleration.z;
+ accel.timestamp = new Date().getTime();
+
+ if (accel.x === null || accel.y === null || accel.z === null) {
+ // Ignore first event with nulls
+ return;
+ }
+
+ successCB && successCB(accel);
+}
+
+var Accelerometer = {
+ start: function (success, error) {
+ if (!successCB) {
+ successCB = success;
+ window.addEventListener('devicemotion', listener, false);
+ }
+ }, stop: function () {
+ window.removeEventListener('devicemotion', listener, false);
+ successCB = null;
+ }
+};
+
+module.exports = Accelerometer;
+require('cordova/exec/proxy').add('Accelerometer', Accelerometer);
+
+console.log('Loaded cordova.device-motion API');
+
+// TODO: remove when added to public cordova repository -> begin
+});
+
+exports = function(require) {
+ require('cordova-tizen').addPlugin('cordova-plugin-device-motion.Accelerometer', plugin_name, 'runs');
+};
+// TODO: remove -> end
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+#include "devicemotion/cordova_devicemotion_extension.h"
+
+// This will be generated from cordova_devicemotion_api.js
+extern const char kSource_cordova_devicemotion_api[];
+
+common::Extension* CreateExtension() {
+ return new extension::cordova::devicemotion::CordovaDevicemotionExtension();
+}
+
+namespace extension {
+namespace cordova {
+namespace devicemotion {
+
+CordovaDevicemotionExtension::CordovaDevicemotionExtension() {
+ SetExtensionName("tizen.cordova.devicemotion");
+ SetJavaScriptAPI(kSource_cordova_devicemotion_api);
+}
+
+CordovaDevicemotionExtension::~CordovaDevicemotionExtension() {}
+
+} // devicemotion
+} // cordova
+} // extension
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * 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.
+ */
+
+#ifndef DEVICEMOTION_CORDOVA_DEVICEMOTION_EXTENSION_H_
+#define DEVICEMOTION_CORDOVA_DEVICEMOTION_EXTENSION_H_
+
+#include <common/extension.h>
+
+namespace extension {
+namespace cordova {
+namespace devicemotion {
+
+class CordovaDevicemotionExtension : public common::Extension {
+ public:
+ CordovaDevicemotionExtension();
+ virtual ~CordovaDevicemotionExtension();
+};
+
+} // devicemotion
+} // cordova
+} // extension
+
+#endif // DEVICEMOTION_CORDOVA_DEVICEMOTION_EXTENSION_H_
]
},
{
+ "file": "plugins/cordova-plugin-device-motion/www/accelerometer.js",
+ "id": "cordova-plugin-device-motion.Accelerometer",
+ "clobbers": [
+ "navigator.accelerometer"
+ ]
+ },
+ {
+ "file": "plugins/cordova-plugin-device-motion/www/Acceleration.js",
+ "id": "cordova-plugin-device-motion.Acceleration",
+ "clobbers": [
+ "navigator.Acceleration"
+ ]
+ },
+ {
"file": "plugins/cordova-plugin-dialogs/www/notification.js",
"id": "cordova-plugin-dialogs.notification",
"merges": [
{
"cordova-plugin-console": "1.0.1",
"cordova-plugin-device": "1.0.1",
+ "cordova-plugin-device-motion": "1.2.0",
"cordova-plugin-dialogs": "1.1.1",
"cordova-plugin-file": "3.0.0",
"cordova-plugin-file-transfer": "1.3.0",
- "cordova-plugin-network-information": "1.0.1",
"cordova-plugin-globalization": "1.0.1",
"cordova-plugin-media": "1.0.1",
+ "cordova-plugin-network-information": "1.0.1",
}
// BOTTOM OF METADATA
});
--- /dev/null
+/*
+ *
+ * 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.
+ *
+*/
+cordova.define("cordova-plugin-device-motion.Acceleration", function(require, exports, module) {
+
+var Acceleration = function(x, y, z, timestamp) {
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.timestamp = timestamp || (new Date()).getTime();
+};
+
+module.exports = Acceleration;
+
+});
--- /dev/null
+/*
+ *
+ * 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.
+ *
+*/
+cordova.define("cordova-plugin-device-motion.Accelerometer", function(require, exports, module) {
+
+/**
+ * This class provides access to device accelerometer data.
+ * @constructor
+ */
+var argscheck = require('cordova/argscheck'),
+ utils = require("cordova/utils"),
+ exec = require("cordova/exec"),
+ Acceleration = require('./Acceleration');
+
+// Is the accel sensor running?
+var running = false;
+
+// Keeps reference to watchAcceleration calls.
+var timers = {};
+
+// Array of listeners; used to keep track of when we should call start and stop.
+var listeners = [];
+
+// Last returned acceleration object from native
+var accel = null;
+
+// Timer used when faking up devicemotion events
+var eventTimerId = null;
+
+// Tells native to start.
+function start() {
+ exec(function (a) {
+ var tempListeners = listeners.slice(0);
+ accel = new Acceleration(a.x, a.y, a.z, a.timestamp);
+ for (var i = 0, l = tempListeners.length; i < l; i++) {
+ tempListeners[i].win(accel);
+ }
+ }, function (e) {
+ var tempListeners = listeners.slice(0);
+ for (var i = 0, l = tempListeners.length; i < l; i++) {
+ tempListeners[i].fail(e);
+ }
+ }, "Accelerometer", "start", []);
+ running = true;
+}
+
+// Tells native to stop.
+function stop() {
+ exec(null, null, "Accelerometer", "stop", []);
+ accel = null;
+ running = false;
+}
+
+// Adds a callback pair to the listeners array
+function createCallbackPair(win, fail) {
+ return { win: win, fail: fail };
+}
+
+// Removes a win/fail listener pair from the listeners array
+function removeListeners(l) {
+ var idx = listeners.indexOf(l);
+ if (idx > -1) {
+ listeners.splice(idx, 1);
+ if (listeners.length === 0) {
+ stop();
+ }
+ }
+}
+
+var accelerometer = {
+ /**
+ * 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)
+ */
+ getCurrentAcceleration: function (successCallback, errorCallback, options) {
+ argscheck.checkArgs('fFO', 'accelerometer.getCurrentAcceleration', arguments);
+
+ if (cordova.platformId === "windowsphone") {
+ exec(function (a) {
+ accel = new Acceleration(a.x, a.y, a.z, a.timestamp);
+ successCallback(accel);
+ }, function (e) {
+ errorCallback(e);
+ }, "Accelerometer", "getCurrentAcceleration", []);
+
+ return;
+ }
+
+ var p;
+ var win = function (a) {
+ removeListeners(p);
+ successCallback(a);
+ };
+ var fail = function (e) {
+ removeListeners(p);
+ errorCallback && errorCallback(e);
+ };
+
+ p = createCallbackPair(win, fail);
+ listeners.push(p);
+
+ if (!running) {
+ start();
+ }
+ },
+
+ /**
+ * Asynchronously acquires the acceleration repeatedly 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.
+ */
+ watchAcceleration: function (successCallback, errorCallback, options) {
+ argscheck.checkArgs('fFO', 'accelerometer.watchAcceleration', arguments);
+ // Default interval (10 sec)
+ var frequency = (options && options.frequency && typeof options.frequency == 'number') ? options.frequency : 10000;
+
+ // Keep reference to watch id, and report accel readings as often as defined in frequency
+ var id = utils.createUUID();
+
+ var p = createCallbackPair(function () { }, function (e) {
+ removeListeners(p);
+ errorCallback && errorCallback(e);
+ });
+ listeners.push(p);
+
+ timers[id] = {
+ timer: window.setInterval(function () {
+ if (accel) {
+ successCallback(accel);
+ }
+ }, frequency),
+ listeners: p
+ };
+
+ if (running) {
+ // If we're already running then immediately invoke the success callback
+ // but only if we have retrieved a value, sample code does not check for null ...
+ if (accel) {
+ successCallback(accel);
+ }
+ } else {
+ start();
+ }
+
+ if (cordova.platformId === "browser" && !eventTimerId) {
+ // Start firing devicemotion events if we haven't already
+ var devicemotionEvent = new Event('devicemotion');
+ eventTimerId = window.setInterval(function() {
+ window.dispatchEvent(devicemotionEvent);
+ }, 200);
+ }
+
+ return id;
+ },
+
+ /**
+ * Clears the specified accelerometer watch.
+ *
+ * @param {String} id The id of the watch returned from #watchAcceleration.
+ */
+ clearWatch: function (id) {
+ // Stop javascript timer & remove from timer list
+ if (id && timers[id]) {
+ window.clearInterval(timers[id].timer);
+ removeListeners(timers[id].listeners);
+ delete timers[id];
+
+ if (eventTimerId && Object.keys(timers).length === 0) {
+ // No more watchers, so stop firing 'devicemotion' events
+ window.clearInterval(eventTimerId);
+ eventTimerId = null;
+ }
+ }
+ }
+};
+module.exports = accelerometer;
+
+});
-/*
+/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
done();
};
- navigator.accelerometer.getCurrentAcceleration(win, fail.bind(null, done));
+ var onError = function(err){
+ console.log(err);
+ console.log("Skipping gyroscope tests, marking all as pending.");
+ isAccelExist = false;
+ expect(true).toBe(true);
+ done();
+ }
+
+ navigator.accelerometer.getCurrentAcceleration(win, onError);
});
it("accelerometer.spec.4 success callback Acceleration object should have (reasonable) values for x, y and z expressed in m/s^2", function(done) {