VulpesOS/assets/webapps/findmydevice.gaiamobile.org/shared/js/settings_helper.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

125 lines
3.2 KiB
JavaScript

(function(exports) {
'use strict';
/**
* SettingsHelper simplifies mozSettings access. It provides getter and setter
* a specified setting. It iscreated by passing a setting key and an
* optional default value.
*
* @param {String} key - The setting key
* @param {Object} defaultValue - The default value
*
* Example:
* // create a helper with a default false
* var voicePrivacyHelper = SettingsHelper('ril.voicePrivacy.enabled', false);
* // get value
* voicePrivacyHelper.get(function(value) {});
* // set value
* voicePrivacyHelper.set(false, function() {});
*/
var SettingsHelper = function(key, defaultValue) {
var SETTINGS_KEY = key;
var _settings = navigator.mozSettings;
var _value = null;
var _defaultValue = defaultValue;
var _isReady = false;
var _callbacks = [];
var _return = function sh_return(callback) {
if (!callback) {
return;
}
callback.apply(null, Array.prototype.slice.call(arguments, 1));
};
var _ready = function sh_ready(callback) {
if (!callback) {
return;
}
if (_isReady) {
callback();
} else {
_callbacks.push(callback);
}
};
var _getValue = function sh_getValue(callback) {
var req = _settings.createLock().get(SETTINGS_KEY);
req.onsuccess = function() {
_return(callback, req.result[SETTINGS_KEY]);
};
req.onerror = function() {
console.error('Error getting ' + SETTINGS_KEY + '.');
_return(callback, null);
};
};
var _setValue = function sh_setValue(value, callback) {
var obj = {};
obj[SETTINGS_KEY] = value;
var req = _settings.createLock().set(obj);
req.onsuccess = function() {
_return(callback);
};
req.onerror = function() {
console.error('Error setting ' + SETTINGS_KEY + '.');
_return(callback);
};
};
var _valuechanged = function sh_valuehanged(e) {
_value = e.settingValue;
};
var _init = function sh_init(callback) {
_getValue(function(value) {
_value = value ? value : _defaultValue;
_return(callback);
});
_settings.addObserver(SETTINGS_KEY, _valuechanged);
};
_init(function() {
_isReady = true;
_callbacks.forEach(function(callback) {
callback();
});
});
return {
/**
* Get the setting value.
*
* @param {Function} callback - The setting value will be passed in the
callback function.
*/
get: function(callback) {
_ready(function() {
_return(callback, _value ? _value : _defaultValue);
});
},
/**
* Set the setting value.
*
* @param {Object} value The setting value
* @param {Function} callback The callback function.
*/
set: function(value, callback) {
_ready(function() {
_setValue(value, _return.bind(null, callback));
});
},
/**
* Cleanup ressources, specifically observers.
*/
uninit: function() {
_settings.removeObserver(SETTINGS_KEY, _valuechanged);
}
};
};
exports.SettingsHelper = SettingsHelper;
})(this);