WebAPI/WebTelephony/Multi-SIM
< WebAPI | WebTelephony
Jump to navigation
Jump to search
Proposal: WebTelephony API for Multi-SIM
interface nsIDOMTelephonyManager : nsIDOMEventTarget
{
attribute boolean muted;
attribute boolean speakerEnabled;
readonly attribute jsval active;
readonly attribute jsval calls;
readonly attribute phoneState; /* Ringing, Offhook, Idel */
readonly attribute jsval phones;
readonly attribute nsIDOMTelephony defaultPhone;
[implicit_jscontext] attribute jsval onincoming;
[implicit_jscontext] attribute jsval oncallschanged;
};
interface nsIDOMTelephony: nsIDOMEventTarget
{
nsIDOMTelephonyCall dial(in DOMString number);
// The call that is "active", i.e. receives microphone input and tones
// generated via startTone.
readonly attribute jsval active;
// Array of all calls that are currently connected.
readonly attribute jsval calls;
void startTone(in DOMString tone);
void stopTone();
attribute nsIDOMEventListener onincoming;
attribute nsIDOMEventListener oncallschanged;
};
interface nsIDOMTelephonyCall: nsIDOMEventTarget
{
readonly attribute DOMString number;
// "dialing", "alerting", "busy", "connecting", "connected", "disconnecting",
// "disconnected", "incoming", "holding", "held", "resuming"
readonly attribute DOMString state;
readonly attribute nsIDOMDOMError error;
readonly attribute nsIDOMTelephony phone;
// functions to mediate a call.
void answer();
void hangUp();
void hold();
void resume();
attribute nsIDOMEventListener onstatechange;
attribute nsIDOMEventListener ondialing;
attribute nsIDOMEventListener onalerting;
attribute nsIDOMEventListener onbusy;
attribute nsIDOMEventListener onconnecting;
attribute nsIDOMEventListener onconnected;
attribute nsIDOMEventListener ondisconnecting;
attribute nsIDOMEventListener ondisconnected;
attribute nsIDOMEventListener onincoming;
attribute nsIDOMEventListener onholding;
attribute nsIDOMEventListener onheld;
attribute nsIDOMEventListener onresuming;
};
Use Case
Outgoing Call
- Current B2G
navigator.mozTelephony.dial(number)
- Multi-SIM
navigator.mozTelephonyManager.defaultPhone.dial() navigator.mozTelephonyManager.phones[index].dial()
Incoming Call
- Current B2G
Tel1 = navigator.mozTelephony;
- Multi-SIM
Tel1 = navigator.mozTelephonyManager.phones[index];
Once the telephony object is obtained, the following work remains the same.
Tel1.addEventListener('incoming');
Tel1.onincoming = function onincoming (evt) {
incoming = evt.call; };
incoming.answer();
Implementation Details
Proposal: Architecture
This is the current architecture supporting a single SIM card.
Here is a proposal for multi-SIMs.
- Internal API: nsIRILContentHelper.idl: We might need to add 『index』, used for connecting a telephony object (phoneIndex) and a specific 『sim slot』.
- Examples of modifiying the internal API:
void enumerateCalls(in short index,
in nsIRILTelephonyCallback callback);
void dial(in short index, in DOMString number);
readonly attribute jsval voicemailNumber; /* {index, number} */
- Potential Issues
- Array-ize RadioInterfaceLayer: one instance for one sim slot
- Send parcel to the correct rild: might need to modify ril_worker.js and rilproxy
- Get the number of sim slots