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