Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
128 lines
4.7 KiB
JavaScript
Executable file
128 lines
4.7 KiB
JavaScript
Executable file
define(function(require) {
|
|
'use strict';
|
|
|
|
var SIMSlotManager = require('shared/simslot_manager');
|
|
var MobileOperator = require('shared/mobile_operator');
|
|
var Messaging = require('modules/messaging');
|
|
var SettingsPanel = require('modules/settings_panel');
|
|
var SettingsService = require('modules/settings_service');
|
|
|
|
var settings = window.navigator.mozSettings;
|
|
|
|
return function ctor_messaing_panel() {
|
|
var elements = {};
|
|
|
|
return SettingsPanel({
|
|
onInit: function(panel) {
|
|
elements.optionsContainer = panel.querySelector('.options-container');
|
|
elements.simcardsContainer = panel.querySelector('.simcards-container');
|
|
elements.sim1 = panel.querySelector('.sim1');
|
|
elements.sim2 = panel.querySelector('.sim2');
|
|
|
|
if (!SIMSlotManager.isMultiSIM()) {
|
|
return Promise.resolve()
|
|
.then(Messaging.injectCBSTemplate(elements.optionsContainer))
|
|
.then(Messaging.initCBS.bind(Messaging, panel, 0))
|
|
.then(Messaging.disableItems.bind(Messaging, panel))
|
|
.then(function() {
|
|
// smsc is lazy-loaded
|
|
if (!elements.smsc) {
|
|
elements.smsc = panel.querySelector('.smsc .explanation');
|
|
}
|
|
})
|
|
.then(this._updateSmsc.bind(null, 0))
|
|
.then(this._initDeliveryReportSettings);
|
|
}
|
|
},
|
|
onBeforeShow: function(panel) {
|
|
if (SIMSlotManager.isMultiSIM()) {
|
|
return Promise.resolve()
|
|
.then(Messaging.disableItems.bind(Messaging, panel))
|
|
.then(this._showDsds)
|
|
.then(this._initDeliveryReportSettings)
|
|
.then(this._initCarrierNames.bind(this))
|
|
.then(this._bindSimcardsClickEvent.bind(this));
|
|
}
|
|
},
|
|
_navigate: function(cardIndex) {
|
|
SettingsService.navigate('messaging-details', {
|
|
cardIndex: cardIndex
|
|
});
|
|
},
|
|
_bindSimcardsClickEvent: function() {
|
|
var max = SIMSlotManager.getSlots().length;
|
|
for (var cardIndex = 0; cardIndex < max; cardIndex++) {
|
|
var simNode = elements['sim' + (cardIndex + 1)];
|
|
if (!simNode.hasAttribute('aria-disabled')) {
|
|
simNode.onclick = this._navigate.bind(this, cardIndex);
|
|
}
|
|
}
|
|
},
|
|
_initDeliveryReportSettings: function() {
|
|
var requestStatusReportKeyForSms =
|
|
'ril.sms.requestStatusReport.enabled';
|
|
var requestStatusReportKeyForMms =
|
|
'ril.mms.requestStatusReport.enabled';
|
|
|
|
function setDeliveryReportSetting(key, value) {
|
|
var lock = settings.createLock();
|
|
var setting = {};
|
|
setting[key] = value;
|
|
lock.set(setting);
|
|
}
|
|
|
|
// Since delivery report for sms/mms should be the same, sync the value
|
|
// while initializing.
|
|
var request = settings.createLock().get(requestStatusReportKeyForSms);
|
|
request.onsuccess = function onSuccessCb() {
|
|
setDeliveryReportSetting(requestStatusReportKeyForMms,
|
|
request.result[requestStatusReportKeyForSms]);
|
|
};
|
|
// Keep both setting synced.
|
|
settings.addObserver(
|
|
requestStatusReportKeyForSms, function addObserverCb(event) {
|
|
setDeliveryReportSetting(requestStatusReportKeyForMms,
|
|
event.settingValue);
|
|
});
|
|
},
|
|
_initCarrierNames: function() {
|
|
var max = SIMSlotManager.getSlots().length;
|
|
|
|
for (var cardIndex = 0; cardIndex < max; cardIndex++) {
|
|
var simNode = elements['sim' + (cardIndex + 1)];
|
|
var holderNode = simNode.querySelector('small');
|
|
var conn = SIMSlotManager.getMobileConnection(cardIndex);
|
|
var operatorInfo = MobileOperator.userFacingInfo(conn);
|
|
holderNode.textContent = operatorInfo.operator || '';
|
|
}
|
|
},
|
|
_showDsds: function() {
|
|
var max = SIMSlotManager.getSlots().length;
|
|
|
|
for (var cardIndex = 0; cardIndex < max; cardIndex++) {
|
|
var simNode = elements['sim' + (cardIndex + 1)];
|
|
if (SIMSlotManager.isSIMCardAbsent(cardIndex)) {
|
|
simNode.setAttribute('aria-disabled', true);
|
|
} else {
|
|
simNode.removeAttribute('aria-disabled');
|
|
}
|
|
}
|
|
elements.simcardsContainer.hidden = false;
|
|
},
|
|
_updateSmsc: function(cardIndex) {
|
|
// cleanup first
|
|
elements.smsc.innerHTML = '';
|
|
|
|
SIMSlotManager.get(cardIndex).getSmsc(function(result) {
|
|
if (result) {
|
|
var bdi = document.createElement('bdi');
|
|
bdi.textContent = result;
|
|
elements.smsc.appendChild(bdi);
|
|
} else {
|
|
elements.smsc.setAttribute('data-l10n-id', 'unknown-SMSC');
|
|
}
|
|
});
|
|
}
|
|
});
|
|
};
|
|
});
|