Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
108 lines
3.2 KiB
JavaScript
Executable file
108 lines
3.2 KiB
JavaScript
Executable file
/* global BaseModule, OperatorVariantHandler, SIMSlotManager */
|
|
'use strict';
|
|
|
|
/**
|
|
* Singleton object that helps to set some carrier-specific settings on boot.
|
|
* Detects the ICC cards on boot and creates objects in charge of setting
|
|
* some operator-specific settings relying on the ICC card.
|
|
*/
|
|
(function() {
|
|
var OperatorVariantManager = function(core) {
|
|
/** Array of OperatorVariantHandler objects. */
|
|
if (core) {
|
|
this.mobileConnections = core.mobileConnections;
|
|
}
|
|
this.operatorVariantHandlers = [];
|
|
};
|
|
OperatorVariantManager.IMPORTS = [
|
|
'js/operator_variant_handler.js',
|
|
'shared/js/operator_variant_helper.js'
|
|
];
|
|
OperatorVariantManager.EVENTS = [
|
|
'simslot-updated',
|
|
'simslot-iccinfochange'
|
|
];
|
|
BaseModule.create(OperatorVariantManager, {
|
|
name: 'OperatorVariantManager',
|
|
_start: function() {
|
|
Promise.all([
|
|
this.ensureValueUnderKeyIsArray('ril.iccInfo.mbdn'),
|
|
this.ensureValueUnderKeyIsArray('ril.cellbroadcast.disabled'),
|
|
this.ensureValueUnderKeyIsArray('ril.cellbroadcast.searchlist'),
|
|
this.readSetting('deviceinfo.os')
|
|
]).then(function(result) {
|
|
this.deviceInfoOs = result[3];
|
|
this.init();
|
|
}.bind(this));
|
|
},
|
|
|
|
_stop: function() {
|
|
this._operatorVariantHandlers = [];
|
|
},
|
|
|
|
'_handle_simslot-updated': function(evt) {
|
|
var simslot = evt.detail;
|
|
this._updateOperatorVariantHandler(simslot);
|
|
},
|
|
|
|
'_handle_simslot-iccinfochange': function(evt) {
|
|
var simslot = evt.detail;
|
|
this._updateOperatorVariantHandler(simslot);
|
|
},
|
|
|
|
_updateOperatorVariantHandler: function(simslot) {
|
|
if (!simslot.simCard ||
|
|
!simslot.simCard.iccInfo ||
|
|
!simslot.simCard.iccInfo.iccid) {
|
|
this.operatorVariantHandlers[simslot.index] = null;
|
|
return;
|
|
}
|
|
|
|
if (!this.operatorVariantHandlers[simslot.index]) {
|
|
this.operatorVariantHandlers[simslot.index] =
|
|
new OperatorVariantHandler(simslot.simCard.iccInfo.iccid,
|
|
simslot.index, this);
|
|
this.operatorVariantHandlers[simslot.index].start();
|
|
}
|
|
},
|
|
|
|
init: function() {
|
|
SIMSlotManager.getSlots().forEach(function(slot) {
|
|
this._updateOperatorVariantHandler(slot);
|
|
}, this);
|
|
},
|
|
|
|
/**
|
|
* Helper function. Ensure the value stored under the specified key is an
|
|
* array.
|
|
*/
|
|
ensureValueUnderKeyIsArray: function(key) {
|
|
return new Promise(function(resolve, reject) {
|
|
this.readSetting(key).then(function(value) {
|
|
var originalSetting = value;
|
|
var newSetting = null;
|
|
if (!originalSetting) {
|
|
newSetting = ['', ''];
|
|
} else if (!Array.isArray(originalSetting)) {
|
|
// Migrate settings field if needed
|
|
newSetting = [originalSetting, ''];
|
|
}
|
|
|
|
if (newSetting) {
|
|
var obj = {};
|
|
obj[key] = newSetting;
|
|
this.writeSetting(obj).then(function() {
|
|
resolve();
|
|
}, function() {
|
|
resolve();
|
|
});
|
|
} else {
|
|
resolve();
|
|
}
|
|
}.bind(this), function() {
|
|
resolve();
|
|
}.bind(this));
|
|
}.bind(this));
|
|
}
|
|
});
|
|
})();
|