We're working on a feature list for the next release of our software and I'd like to present this proposal for discussion:


We'd like to propose the OVI community developing a system (class) and standard (API and docs) to allow applications to interact with and cross-promote each other.

Using our own implementation as an example:


  • A user is running myRMX, which is our music remixing app.
  • At any given screen, the user can bring up a context-sensitive 'cooperation' icon-based menu. (For our app, this would be done by change the device from portrait to landscape, and the menu would appear something like the dock on a Mac - but apps could do their menu however they see fit.)
  • The menu contains icons for installed applications that myRMX, in it's current state, is capable of interacting with to enhance functionality.
  • The menu also contains '?' icons for apps myRMX could interact with if they were installed.
  • When a user scrolls to an icon, the name of the app is displayed along with the functionality it adds.
  • If the user selects the interaction and the app is not installed (? icon), the OVI page for the app is brought up in the browser.
  • If the app is installed, the app is launched for the function (probably using the clipboard for passing function and data)
  • Each publisher implementing the system would provide information in a common place (wiki) for their API implementation.


For Example:

In myRMX, I bring up the cooperation menu and see the icon for Gravity. (Previously during initialization, myRMX checked which compatible applications were installed.) When I scroll to the icon, it tells me I can send my myRMX remix via twitter. If I click on the icon again, myRMX sets up the information to pass to Gravity according to Gravity's published API implementation and uses the API to launch Gravity. Gravity takes the information and processes it according to it's published functions.

If Gravity was not installed, I would only see the name with a '?' icon. When I scroll to it, it tells me what it does inside myRMX, and if I click on it, the Gravity page on OVI is opened.


The API/class would provide functionality for checking if an app is installed, providing its icon, the inter-process communication, and launching the app.

We would propose that the clipboard is used for IPC, as this feature is compatible with other devices such as the iPhone, Java, Android's (special Java :P ), and the N900.

A published API might look something like these:

Code:
=====================================================

Application Name:  Gravity
Version: 1.0
Symbian UID:  0xE1234567

Available Functions:

   Send Tweet 1
   Description:  Preload the tweet text for Gravity to send.  Messages are truncated to 140 characters.
   IPC Payload format:  0x0001={message}
   
   ...more functions...

=====Different Page=============================

Application Name:  Nokia Maps
Version: All
Symbian UID: 0x12345678, 0x12345679, 0x1234567A

Available Functions:

   Show Location by GPS:
   Description:  Show a location on a map based on GPS coordinates
   IPC Payload Foramt:  showLocationByGPS=AA:AA:AA,BB:BB:BB,CC:CC:CC,D
              Where A=latitude, B=longitude, C=elevation, D=label

   Show Path to Location
   Description: Show path from current location to provided GPS coordinates
   IPC Payload Foramt:  showPathToByGPS=AA:AA:AA,BB:BB:BB,CC:CC:CC,D
              Where A=latitude, B=longitude, C=elevation, D=label

   ...etc...

==================================
A program using the service to send would use the common API something like this:


  • isAppInstalled(uint UID); (during initialization)
  • getAppIcon(uint UID); (to show menu)
  • setIPCPayload(string Payload); (to send message, according to app's published message)
  • launchApp(uint UID);



A program which supports the common API would do something like this:


  • wasSentPayload(string *payload); (at launch)
  • !payload = launch normal, payload = process payload



Any publishers and/or Nokia interested in creating this framework together, and want to discuss how best to create it?


-Pat