WebAPI/WebTelephony: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
<h2> Proposed API  </h2>
== Proposed API  ==
<p>(lkcl29dec11: remember also to include data calls as well as voice calls, so that internet access can be initiated)
</p><p>navigator.telephony would return an object with the following interface
</p>
<pre class="_fck_mw_lspace"> interface Telephony&#160;: EventTarget {
TelephonyCall dial(DOMString number); // Returns a object in "dialing" state
attribute boolean muted;          // Should these live on the call/group?
attribute boolean speakerEnabled;


attribute any active; // Active call, for now. Could be a group in the future.
(lkcl29dec11: remember also to include data calls as well as voice calls, so that internet access can be initiated)


readonly attribute TelephonyCall[] calls;
navigator.telephony would return an object with the following interface


void startTone(DOMString tone);
  interface Telephony&nbsp;: EventTarget {
void stopTone();
TelephonyCall dial(DOMString number); // Returns a object in "dialing" state
attribute boolean muted;          // Should these live on the call/group?
attribute boolean speakerEnabled;
attribute any active; // Active call, for now. Could be a group in the future.
readonly attribute TelephonyCall[] calls;
void startTone(DOMString tone);
void stopTone();
attribute Function onincoming;
attribute Function oncallschanged;
}
interface TelephonyCall&nbsp;: EventTarget {
readonly attribute DOMString number;
readonly attribute DOMString state;
// "dialing", "ringing", "busy", "connecting", "connected", "disconnecting", "disconnected", "incoming"
attribute Function onstatechange;
attribute Function onringing;
attribute Function onbusy;
attribute Function onconnecting;
attribute Function onconnected;
attribute Function ondisconnecting;
attribute Function ondisconnected;
void answer(); // Should this make the call the active one?
void hangUp();
}
interface CallEvent&nbsp;: Event {
readonly attribute TelephonyCall call;
}


attribute Function onincoming;
=== Proposal: Enhance telephony call states to hold a call  ===
attribute Function oncallschanged;
}


interface TelephonyCall&#160;: EventTarget {
The diagram below shows the current design of B2G telephony call states (white blocks) and the proposal for holding a call (yellow blocks).
readonly attribute DOMString number;


readonly attribute DOMString state;
We propose the waiting state because the extra waiting state helps the application understand that there has already been another connected call. If we only have the incoming state, then the application will need to retrieve extra information to know whether there is another call or not. <br>
// "dialing", "ringing", "busy", "connecting", "connected", "disconnecting", "disconnected", "incoming"


attribute Function onstatechange;
<br>
attribute Function onringing;
attribute Function onbusy;
attribute Function onconnecting;
attribute Function onconnected;
attribute Function ondisconnecting;
attribute Function ondisconnected;


void answer(); // Should this make the call the active one?
State transition in detail:
void hangUp();
}


interface CallEvent&#160;: Event {
*Scenario #1: There is no other call on-line (current design)<br>When a remote party dials, a new call is generated with its call index (no. 1), and the call state now is CALL_STATE_INCOMING.<br>When user answers/hangs up the call, the call state is eventually pushed to CALL_STATE_CONNECTED/CALL_STATE_DISCONNECTED according to user's decision.  
readonly attribute TelephonyCall call;
*Scenario #2: There is already a call on-line<br>When the third party dials, a new call is generated with its call index. Since there is already a call on-line, the new call's index is no. 2. And the state of Call no. 2 is CALL_STATE_WAITING. When user answers the new call (call no. 2), its state is going to be transferred to CALL_STATE_CONNECTED. In the meanwhile, the state of the originally connected call (call no. 1) should be forced to CALL_STATE_HELD. |Answer()| an INCOMING call and |Answer()| a WAITING call are different.  
}
*Scenario #3: User wants to hold a call when there's no waiting call<br>User can |HoldCall()| to change the call state from CALL_STATE_CONNECTED to CALL_STATE_HELD. User can |ResumeCall()| to make a call from CALL_STATE_HELD back to <br>CALL_STATE_CONNECTED.
</pre>
 
<h3> Proposal: Enhance telephony call states to hold a call  </h3>
[[Image:Proposal_TelephonyCallStates.png]]
<p>The diagram below shows the current design of B2G telephony call states (white blocks) and the proposal for holding a call (yellow blocks).
<br>
</p><p>We propose the waiting state because the extra waiting state helps the application understand that there has already been another connected call. If we only have the incoming state, then the application will need to retrieve extra information to know whether there is another call or not. <br />
=== Proposal: Enhance WebTelephony API to hold a call  ===
</p><p><br />
 
</p><p>State transition in detail:
interface nsIDOMTelephony&nbsp;: nsIDOMEventTarget<br>{<br> nsIDOMTelephonyCall dial(in DOMString number);  
</p>
 
<ul><li>Scenario #1: There is no other call on-line (current design)<br />When a remote party dials, a new call is generated with its call index (no. 1), and the call state now is CALL_STATE_INCOMING.<br />When user answers/hangs up the call, the call state is eventually pushed to CALL_STATE_CONNECTED/CALL_STATE_DISCONNECTED according to user's decision.  
attribute boolean muted;<br> attribute boolean speakerEnabled;  
</li><li>Scenario #2: There is already a call on-line<br />When the third party dials, a new call is generated with its call index. Since there is already a call on-line, the new call's index is no. 2. And the state of Call no. 2 is CALL_STATE_WAITING. When user answers the new call (call no. 2), its state is going to be transferred to CALL_STATE_CONNECTED. In the meanwhile, the state of the originally connected call (call no. 1) should be forced to CALL_STATE_HELD. |Answer()| an INCOMING call and |Answer()| a WAITING call are different.  
 
</li><li>Scenario #3: User wants to hold a call when there's no waiting call<br />User can |HoldCall()| to change the call state from CALL_STATE_CONNECTED to CALL_STATE_HELD. User can |ResumeCall()| to make a call from CALL_STATE_HELD back to <br />CALL_STATE_CONNECTED.
// The call that is "active", i.e. receives microphone input and tones<br> // generated via startTone.<br> readonly attribute jsval active;  
</li></ul>
 
<p><br />  
// Array of all calls that are currently connected.<br> readonly attribute jsval calls;  
</p><p>&lt;img src="/images/3/3f/Proposal_TelephonyCallStates.png" _fck_mw_filename="Proposal TelephonyCallStates.png" alt="" /&gt;
 
</p>
void startTone(in DOMString tone);<br> void stopTone();  
<h3> Proposal: Enhance WebTelephony API to hold a call  </h3>
 
<p>interface nsIDOMTelephony&#160;: nsIDOMEventTarget<br />{<br /> nsIDOMTelephonyCall dial(in DOMString number);  
attribute nsIDOMEventListener onincoming;<br> attribute nsIDOMEventListener onwaiting; //new<br> attribute nsIDOMEventListener oncallschanged;<br>};  
</p><p>attribute boolean muted;<br /> attribute boolean speakerEnabled;  
 
</p><p>// The call that is "active", i.e. receives microphone input and tones<br /> // generated via startTone.<br /> readonly attribute jsval active;  
interface nsIDOMTelephonyCall&nbsp;: nsIDOMEventTarget<br>{<br> readonly attribute DOMString number;<br> readonly attribute DOMString state;<br> // "dialing", "ringing", "busy", "connecting", "connected", "disconnecting", "disconnected", "incoming",<br> // Add new states: "waiting", "holding", "held", "resuming"  
</p><p>// Array of all calls that are currently connected.<br /> readonly attribute jsval calls;  
 
</p><p>void startTone(in DOMString tone);<br /> void stopTone();  
void answer(); //make an incoming call or a waiting call into <br> //"connected"<br> void hangUp(); <br> void holdCal(); //change a connected call into "held"<br> void resumeCall(); //change a "held" call into connected  
</p><p>attribute nsIDOMEventListener onincoming;<br /> attribute nsIDOMEventListener onwaiting; //new<br /> attribute nsIDOMEventListener oncallschanged;<br />};  
 
</p><p>interface nsIDOMTelephonyCall&#160;: nsIDOMEventTarget<br />{<br /> readonly attribute DOMString number;<br /> readonly attribute DOMString state;<br /> // "dialing", "ringing", "busy", "connecting", "connected", "disconnecting", "disconnected", "incoming",<br /> // Add new states: "waiting", "holding", "held", "resuming"  
attribute nsIDOMEventListener onstatechange;  
</p><p>void answer(); //make an incoming call or a waiting call into <br /> //"connected"<br /> void hangUp(); <br /> void holdCal(); //change a connected call into "held"<br /> void resumeCall(); //change a "held" call into connected  
 
</p><p>attribute nsIDOMEventListener onstatechange;  
attribute nsIDOMEventListener ondialing;<br> attribute nsIDOMEventListener onringing;<br> attribute nsIDOMEventListener onbusy;<br> attribute nsIDOMEventListener onconnecting;<br> attribute nsIDOMEventListener onconnected;<br> attribute nsIDOMEventListener ondisconnecting;<br> attribute nsIDOMEventListener ondisconnected;<br> <br> // attribute nsIDOMEventListener onincoming;<br> attribute nsIDOMEventListener onholding; //new<br> attribute nsIDOMEventListener onheld; //new<br> attribute nsIDOMEventListener onresuming; //new<br>}; <br>
</p><p>attribute nsIDOMEventListener ondialing;<br /> attribute nsIDOMEventListener onringing;<br /> attribute nsIDOMEventListener onbusy;<br /> attribute nsIDOMEventListener onconnecting;<br /> attribute nsIDOMEventListener onconnected;<br /> attribute nsIDOMEventListener ondisconnecting;<br /> attribute nsIDOMEventListener ondisconnected;<br /> <br /> // attribute nsIDOMEventListener onincoming;<br /> attribute nsIDOMEventListener onholding; //new<br /> attribute nsIDOMEventListener onheld; //new<br /> attribute nsIDOMEventListener onresuming; //new<br />}; <br />
</p>

Revision as of 07:48, 20 March 2012

Proposed API

(lkcl29dec11: remember also to include data calls as well as voice calls, so that internet access can be initiated)

navigator.telephony would return an object with the following interface

 interface Telephony : EventTarget {
TelephonyCall dial(DOMString number); // Returns a object in "dialing" state
attribute boolean muted;           // Should these live on the call/group?
attribute boolean speakerEnabled;

attribute any active; // Active call, for now. Could be a group in the future.

readonly attribute TelephonyCall[] calls;

void startTone(DOMString tone);
void stopTone();

attribute Function onincoming;
attribute Function oncallschanged;
}

interface TelephonyCall : EventTarget {
readonly attribute DOMString number;

readonly attribute DOMString state;
// "dialing", "ringing", "busy", "connecting", "connected", "disconnecting", "disconnected", "incoming"

attribute Function onstatechange;
attribute Function onringing;
attribute Function onbusy;
attribute Function onconnecting;
attribute Function onconnected;
attribute Function ondisconnecting;
attribute Function ondisconnected;

void answer(); // Should this make the call the active one?
void hangUp();
}

interface CallEvent : Event {
readonly attribute TelephonyCall call;
}

Proposal: Enhance telephony call states to hold a call

The diagram below shows the current design of B2G telephony call states (white blocks) and the proposal for holding a call (yellow blocks).

We propose the waiting state because the extra waiting state helps the application understand that there has already been another connected call. If we only have the incoming state, then the application will need to retrieve extra information to know whether there is another call or not.


State transition in detail:

  • Scenario #1: There is no other call on-line (current design)
    When a remote party dials, a new call is generated with its call index (no. 1), and the call state now is CALL_STATE_INCOMING.
    When user answers/hangs up the call, the call state is eventually pushed to CALL_STATE_CONNECTED/CALL_STATE_DISCONNECTED according to user's decision.
  • Scenario #2: There is already a call on-line
    When the third party dials, a new call is generated with its call index. Since there is already a call on-line, the new call's index is no. 2. And the state of Call no. 2 is CALL_STATE_WAITING. When user answers the new call (call no. 2), its state is going to be transferred to CALL_STATE_CONNECTED. In the meanwhile, the state of the originally connected call (call no. 1) should be forced to CALL_STATE_HELD. |Answer()| an INCOMING call and |Answer()| a WAITING call are different.
  • Scenario #3: User wants to hold a call when there's no waiting call
    User can |HoldCall()| to change the call state from CALL_STATE_CONNECTED to CALL_STATE_HELD. User can |ResumeCall()| to make a call from CALL_STATE_HELD back to
    CALL_STATE_CONNECTED.

Proposal TelephonyCallStates.png

Proposal: Enhance WebTelephony API to hold a call

interface nsIDOMTelephony : nsIDOMEventTarget
{
nsIDOMTelephonyCall dial(in DOMString number);

attribute boolean muted;
attribute boolean speakerEnabled;

// 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 onwaiting; //new
attribute nsIDOMEventListener oncallschanged;
};

interface nsIDOMTelephonyCall : nsIDOMEventTarget
{
readonly attribute DOMString number;
readonly attribute DOMString state;
// "dialing", "ringing", "busy", "connecting", "connected", "disconnecting", "disconnected", "incoming",
// Add new states: "waiting", "holding", "held", "resuming"

void answer(); //make an incoming call or a waiting call into
//"connected"
void hangUp();
void holdCal(); //change a connected call into "held"
void resumeCall(); //change a "held" call into connected

attribute nsIDOMEventListener onstatechange;

attribute nsIDOMEventListener ondialing;
attribute nsIDOMEventListener onringing;
attribute nsIDOMEventListener onbusy;
attribute nsIDOMEventListener onconnecting;
attribute nsIDOMEventListener onconnected;
attribute nsIDOMEventListener ondisconnecting;
attribute nsIDOMEventListener ondisconnected;

// attribute nsIDOMEventListener onincoming;
attribute nsIDOMEventListener onholding; //new
attribute nsIDOMEventListener onheld; //new
attribute nsIDOMEventListener onresuming; //new
};