Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
125 lines
3.2 KiB
JavaScript
Executable file
125 lines
3.2 KiB
JavaScript
Executable file
(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);
|