mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 834160 - Part 7/7: Fix RILContentHelper. r=htsai,allstars.chh
This commit is contained in:
parent
2e0c1294d8
commit
b576648acd
@ -84,17 +84,6 @@ const RIL_IPC_MSG_NAMES = [
|
||||
"RIL:IccExchangeAPDU"
|
||||
];
|
||||
|
||||
const kVoiceChangedTopic = "mobile-connection-voice-changed";
|
||||
const kDataChangedTopic = "mobile-connection-data-changed";
|
||||
const kCardStateChangedTopic = "mobile-connection-cardstate-changed";
|
||||
const kIccInfoChangedTopic = "mobile-connection-iccinfo-changed";
|
||||
const kUssdReceivedTopic = "mobile-connection-ussd-received";
|
||||
const kStkCommandTopic = "icc-manager-stk-command";
|
||||
const kStkSessionEndTopic = "icc-manager-stk-session-end";
|
||||
const kDataErrorTopic = "mobile-connection-data-error";
|
||||
const kIccCardLockErrorTopic = "mobile-connection-icccardlock-error";
|
||||
const kCfStateChangedTopic = "mobile-connection-cfstate-change";
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
|
||||
"@mozilla.org/childprocessmessagemanager;1",
|
||||
"nsISyncMessageSender");
|
||||
@ -335,13 +324,19 @@ RILContentHelper.prototype = {
|
||||
__proto__: DOMRequestIpcHelper.prototype,
|
||||
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIMobileConnectionProvider,
|
||||
Ci.nsIRILContentHelper,
|
||||
Ci.nsICellBroadcastProvider,
|
||||
Ci.nsIVoicemailProvider,
|
||||
Ci.nsITelephonyProvider,
|
||||
Ci.nsIIccProvider,
|
||||
Ci.nsIObserver]),
|
||||
classID: RILCONTENTHELPER_CID,
|
||||
classInfo: XPCOMUtils.generateCI({classID: RILCONTENTHELPER_CID,
|
||||
classDescription: "RILContentHelper",
|
||||
interfaces: [Ci.nsIMobileConnectionProvider,
|
||||
Ci.nsIRILContentHelper]}),
|
||||
Ci.nsICellBroadcastProvider,
|
||||
Ci.nsIVoicemailProvider,
|
||||
Ci.nsITelephonyProvider,
|
||||
Ci.nsIIccProvider]}),
|
||||
|
||||
// An utility function to copy objects.
|
||||
updateInfo: function updateInfo(srcInfo, destInfo) {
|
||||
@ -710,8 +705,11 @@ RILContentHelper.prototype = {
|
||||
return request;
|
||||
},
|
||||
|
||||
_telephonyCallbacks: null,
|
||||
_voicemailCallbacks: null,
|
||||
_mobileConnectionListeners: null,
|
||||
_telephonyListeners: null,
|
||||
_cellBroadcastListeners: null,
|
||||
_voicemailListeners: null,
|
||||
_iccListeners: null,
|
||||
_enumerateTelephonyCallbacks: null,
|
||||
|
||||
voicemailStatus: null,
|
||||
@ -736,85 +734,91 @@ RILContentHelper.prototype = {
|
||||
return this.getVoicemailInfo().displayName;
|
||||
},
|
||||
|
||||
registerCallback: function registerCallback(callbackType, callback) {
|
||||
let callbacks = this[callbackType];
|
||||
if (!callbacks) {
|
||||
callbacks = this[callbackType] = [];
|
||||
registerListener: function registerListener(listenerType, listener) {
|
||||
let listeners = this[listenerType];
|
||||
if (!listeners) {
|
||||
listeners = this[listenerType] = [];
|
||||
}
|
||||
|
||||
if (callbacks.indexOf(callback) != -1) {
|
||||
throw new Error("Already registered this callback!");
|
||||
if (listeners.indexOf(listener) != -1) {
|
||||
throw new Error("Already registered this listener!");
|
||||
}
|
||||
|
||||
callbacks.push(callback);
|
||||
if (DEBUG) debug("Registered " + callbackType + " callback: " + callback);
|
||||
listeners.push(listener);
|
||||
if (DEBUG) debug("Registered " + listenerType + " listener: " + listener);
|
||||
},
|
||||
|
||||
unregisterCallback: function unregisterCallback(callbackType, callback) {
|
||||
let callbacks = this[callbackType];
|
||||
if (!callbacks) {
|
||||
unregisterListener: function unregisterListener(listenerType, listener) {
|
||||
let listeners = this[listenerType];
|
||||
if (!listeners) {
|
||||
return;
|
||||
}
|
||||
|
||||
let index = callbacks.indexOf(callback);
|
||||
let index = listeners.indexOf(listener);
|
||||
if (index != -1) {
|
||||
callbacks.splice(index, 1);
|
||||
if (DEBUG) debug("Unregistered telephony callback: " + callback);
|
||||
listeners.splice(index, 1);
|
||||
if (DEBUG) debug("Unregistered listener: " + listener);
|
||||
}
|
||||
},
|
||||
|
||||
registerTelephonyCallback: function registerTelephonyCallback(callback) {
|
||||
this.registerCallback("_telephonyCallbacks", callback);
|
||||
},
|
||||
|
||||
unregisterTelephonyCallback: function unregisteTelephonyCallback(callback) {
|
||||
this.unregisterCallback("_telephonyCallbacks", callback);
|
||||
|
||||
// We also need to make sure the callback is removed from
|
||||
// _enumerateTelephonyCallbacks.
|
||||
let index = this._enumerateTelephonyCallbacks.indexOf(callback);
|
||||
if (index != -1) {
|
||||
this._enumerateTelephonyCallbacks.splice(index, 1);
|
||||
if (DEBUG) debug("Unregistered enumerateTelephony callback: " + callback);
|
||||
}
|
||||
},
|
||||
|
||||
registerVoicemailCallback: function registerVoicemailCallback(callback) {
|
||||
this.registerCallback("_voicemailCallbacks", callback);
|
||||
},
|
||||
|
||||
unregisterVoicemailCallback: function unregisteVoicemailCallback(callback) {
|
||||
this.unregisterCallback("_voicemailCallbacks", callback);
|
||||
},
|
||||
|
||||
registerCellBroadcastCallback: function registerCellBroadcastCallback(callback) {
|
||||
this.registerCallback("_cellBroadcastCallbacks", callback);
|
||||
},
|
||||
|
||||
unregisterCellBroadcastCallback: function unregisterCellBroadcastCallback(callback) {
|
||||
this.unregisterCallback("_cellBroadcastCallbacks", callback);
|
||||
},
|
||||
|
||||
registerTelephonyMsg: function registerTelephonyMsg() {
|
||||
debug("Registering for telephony-related messages");
|
||||
cpmm.sendAsyncMessage("RIL:RegisterTelephonyMsg");
|
||||
},
|
||||
|
||||
registerMobileConnectionMsg: function registerMobileConnectionMsg() {
|
||||
debug("Registering for mobile connection-related messages");
|
||||
registerMobileConnectionMsg: function registerMobileConnectionMsg(listener) {
|
||||
debug("Registering for mobile connection related messages");
|
||||
this.registerListener("_mobileConnectionListeners", listener);
|
||||
cpmm.sendAsyncMessage("RIL:RegisterMobileConnectionMsg");
|
||||
},
|
||||
|
||||
registerVoicemailMsg: function registerVoicemailMsg() {
|
||||
unregisterMobileConnectionMsg: function unregisteMobileConnectionMsg(listener) {
|
||||
this.unregisterListener("_mobileConnectionListeners", listener);
|
||||
},
|
||||
|
||||
registerTelephonyMsg: function registerTelephonyMsg(listener) {
|
||||
debug("Registering for telephony-related messages");
|
||||
this.registerListener("_telephonyListeners", listener);
|
||||
cpmm.sendAsyncMessage("RIL:RegisterTelephonyMsg");
|
||||
},
|
||||
|
||||
unregisterTelephonyMsg: function unregisteTelephonyMsg(listener) {
|
||||
this.unregisterListener("_telephonyListeners", listener);
|
||||
|
||||
// We also need to make sure the listener is removed from
|
||||
// _enumerateTelephonyCallbacks.
|
||||
let index = this._enumerateTelephonyCallbacks.indexOf(listener);
|
||||
if (index != -1) {
|
||||
this._enumerateTelephonyCallbacks.splice(index, 1);
|
||||
if (DEBUG) debug("Unregistered enumerateTelephony callback: " + listener);
|
||||
}
|
||||
},
|
||||
|
||||
registerVoicemailMsg: function registerVoicemailMsg(listener) {
|
||||
debug("Registering for voicemail-related messages");
|
||||
this.registerListener("_voicemailListeners", listener);
|
||||
cpmm.sendAsyncMessage("RIL:RegisterVoicemailMsg");
|
||||
},
|
||||
|
||||
registerCellBroadcastMsg: function registerCellBroadcastMsg() {
|
||||
unregisterVoicemailMsg: function unregisteVoicemailMsg(listener) {
|
||||
this.unregisterListener("_voicemailListeners", listener);
|
||||
},
|
||||
|
||||
registerCellBroadcastMsg: function registerCellBroadcastMsg(listener) {
|
||||
debug("Registering for Cell Broadcast related messages");
|
||||
this.registerListener("_cellBroadcastListeners", listener);
|
||||
cpmm.sendAsyncMessage("RIL:RegisterCellBroadcastMsg");
|
||||
},
|
||||
|
||||
unregisterCellBroadcastMsg: function unregisterCellBroadcastMsg(listener) {
|
||||
this.unregisterListener("_cellBroadcastListeners", listener);
|
||||
},
|
||||
|
||||
registerIccMsg: function registerIccMsg(listener) {
|
||||
debug("Registering for ICC related messages");
|
||||
this.registerListener("_iccListeners", listener);
|
||||
cpmm.sendAsyncMessage("RIL:RegisterIccMsg");
|
||||
},
|
||||
|
||||
unregisterIccMsg: function unregisterIccMsg(listener) {
|
||||
this.unregisterListener("_iccListeners", listener);
|
||||
},
|
||||
|
||||
enumerateCalls: function enumerateCalls(callback) {
|
||||
debug("Requesting enumeration of calls for callback: " + callback);
|
||||
// We need 'requestId' to meet the 'RILContentHelper <--> RadioInterfaceLayer'
|
||||
@ -951,20 +955,27 @@ RILContentHelper.prototype = {
|
||||
case "RIL:CardStateChanged":
|
||||
if (this.rilContext.cardState != msg.json.cardState) {
|
||||
this.rilContext.cardState = msg.json.cardState;
|
||||
Services.obs.notifyObservers(null, kCardStateChangedTopic, null);
|
||||
this._deliverEvent("_mobileConnectionListeners",
|
||||
"notifyCardStateChanged",
|
||||
null);
|
||||
}
|
||||
break;
|
||||
case "RIL:IccInfoChanged":
|
||||
this.updateInfo(msg.json, this.rilContext.iccInfo);
|
||||
Services.obs.notifyObservers(null, kIccInfoChangedTopic, null);
|
||||
this._deliverEvent("_mobileConnectionListeners",
|
||||
"notifyIccInfoChanged", null);
|
||||
break;
|
||||
case "RIL:VoiceInfoChanged":
|
||||
this.updateConnectionInfo(msg.json, this.rilContext.voiceConnectionInfo);
|
||||
Services.obs.notifyObservers(null, kVoiceChangedTopic, null);
|
||||
this._deliverEvent("_mobileConnectionListeners",
|
||||
"notifyVoiceChanged",
|
||||
null);
|
||||
break;
|
||||
case "RIL:DataInfoChanged":
|
||||
this.updateConnectionInfo(msg.json, this.rilContext.dataConnectionInfo);
|
||||
Services.obs.notifyObservers(null, kDataChangedTopic, null);
|
||||
this._deliverEvent("_mobileConnectionListeners",
|
||||
"notifyDataChanged",
|
||||
null);
|
||||
break;
|
||||
case "RIL:EnumerateCalls":
|
||||
this.handleEnumerateCalls(msg.json.calls);
|
||||
@ -984,16 +995,15 @@ RILContentHelper.prototype = {
|
||||
RIL.GECKO_NETWORK_SELECTION_AUTOMATIC);
|
||||
break;
|
||||
case "RIL:CallStateChanged":
|
||||
this._deliverCallback("_telephonyCallbacks",
|
||||
"callStateChanged",
|
||||
[msg.json.callIndex, msg.json.state,
|
||||
msg.json.number, msg.json.isActive]);
|
||||
this._deliverEvent("_telephonyListeners",
|
||||
"callStateChanged",
|
||||
[msg.json.callIndex, msg.json.state,
|
||||
msg.json.number, msg.json.isActive]);
|
||||
break;
|
||||
case "RIL:CallError":
|
||||
this._deliverCallback("_telephonyCallbacks",
|
||||
"notifyError",
|
||||
[msg.json.callIndex,
|
||||
msg.json.error]);
|
||||
this._deliverEvent("_telephonyListeners",
|
||||
"notifyError",
|
||||
[msg.json.callIndex, msg.json.error]);
|
||||
break;
|
||||
case "RIL:VoicemailNotification":
|
||||
this.handleVoicemailNotification(msg.json);
|
||||
@ -1008,10 +1018,9 @@ RILContentHelper.prototype = {
|
||||
} else {
|
||||
if (msg.json.rilMessageType == "iccSetCardLock" ||
|
||||
msg.json.rilMessageType == "iccUnlockCardLock") {
|
||||
let result = JSON.stringify({lockType: msg.json.lockType,
|
||||
retryCount: msg.json.retryCount});
|
||||
Services.obs.notifyObservers(null, kIccCardLockErrorTopic,
|
||||
result);
|
||||
this._deliverEvent("_mobileConnectionListeners",
|
||||
"notifyIccCardLockError",
|
||||
[msg.json.lockType, msg.json.retryCount]);
|
||||
}
|
||||
this.fireRequestError(msg.json.requestId, msg.json.errorMsg);
|
||||
}
|
||||
@ -1019,7 +1028,9 @@ RILContentHelper.prototype = {
|
||||
case "RIL:USSDReceived":
|
||||
let res = JSON.stringify({message: msg.json.message,
|
||||
sessionEnded: msg.json.sessionEnded});
|
||||
Services.obs.notifyObservers(null, kUssdReceivedTopic, res);
|
||||
this._deliverEvent("_mobileConnectionListeners",
|
||||
"notifyUssdReceived",
|
||||
[msg.json.message, msg.json.sessionEnded]);
|
||||
break;
|
||||
case "RIL:SendMMI:Return:OK":
|
||||
case "RIL:CancelMMI:Return:OK":
|
||||
@ -1033,11 +1044,11 @@ RILContentHelper.prototype = {
|
||||
}
|
||||
break;
|
||||
case "RIL:StkCommand":
|
||||
let jsonString = JSON.stringify(msg.json);
|
||||
Services.obs.notifyObservers(null, kStkCommandTopic, jsonString);
|
||||
this._deliverEvent("_iccListeners", "notifyStkCommand",
|
||||
[JSON.stringify(msg.json)]);
|
||||
break;
|
||||
case "RIL:StkSessionEnd":
|
||||
Services.obs.notifyObservers(null, kStkSessionEndTopic, null);
|
||||
this._deliverEvent("_iccListeners", "notifyStkSessionEnd", null);
|
||||
break;
|
||||
case "RIL:IccOpenChannel":
|
||||
this.handleIccOpenChannel(msg.json);
|
||||
@ -1050,7 +1061,8 @@ RILContentHelper.prototype = {
|
||||
break;
|
||||
case "RIL:DataError":
|
||||
this.updateConnectionInfo(msg.json, this.rilContext.dataConnectionInfo);
|
||||
Services.obs.notifyObservers(null, kDataErrorTopic, msg.json.error);
|
||||
this._deliverEvent("_mobileConnectionListeners", "notifyDataError",
|
||||
[msg.json.error]);
|
||||
break;
|
||||
case "RIL:GetCallForwardingOption":
|
||||
this.handleGetCallForwardingOption(msg.json);
|
||||
@ -1059,19 +1071,17 @@ RILContentHelper.prototype = {
|
||||
this.handleSetCallForwardingOption(msg.json);
|
||||
break;
|
||||
case "RIL:CfStateChanged":
|
||||
let result = JSON.stringify({success: msg.json.success,
|
||||
action: msg.json.action,
|
||||
reason: msg.json.reason,
|
||||
number: msg.json.number,
|
||||
timeSeconds: msg.json.timeSeconds,
|
||||
serviceClass: msg.json.serviceClass});
|
||||
Services.obs.notifyObservers(null, kCfStateChangedTopic, result);
|
||||
this._deliverEvent("_mobileConnectionListeners",
|
||||
"notifyCFStateChange",
|
||||
[msg.json.success, msg.json.action,
|
||||
msg.json.reason, msg.json.number,
|
||||
msg.json.timeSeconds, msg.json.serviceClass]);
|
||||
break;
|
||||
case "RIL:CellBroadcastReceived":
|
||||
let message = new CellBroadcastMessage(msg.json);
|
||||
this._deliverCallback("_cellBroadcastCallbacks",
|
||||
"notifyMessageReceived",
|
||||
[message]);
|
||||
this._deliverEvent("_cellBroadcastListeners",
|
||||
"notifyMessageReceived",
|
||||
[message]);
|
||||
break;
|
||||
}
|
||||
},
|
||||
@ -1187,9 +1197,9 @@ RILContentHelper.prototype = {
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
this._deliverCallback("_voicemailCallbacks",
|
||||
"voicemailNotification",
|
||||
[this.voicemailStatus]);
|
||||
this._deliverEvent("_voicemailListeners",
|
||||
"voicemailNotification",
|
||||
[this.voicemailStatus]);
|
||||
}
|
||||
},
|
||||
|
||||
@ -1253,25 +1263,25 @@ RILContentHelper.prototype = {
|
||||
return gUUIDGenerator.generateUUID().toString();
|
||||
},
|
||||
|
||||
_deliverCallback: function _deliverCallback(callbackType, name, args) {
|
||||
let thisCallbacks = this[callbackType];
|
||||
if (!thisCallbacks) {
|
||||
_deliverEvent: function _deliverEvent(listenerType, name, args) {
|
||||
let thisListeners = this[listenerType];
|
||||
if (!thisListeners) {
|
||||
return;
|
||||
}
|
||||
|
||||
let callbacks = thisCallbacks.slice();
|
||||
for each (let callback in callbacks) {
|
||||
if (thisCallbacks.indexOf(callback) == -1) {
|
||||
let listeners = thisListeners.slice();
|
||||
for each (let listener in listeners) {
|
||||
if (thisListeners.indexOf(listener) == -1) {
|
||||
continue;
|
||||
}
|
||||
let handler = callback[name];
|
||||
let handler = listener[name];
|
||||
if (typeof handler != "function") {
|
||||
throw new Error("No handler for " + name);
|
||||
}
|
||||
try {
|
||||
handler.apply(callback, args);
|
||||
handler.apply(listener, args);
|
||||
} catch (e) {
|
||||
debug("callback handler for " + name + " threw an exception: " + e);
|
||||
debug("listener for " + name + " threw an exception: " + e);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -100,6 +100,7 @@ const RIL_IPC_MOBILECONNECTION_MSG_NAMES = [
|
||||
"RIL:IccExchangeAPDU",
|
||||
"RIL:IccCloseChannel",
|
||||
"RIL:RegisterMobileConnectionMsg",
|
||||
"RIL:RegisterIccMsg",
|
||||
"RIL:SetCallForwardingOption",
|
||||
"RIL:GetCallForwardingOption"
|
||||
];
|
||||
@ -314,9 +315,10 @@ function RadioInterfaceLayer() {
|
||||
|
||||
this._messageManagerByRequest = {};
|
||||
|
||||
// Manage message targets in terms of permission. Only the authorized and
|
||||
// Manage message targets in terms of topic. Only the authorized and
|
||||
// registered contents can receive related messages.
|
||||
this._messageManagerByPermission = {};
|
||||
this._messageManagerByTopic = {};
|
||||
this._topicList = [];
|
||||
|
||||
ppmm.addMessageListener("child-process-shutdown", this);
|
||||
for (let msgname of RIL_IPC_TELEPHONY_MSG_NAMES) {
|
||||
@ -511,6 +513,9 @@ RadioInterfaceLayer.prototype = {
|
||||
case "RIL:RegisterMobileConnectionMsg":
|
||||
this.registerMessageTarget("mobileconnection", msg.target);
|
||||
break;
|
||||
case "RIL:RegisterIccMsg":
|
||||
this.registerMessageTarget("icc", msg.target);
|
||||
break;
|
||||
case "RIL:RegisterVoicemailMsg":
|
||||
this.registerMessageTarget("voicemail", msg.target);
|
||||
break;
|
||||
@ -610,7 +615,7 @@ RadioInterfaceLayer.prototype = {
|
||||
break;
|
||||
case "cardstatechange":
|
||||
this.rilContext.cardState = message.cardState;
|
||||
this._sendTargetMessage("mobileconnection", "RIL:CardStateChanged", message);
|
||||
this._sendMobileConnectionMessage("RIL:CardStateChanged", message);
|
||||
break;
|
||||
case "setCallWaiting":
|
||||
this.handleCallWaitingStatusChange(message);
|
||||
@ -635,8 +640,7 @@ RadioInterfaceLayer.prototype = {
|
||||
return;
|
||||
case "cellbroadcast-received":
|
||||
message.timestamp = Date.now();
|
||||
this._sendTargetMessage("cellbroadcast", "RIL:CellBroadcastReceived",
|
||||
message);
|
||||
this._sendCellBroadcastMessage("RIL:CellBroadcastReceived", message);
|
||||
break;
|
||||
case "datacallstatechange":
|
||||
this.handleDataCallState(message);
|
||||
@ -700,7 +704,7 @@ RadioInterfaceLayer.prototype = {
|
||||
this.handleStkProactiveCommand(message);
|
||||
break;
|
||||
case "stksessionend":
|
||||
this._sendTargetMessage("mobileconnection", "RIL:StkSessionEnd", null);
|
||||
this._sendIccMessage("RIL:StkSessionEnd", null);
|
||||
break;
|
||||
case "setPreferredNetworkType":
|
||||
this.handleSetPreferredNetworkType(message);
|
||||
@ -742,18 +746,15 @@ RadioInterfaceLayer.prototype = {
|
||||
target.sendAsyncMessage(requestType, options);
|
||||
},
|
||||
|
||||
_messageManagerByPermission: null,
|
||||
_permissionList: null,
|
||||
registerMessageTarget: function registerMessageTarget(permission, target) {
|
||||
let targets = this._messageManagerByPermission[permission];
|
||||
if (!this._permissionList) {
|
||||
this._permissionList = [];
|
||||
}
|
||||
_messageManagerByTopic: null,
|
||||
_topicList: null,
|
||||
registerMessageTarget: function registerMessageTarget(topic, target) {
|
||||
let targets = this._messageManagerByTopic[topic];
|
||||
if (!targets) {
|
||||
targets = this._messageManagerByPermission[permission] = [];
|
||||
let list = this._permissionList;
|
||||
if (list.indexOf(permission) == -1) {
|
||||
list.push(permission);
|
||||
targets = this._messageManagerByTopic[topic] = [];
|
||||
let list = this._topicList;
|
||||
if (list.indexOf(topic) == -1) {
|
||||
list.push(topic);
|
||||
}
|
||||
}
|
||||
|
||||
@ -763,20 +764,20 @@ RadioInterfaceLayer.prototype = {
|
||||
}
|
||||
|
||||
targets.push(target);
|
||||
debug("Registered " + permission + " target: " + target);
|
||||
debug("Registered " + topic + " target: " + target);
|
||||
},
|
||||
|
||||
unregisterMessageTarget: function unregisterMessageTarget(permission, target) {
|
||||
if (permission == null) {
|
||||
// Unregister the target for every permission when no permission is specified.
|
||||
for (let type of this._permissionList) {
|
||||
unregisterMessageTarget: function unregisterMessageTarget(topic, target) {
|
||||
if (topic == null) {
|
||||
// Unregister the target for every topic when no topic is specified.
|
||||
for (let type of this._topicList) {
|
||||
this.unregisterMessageTarget(type, target);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Unregister the target for a specified permission.
|
||||
let targets = this._messageManagerByPermission[permission];
|
||||
// Unregister the target for a specified topic.
|
||||
let targets = this._messageManagerByTopic[topic];
|
||||
if (!targets) {
|
||||
return;
|
||||
}
|
||||
@ -784,18 +785,18 @@ RadioInterfaceLayer.prototype = {
|
||||
let index = targets.indexOf(target);
|
||||
if (index != -1) {
|
||||
targets.splice(index, 1);
|
||||
debug("Unregistered " + permission + " target: " + target);
|
||||
debug("Unregistered " + topic + " target: " + target);
|
||||
}
|
||||
},
|
||||
|
||||
_sendTargetMessage: function _sendTargetMessage(permission, message, options) {
|
||||
_sendTargetMessage: function _sendTargetMessage(topic, message, options) {
|
||||
|
||||
if (!this._sysMsgListenerReady) {
|
||||
this._enqueueTargetMessage(permission, message, options);
|
||||
this._enqueueTargetMessage(topic, message, options);
|
||||
return;
|
||||
}
|
||||
|
||||
let targets = this._messageManagerByPermission[permission];
|
||||
let targets = this._messageManagerByTopic[topic];
|
||||
if (!targets) {
|
||||
return;
|
||||
}
|
||||
@ -817,6 +818,14 @@ RadioInterfaceLayer.prototype = {
|
||||
this._sendTargetMessage("voicemail", message, options);
|
||||
},
|
||||
|
||||
_sendCellBroadcastMessage: function sendCellBroadcastMessage(message, options) {
|
||||
this._sendTargetMessage("cellbroadcast", message, options);
|
||||
},
|
||||
|
||||
_sendIccMessage: function sendIccMessage(message, options) {
|
||||
this._sendTargetMessage("icc", message, options);
|
||||
},
|
||||
|
||||
updateNetworkInfo: function updateNetworkInfo(message) {
|
||||
let voiceMessage = message[RIL.NETWORK_INFO_VOICE_REGISTRATION_STATE];
|
||||
let dataMessage = message[RIL.NETWORK_INFO_DATA_REGISTRATION_STATE];
|
||||
@ -846,10 +855,10 @@ RadioInterfaceLayer.prototype = {
|
||||
this.checkRoamingBetweenOperators(data);
|
||||
|
||||
if (voiceMessage || operatorMessage) {
|
||||
this._sendTargetMessage("mobileconnection", "RIL:VoiceInfoChanged", voice);
|
||||
this._sendMobileConnectionMessage("RIL:VoiceInfoChanged", voice);
|
||||
}
|
||||
if (dataMessage || operatorMessage) {
|
||||
this._sendTargetMessage("mobileconnection", "RIL:DataInfoChanged", data);
|
||||
this._sendMobileConnectionMessage("RIL:DataInfoChanged", data);
|
||||
}
|
||||
|
||||
if (selectionMessage) {
|
||||
@ -917,7 +926,7 @@ RadioInterfaceLayer.prototype = {
|
||||
}
|
||||
|
||||
if (!newInfo.batch) {
|
||||
this._sendTargetMessage("mobileconnection", "RIL:VoiceInfoChanged", voiceInfo);
|
||||
this._sendMobileConnectionMessage("RIL:VoiceInfoChanged", voiceInfo);
|
||||
}
|
||||
},
|
||||
|
||||
@ -947,7 +956,7 @@ RadioInterfaceLayer.prototype = {
|
||||
}
|
||||
|
||||
if (!newInfo.batch) {
|
||||
this._sendTargetMessage("mobileconnection", "RIL:DataInfoChanged", dataInfo);
|
||||
this._sendMobileConnectionMessage("RIL:DataInfoChanged", dataInfo);
|
||||
}
|
||||
this.updateRILNetworkInterface();
|
||||
},
|
||||
@ -958,7 +967,7 @@ RadioInterfaceLayer.prototype = {
|
||||
handleDataCallError: function handleDataCallError(message) {
|
||||
// Notify data call error only for data APN
|
||||
if (message.apn == this.dataCallSettings["apn"]) {
|
||||
this._sendTargetMessage("mobileconnection", "RIL:DataError", message);
|
||||
this._sendMobileConnectionMessage("RIL:DataError", message);
|
||||
}
|
||||
|
||||
this._deliverDataCallCallback("dataCallError", [message]);
|
||||
@ -1025,7 +1034,7 @@ RadioInterfaceLayer.prototype = {
|
||||
voiceInfo.relSignalStrength != message.gsmRelative) {
|
||||
voiceInfo.signalStrength = message.gsmDBM;
|
||||
voiceInfo.relSignalStrength = message.gsmRelative;
|
||||
this._sendTargetMessage("mobileconnection", "RIL:VoiceInfoChanged", voiceInfo);
|
||||
this._sendMobileConnectionMessage("RIL:VoiceInfoChanged", voiceInfo);
|
||||
}
|
||||
|
||||
let dataInfo = this.rilContext.data;
|
||||
@ -1033,7 +1042,7 @@ RadioInterfaceLayer.prototype = {
|
||||
dataInfo.relSignalStrength != message.gsmRelative) {
|
||||
dataInfo.signalStrength = message.gsmDBM;
|
||||
dataInfo.relSignalStrength = message.gsmRelative;
|
||||
this._sendTargetMessage("mobileconnection", "RIL:DataInfoChanged", dataInfo);
|
||||
this._sendMobileConnectionMessage("RIL:DataInfoChanged", dataInfo);
|
||||
}
|
||||
},
|
||||
|
||||
@ -1064,14 +1073,14 @@ RadioInterfaceLayer.prototype = {
|
||||
|
||||
voice.network = message;
|
||||
if (!message.batch) {
|
||||
this._sendTargetMessage("mobileconnection", "RIL:VoiceInfoChanged", voice);
|
||||
this._sendMobileConnectionMessage("RIL:VoiceInfoChanged", voice);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.networkChanged(message, data.network)) {
|
||||
data.network = message;
|
||||
if (!message.batch) {
|
||||
this._sendTargetMessage("mobileconnection", "RIL:DataInfoChanged", data);
|
||||
this._sendMobileConnectionMessage("RIL:DataInfoChanged", data);
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -1089,8 +1098,8 @@ RadioInterfaceLayer.prototype = {
|
||||
this._ensureRadioState();
|
||||
},
|
||||
|
||||
_enqueueTargetMessage: function _enqueueTargetMessage(permission, message, options) {
|
||||
let msg = { permission : permission,
|
||||
_enqueueTargetMessage: function _enqueueTargetMessage(topic, message, options) {
|
||||
let msg = { topic : topic,
|
||||
message : message,
|
||||
options : options };
|
||||
// Remove previous queued message of same message type, only one message
|
||||
@ -1114,7 +1123,7 @@ RadioInterfaceLayer.prototype = {
|
||||
|
||||
// Dequeue and resend messages.
|
||||
for each (let msg in this._targetMessageQueue) {
|
||||
this._sendTargetMessage(msg.permission, msg.message, msg.options);
|
||||
this._sendTargetMessage(msg.topic, msg.message, msg.options);
|
||||
}
|
||||
this._targetMessageQueue = null;
|
||||
},
|
||||
@ -1354,7 +1363,7 @@ RadioInterfaceLayer.prototype = {
|
||||
gSystemMessenger.broadcastMessage("telephony-new-call", {});
|
||||
}
|
||||
this.updateCallAudioState(call);
|
||||
this._sendTargetMessage("telephony", "RIL:CallStateChanged", call);
|
||||
this._sendTelephonyMessage("RIL:CallStateChanged", call);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -1372,7 +1381,7 @@ RadioInterfaceLayer.prototype = {
|
||||
};
|
||||
gSystemMessenger.broadcastMessage("telephony-call-ended", data);
|
||||
this.updateCallAudioState(call);
|
||||
this._sendTargetMessage("telephony", "RIL:CallStateChanged", call);
|
||||
this._sendTelephonyMessage("RIL:CallStateChanged", call);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -1426,7 +1435,7 @@ RadioInterfaceLayer.prototype = {
|
||||
*/
|
||||
updateNetworkSelectionMode: function updateNetworkSelectionMode(message) {
|
||||
debug("updateNetworkSelectionMode: " + JSON.stringify(message));
|
||||
this._sendTargetMessage("mobileconnection", "RIL:NetworkSelectionModeChanged", message);
|
||||
this._sendMobileConnectionMessage("RIL:NetworkSelectionModeChanged", message);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -1449,7 +1458,7 @@ RadioInterfaceLayer.prototype = {
|
||||
* Handle call error.
|
||||
*/
|
||||
handleCallError: function handleCallError(message) {
|
||||
this._sendTargetMessage("telephony", "RIL:CallError", message);
|
||||
this._sendTelephonyMessage("RIL:CallError", message);
|
||||
},
|
||||
|
||||
/**
|
||||
@ -1527,7 +1536,7 @@ RadioInterfaceLayer.prototype = {
|
||||
if (mwi) {
|
||||
mwi.returnNumber = message.sender;
|
||||
mwi.returnMessage = message.fullBody;
|
||||
this._sendTargetMessage("voicemail", "RIL:VoicemailNotification", mwi);
|
||||
this._sendVoicemailMessage("RIL:VoicemailNotification", mwi);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1691,7 +1700,7 @@ RadioInterfaceLayer.prototype = {
|
||||
if (datacall.ifname &&
|
||||
datacall.apn == this.dataCallSettings["apn"]) {
|
||||
data.connected = (datacall.state == RIL.GECKO_NETWORK_STATE_CONNECTED);
|
||||
this._sendTargetMessage("mobileconnection", "RIL:DataInfoChanged", data);
|
||||
this._sendMobileConnectionMessage("RIL:DataInfoChanged", data);
|
||||
}
|
||||
|
||||
this._deliverDataCallCallback("dataCallStateChanged",
|
||||
@ -1762,7 +1771,7 @@ RadioInterfaceLayer.prototype = {
|
||||
voicemailInfo.number = message.number;
|
||||
voicemailInfo.displayName = message.alphaId;
|
||||
|
||||
this._sendTargetMessage("voicemail", "RIL:VoicemailInfoChanged", voicemailInfo);
|
||||
this._sendVoicemailMessage("RIL:VoicemailInfoChanged", voicemailInfo);
|
||||
},
|
||||
|
||||
handleICCInfoChange: function handleICCInfoChange(message) {
|
||||
@ -1782,7 +1791,7 @@ RadioInterfaceLayer.prototype = {
|
||||
}
|
||||
// RIL:IccInfoChanged corresponds to a DOM event that gets fired only
|
||||
// when the MCC or MNC codes have changed.
|
||||
this._sendTargetMessage("mobileconnection", "RIL:IccInfoChanged", message);
|
||||
this._sendMobileConnectionMessage("RIL:IccInfoChanged", message);
|
||||
|
||||
// If spn becomes available, we should check roaming again.
|
||||
let oldSpn = oldIccInfo ? oldIccInfo.spn : null;
|
||||
@ -1794,10 +1803,10 @@ RadioInterfaceLayer.prototype = {
|
||||
this.checkRoamingBetweenOperators(voice);
|
||||
this.checkRoamingBetweenOperators(data);
|
||||
if (voiceRoaming != voice.roaming) {
|
||||
this._sendTargetMessage("mobileconnection", "RIL:VoiceInfoChanged", voice);
|
||||
this._sendMobileConnectionMessage("RIL:VoiceInfoChanged", voice);
|
||||
}
|
||||
if (dataRoaming != data.roaming) {
|
||||
this._sendTargetMessage("mobileconnection", "RIL:DataInfoChanged", data);
|
||||
this._sendMobileConnectionMessage("RIL:DataInfoChanged", data);
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -1809,7 +1818,7 @@ RadioInterfaceLayer.prototype = {
|
||||
handleUSSDReceived: function handleUSSDReceived(ussd) {
|
||||
debug("handleUSSDReceived " + JSON.stringify(ussd));
|
||||
gSystemMessenger.broadcastMessage("ussd-received", ussd);
|
||||
this._sendTargetMessage("mobileconnection", "RIL:USSDReceived", ussd);
|
||||
this._sendMobileConnectionMessage("RIL:USSDReceived", ussd);
|
||||
},
|
||||
|
||||
handleSendMMI: function handleSendMMI(message) {
|
||||
@ -1829,7 +1838,7 @@ RadioInterfaceLayer.prototype = {
|
||||
handleStkProactiveCommand: function handleStkProactiveCommand(message) {
|
||||
debug("handleStkProactiveCommand " + JSON.stringify(message));
|
||||
gSystemMessenger.broadcastMessage("icc-stkcommand", message);
|
||||
this._sendTargetMessage("mobileconnection", "RIL:StkCommand", message);
|
||||
this._sendIccMessage("RIL:StkCommand", message);
|
||||
},
|
||||
|
||||
handleQueryCallForwardStatus: function handleQueryCallForwardStatus(message) {
|
||||
@ -1839,7 +1848,7 @@ RadioInterfaceLayer.prototype = {
|
||||
|
||||
handleSetCallForward: function handleSetCallForward(message) {
|
||||
debug("handleSetCallForward: " + JSON.stringify(message));
|
||||
this._sendTargetMessage("mobileconnection", "RIL:CfStateChanged", message);
|
||||
this._sendMobileConnectionMessage("RIL:CfStateChanged", message);
|
||||
|
||||
let messageType;
|
||||
if (message.isSendMMI) {
|
||||
|
Loading…
Reference in New Issue
Block a user