Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
8da8d8dce8
commit
c18182dd05
126
js/ui/cordova/plugins/cordova-plugin-android-sensor-listeners/www/registry.js
vendored
Normal file
126
js/ui/cordova/plugins/cordova-plugin-android-sensor-listeners/www/registry.js
vendored
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
// Create a sensor listener registry.
|
||||||
|
module.exports = function createRegistry() {
|
||||||
|
// Register the sensor listeners. The keys are the sensor type names, values
|
||||||
|
// an array of listeners.
|
||||||
|
var listeners = {};
|
||||||
|
|
||||||
|
function getHash(sensor, sampling) {
|
||||||
|
// This is a safe. Indeed both sensor or sampling are directly mapped to Java property
|
||||||
|
// names and ':' is a forbidden character for JAVA property names.
|
||||||
|
return sensor + ':' + sampling;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a listener in the registry.
|
||||||
|
*
|
||||||
|
* @param {string} sensorType the sensor type
|
||||||
|
* @param {string} samplingRate the sampling rate
|
||||||
|
* @param {function} listener the listener to add
|
||||||
|
* @return {boolean} true if there was not registered listener of this type before
|
||||||
|
* the listener is added.
|
||||||
|
*/
|
||||||
|
function addListener(sensorType, samplingRate, listener) {
|
||||||
|
// Look for the corresponding listener list and create it if it does not
|
||||||
|
// exists.
|
||||||
|
var hash = getHash(sensorType, samplingRate);
|
||||||
|
var sensorListeners = listeners[hash];
|
||||||
|
if (!sensorListeners) {
|
||||||
|
listeners[hash] = sensorListeners = [listener];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
sensorListeners.push(listener);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a listener from the listeners registry.
|
||||||
|
*
|
||||||
|
* @param {string} sensorType the sensor type name the listener is listening
|
||||||
|
* to
|
||||||
|
* @param {string} samplingRate the sampling rate this listener is listening
|
||||||
|
* at
|
||||||
|
* @param {function} listener the listener
|
||||||
|
* @return {boolean} true if the listener was the last of its type
|
||||||
|
*/
|
||||||
|
function removeListener(sensorType, samplingRate, listener) {
|
||||||
|
var hash = getHash(sensorType, samplingRate);
|
||||||
|
// Get the corresponding listener list.
|
||||||
|
var sensorListeners = listeners[hash];
|
||||||
|
// If it is undefined, we are done and return false to notify that
|
||||||
|
// the listener was not the last of his type (since it was not found).
|
||||||
|
if (!sensorListeners) return false;
|
||||||
|
// Look for the listener in the list and remove it if found.
|
||||||
|
var i = sensorListeners.indexOf(listener);
|
||||||
|
// Return false if it was not found.
|
||||||
|
if (i < 0) return false;
|
||||||
|
if (sensorListeners.length <= 1) {
|
||||||
|
// If it was the only listener, we remove the corresponding list and
|
||||||
|
// return true that it was the last of its type.
|
||||||
|
listeners[hash] = undefined;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
sensorListeners.splice(i, 1);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a listener has been registered.
|
||||||
|
*
|
||||||
|
* @param {string} sensorType the sensor type name the listener is listening
|
||||||
|
* to
|
||||||
|
* @param {string} samplingRate the sampling rate this listener is listening
|
||||||
|
* at
|
||||||
|
* @param {function} listener the listener
|
||||||
|
* @return {boolean} true if the registry contains the listener, false
|
||||||
|
* otherwise.
|
||||||
|
*/
|
||||||
|
function containsListener(sensorType, samplingRate, listener) {
|
||||||
|
var hash = getHash(sensorType, samplingRate);
|
||||||
|
var sensorListeners = listeners[hash];
|
||||||
|
return !!sensorListeners && sensorListeners.indexOf(listener) >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} sensorType the sensor type name the listener is listening
|
||||||
|
* to
|
||||||
|
* @param {string} samplingRate the sampling rate this listener is listening
|
||||||
|
* at
|
||||||
|
* @param {*} context the context of the caller
|
||||||
|
* @return {func} a function that calls every corresponding listeners
|
||||||
|
* (with the arguments it is called with and using the provided context).
|
||||||
|
* The function returns false if no listeners has been called, true otherwise.
|
||||||
|
*/
|
||||||
|
function getListenersCaller(sensorType, samplingRate, context) {
|
||||||
|
var hash = getHash(sensorType, samplingRate);
|
||||||
|
return function listenersCaller() {
|
||||||
|
var sensorListeners = listeners[hash];
|
||||||
|
if (!sensorListeners || sensorListeners.length === 0) return false;
|
||||||
|
for (var i = 0; i < sensorListeners.length; i++) {
|
||||||
|
sensorListeners[i].apply(context, arguments);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {boolean} true if the registry is empty
|
||||||
|
*/
|
||||||
|
function isEmpty() {
|
||||||
|
var registeredSensorTypes = Object.getOwnPropertyNames(listeners);
|
||||||
|
for (var i = 0; i < registeredSensorTypes.length; i++) {
|
||||||
|
var sensorListeners = listeners[registeredSensorTypes[i]];
|
||||||
|
if (sensorListeners && sensorListeners.length > 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
addListener: addListener,
|
||||||
|
removeListener: removeListener,
|
||||||
|
containsListener: containsListener,
|
||||||
|
getListenersCaller: getListenersCaller,
|
||||||
|
isEmpty: isEmpty
|
||||||
|
};
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user