WebAPI/AppDefinedTeleophony: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
No edit summary
Line 19: Line 19:


== Messaging API ==
== Messaging API ==
  interface SmsManager
  interface Messaging {
{
    readonly   attribute SmsManager sms;
   SmsRequest      send(DOMString number, DOMString message);
    readonly   attribute MmsManager mms;
   SmsRequest[]     send(DOMString[] number, DOMString message);
     MessagingRequest findMessages (MessagingFilter filter, FilterOptions options);
  unsigned short  getNumberOfMessagesForText(in DOMString text);
    MessagingRequest findConversations (DOMString groupBy, MessagingFilter filter, FilterOptions options);
  SMSRequest      delete(in long id);                       // request.result == boolean
    MessagingRequest getMessage (DOMString id);
  SMSRequest      delete(in SmsMessage message);           // request.result == boolean
    MessagingRequest deleteMessage (DOMString id);
  SMSRequest      getMessage(in long id);                   // request.result == SMSMessage
    MessagingRequest deleteConversation (DOMString id);
  SMSRequest      getMessages(in SMSFilter filter, bool reverse); // request.result == SMSIterator
    MessagingRequest markMessageRead (DOMString id, boolean value);
  SMSRequest      markMessageRead(long id, boolean aValue); // request.result == boolean
    MessagingRequest markConversationRead (DOMString id, boolean value);
  SmsRequest      addArrivedMessage(SmsMessage msg);        // IM or Telephony Apps can add a new message as a new arrival.
    MessagingRequest addArrivedMessage(SmsMessage msg);        // IM or Telephony Apps can add a new message as a new arrival.
  };
  };


  interface SmsMessage
  interface Message {
{
    readonly   attribute DOMString id;
   readonly attribute long      id;
    readonly   attribute DOMString handler;  // the application that can handle the message for replying or sending.
   readonly attribute DOMString handler;  // the application that can handle the message for replying or sending.
    readonly   attribute DOMString receiver; // the account receiving the message.
   readonly attribute DOMString delivery; // could be "sent" or "received"
    readonly   attribute DOMString sender;
   readonly attribute DOMString sender;
    readonly    attribute Date      timestamp;
  readonly attribute DOMString receiver;
    readonly   attribute boolean  read;
  readonly attribute DOMString body;
   readonly attribute Date      timestamp;
   readonly attribute boolean  read;
  };
  };


addArrivedMessage() is added to SmsManager to let communication Apps add a message for a new arriving message.  |handler| is added to SmsMessage to record the application can handle replying the message.  The message app is not supposed for responding for editing messages.  It should wake up the handler of the message for editing.
addArrivedMessage() is added to Messaging to let communication Apps add a message for a new arriving message.  |handler| is added to Message to record the application can handle replying the message.  |receiver| is the account receiving the message.  It is used by the handler to distinguish the user of the service. The message app is not supposed for responding for editing messages.  It should wake up the handler of the message for editing. |type| and |serviceID| can be removed and replaced by |handler| and |receiver| while |receiver| are used to distinguish different SIM.


Should we provide a way for synchronization between the database of Messaging API and App's local storage?
Should we provide a way for synchronization between the database of Messaging API and App's local storage?

Revision as of 14:27, 8 April 2013

For B2G, communication applications likes Skype, WhatsApp, LINE, Facebook, Google plus..., etc, will define their owned communication protocols for short/instant messages, voice calling, and contacts. The features of these applications are very similar to telephony, users may like to integrate all of them into one/or several place(s).

For most communication applications, they are comprised by contacts, calling history, messaging, and voice/video calling service. For voice/video call, it is very different from one application to another. So, every application should define their owned user interface to accept and initiate a call. But, for contact, calling history, and messages, they are very similar for applications. By integrating contact, calling history, and messages from all applications, the platform can provide better UX that users can browse and search all information at one place.

Following, this page is about changes of ContactsAPI, calling history, and Messaging API

Contacts API

interface ContactField : nsISupports
{
  attribute DOMString handler;  // the application that can handle voice/video calling and messaging.
  attribute DOMURI status;      // an status icon as an indication of presence and alike.
  attribute DOMString[] type;   // for primary/favorite (use:"PREF"), "home", "work", etc.
  attribute DOMString value;
};

|handler| and |status| field are added to ContactField interface. With them, the contact app can invoke the correct APP to initiate a voice/video calling or concall. For most IM now, |status| field can be used to show presence and status of a user.

For handling changing of |status|, the App should listen on ContactsManager::oncontactchange event.

Messaging API

interface Messaging {
   readonly    attribute SmsManager sms;
   readonly    attribute MmsManager mms;
   MessagingRequest findMessages (MessagingFilter filter, FilterOptions options);
   MessagingRequest findConversations (DOMString groupBy, MessagingFilter filter, FilterOptions options);
   MessagingRequest getMessage (DOMString id);
   MessagingRequest deleteMessage (DOMString id);
   MessagingRequest deleteConversation (DOMString id);
   MessagingRequest markMessageRead (DOMString id, boolean value);
   MessagingRequest markConversationRead (DOMString id, boolean value);
   MessagingRequest addArrivedMessage(SmsMessage msg);        // IM or Telephony Apps can add a new message as a new arrival.
};
interface Message {
   readonly    attribute DOMString id;
   readonly    attribute DOMString handler;  // the application that can handle the message for replying or sending.
   readonly    attribute DOMString receiver; // the account receiving the message.
   readonly    attribute DOMString sender;
   readonly    attribute Date      timestamp;
   readonly    attribute boolean   read;
};

addArrivedMessage() is added to Messaging to let communication Apps add a message for a new arriving message. |handler| is added to Message to record the application can handle replying the message. |receiver| is the account receiving the message. It is used by the handler to distinguish the user of the service. The message app is not supposed for responding for editing messages. It should wake up the handler of the message for editing. |type| and |serviceID| can be removed and replaced by |handler| and |receiver| while |receiver| are used to distinguish different SIM.

Should we provide a way for synchronization between the database of Messaging API and App's local storage?

Calling history

There is no API for calling history. We need a new API for that. It must have the capability of telling what the App can handle an address/number in the calling history.

Communication Apps

The communication apps are invoked through activities or other IPC mechanism. A communication App should provide following functions.

  • initiate a voice/video call to a receiver
  • reply an existing message in the database of Messaging API
  • send a new message to a given receiver
  • show a user in contacts

The communicaton apps are responsible for handling incoming calls and messages. But, they store contacts, messages, and calling history in ContactsAPI, Messaging API, and calling history API.