Bondi logo

BONDI WebIDL v1.1

9 February 2010

WebIDL
module appconfig {
    interface AppConfigManager {
        DOMString get (in DOMString key)
            raises (SecurityError);
        void set (in DOMString key,
                in DOMString value)
            raises (SecurityError);
    };
    interface AppConfigManagerObject {
        readonly attribute AppConfigManager appconfig;
    };
    Bondi implements AppConfigManagerObject;
};

module applauncher {
    [Callback=FunctionOnly, NoInterfaceObject] interface AppLauncherSuccessCallback {
        void onSuccess (in StringArray obj);
    };
    interface AppLauncherManager {
        PendingOperation launchApplication (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in DOMString appURI,
                [Optional] in StringArray params);
        PendingOperation getInstalledApplications (in AppLauncherSuccessCallback successCallback,
                in ErrorCallback errorCallback);
        DOMString getDefaultApplication (in DOMString mimeType)
            raises (DeviceAPIError);
    };
    interface AppLauncherManagerObject {
        readonly attribute AppLauncherManager applauncher;
    };
    Bondi implements AppLauncherManagerObject;
};

module camera {
    typedef sequence<Camera> CameraArray;
    typedef sequence<CameraFeature> CameraFeatureArray;
    typedef sequence<FeatureValue> FeatureValueArray;
    [Callback=FunctionOnly, NoInterfaceObject] interface CameraSuccessCallback {
        void onSuccess (in DOMString file);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface CamerasRetrievedSuccessCallback {
        void onSuccess (in CameraArray cameras);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface CameraLiveVideoSuccessCallback {
        void onSuccess (in DOMString identifier);
    };
    interface CameraError : GenericError {
        const unsigned short CAMERA_ALREADY_IN_USE_ERROR = 0;
        const unsigned short CAMERA_CAPTURE_ERROR = 1;
        const unsigned short CAMERA_LIVEVIDEO_ERROR = 2;
    };
    interface CameraManager {
        PendingOperation getCameras (in CamerasRetrievedSuccessCallback successCallback,
                in ErrorCallback errorCallback);
    };
    interface CaptureOptions {
        attribute unsigned short width;
        attribute unsigned short height;
        attribute float frameRate;
        attribute DOMString mimeType;
        attribute boolean audio;
        attribute unsigned long maximumBitrate;
    };
    interface FeatureValue {
        attribute float value;
        attribute DOMString description;
    };
    interface CameraFeature {
        const unsigned short FEATURETYPE_INTERVAL = 0;
        const unsigned short FEATURETYPE_BINARY = 1;
        const unsigned short FEATURETYPE_ENUMERATION = 2;
        attribute DOMString description;
        attribute long id;
        attribute short type;
        attribute FeatureValue value;
        attribute FeatureValue default;
        attribute FeatureValueArray possibleValues;
    };
    interface Camera {
        const unsigned short ZOOM = 0;
        const unsigned short ZOOM_NOZOOM = 1;
        const unsigned short CONTRAST = 2;
        const unsigned short BRIGHTNESS = 3;
        const unsigned short COLORTEMPERATURE = 4;
        const unsigned short NIGHTMODE = 5;
        const unsigned short NIGHTMODE_OFF = 0;
        const unsigned short NIGHTMODE_ON = 1;
        const unsigned short MANUALFOCUS = 6;
        const unsigned short MANUALFOCUS_ON = 1;
        const unsigned short MANUALFOCUS_OFF = 0;
        const unsigned short FOCUS = 7;
        const unsigned short LIGHT = 8;
        const unsigned short FLASH = 9;
        const unsigned short FLASH_NO_FLASH = 0;
        const unsigned short FLASH_AUTO_FLASH = 1;
        const unsigned short FLASH_FORCED_FLASH = 2;
        readonly attribute DOMString description;
        CameraFeatureArray getSupportedFeatures ();
        void setFeature (in unsigned short featureID,
                in float value)
            raises (DeviceAPIError);
        PendingOperation requestLiveVideo (in CameraLiveVideoSuccessCallback successCallback,
                in ErrorCallback errorCallback);
        PendingOperation takePicture (in CameraSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                [Optional] in CaptureOptions options);
        PendingOperation beginRecording (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in CameraSuccessCallback capturedCallback,
                [Optional] in CaptureOptions options);
        PendingOperation endRecording (in CameraSuccessCallback successCallback,
                in ErrorCallback errorCallback);
    };
    interface CameraManagerObject {
        readonly attribute CameraManager camera;
    };
    Bondi implements CameraManagerObject;
};

module bondi {
    typedef sequence<DOMString> StringArray;
    typedef sequence<DOMString> FeatureArray;
    typedef sequence<octet> ByteArray;
    typedef sequence<short> ShortArray;
    typedef sequence<long> LongArray;
    typedef sequence<float> FloatArray;
    typedef Object Map;
    [Callback=FunctionOnly, NoInterfaceObject] interface SuccessCallback {
        void onSuccess ();
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface RequestFeatureSuccessCallback {
        void onSuccess (in Object ob);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface ErrorCallback {
        void onError (in GenericError error);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface FeatureCallback {
        void onFeatureLoaded (in FeatureArray loadedFeatures);
    };
    interface GenericError {
        readonly attribute unsigned short code;
    };
    interface DeviceAPIError : GenericError {
        const unsigned short UNKNOWN_ERROR = 10000;
        const unsigned short INVALID_ARGUMENT_ERROR = 10001;
        const unsigned short NOT_FOUND_ERROR = 10002;
        const unsigned short PENDING_OPERATION_ERROR = 10003;
        const unsigned short IO_ERROR = 10004;
        const unsigned short NOT_SUPPORTED_ERROR = 10005;
    };
    interface SecurityError : GenericError {
        const unsigned short PERMISSION_DENIED_ERROR = 20000;
    };
    interface PendingOperation {
        boolean cancel ();
        void wait ();
    };
    interface GenericFilter {
    };
    interface Bondi {
        PendingOperation requestFeature (in RequestFeatureSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in DOMString name);
        FeatureArray getFeatures ();
        long watchFeatures (in FeatureCallback callback);
        void clearWatch (in long watch);
    };
    interface BondiObject {
        readonly attribute Bondi bondi;
    };
    Window implements BondiObject;
};

module devicestatus {
    [Callback=FunctionOnly, NoInterfaceObject] interface PropertyChangeSuccessCallback {
        void onPropertyChange (in PropertyRef property,
                in Object newValue);
    };
    interface DeviceStatusManager {
        StringArray listVocabularies ();
        void setDefaultVocabulary (in DOMString vocabulary)
            raises (DeviceAPIError);
        StringArray listAspects ();
        StringArray getComponents (in AspectName aspect)
            raises (DeviceAPIError);
        StringArray listProperties (in AspectName aspect)
            raises (DeviceAPIError);
        Object getPropertyValue (in PropertyRef prop)
            raises (SecurityError, DeviceAPIError);
        unsigned long watchPropertyChange (in PropertyRef pref,
                in PropertyChangeSuccessCallback listener,
                in Map options)
            raises (SecurityError, DeviceAPIError);
        void clearPropertyChange (in unsigned long watchHandler)
            raises (DeviceAPIError);
    };
    interface AspectName {
        attribute DOMString aspect;
        attribute DOMString vocabulary;
    };
    interface PropertyRef {
        attribute DOMString vocabulary;
        attribute DOMString component;
        attribute DOMString aspect;
        attribute DOMString property;
    };
    interface DeviceStatusManagerObject {
        readonly attribute DeviceStatusManager devicestatus;
    };
    Bondi implements DeviceStatusManagerObject;
};

module filesystem {
    typedef sequence<File> FileArray;
    [Callback=FunctionOnly, NoInterfaceObject] interface FileSystemSuccessCallback {
        void onSuccess (in File file);
    };
    interface FileSystemManager {
        readonly attribute unsigned long maxPathLength;
        DOMString getDefaultLocation (in DOMString specifier,
                in unsigned long minFreeSpace)
            raises (DeviceAPIError);
        StringArray getRootLocations ();
        PendingOperation resolve (in FileSystemSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in DOMString location,
                [Optional] in DOMString mode);
        void registerEventListener (in FileSystemListener listener)
            raises (DeviceAPIError);
        void unregisterEventListener (in FileSystemListener listener)
            raises (DeviceAPIError);
    };
    interface FileSystemListener {
        void mountEvent (in DOMString location);
        void unmountEvent (in DOMString location);
    };
    interface File {
        readonly attribute File parent;
        readonly attribute boolean readOnly;
        readonly attribute boolean isFile;
        readonly attribute boolean isDirectory;
        readonly attribute Date created;
        readonly attribute Date modified;
        readonly attribute DOMString path;
        readonly attribute DOMString name;
        readonly attribute DOMString absolutePath;
        readonly attribute unsigned long fileSize;
        readonly attribute Map metadata;
        FileArray listFiles ()
            raises (SecurityError, DeviceAPIError);
        FileStream open (in DOMString mode,
                in DOMString encoding)
            raises (SecurityError, DeviceAPIError);
        PendingOperation copyTo (in FileSystemSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in DOMString filePath,
                in boolean overwrite);
        PendingOperation moveTo (in FileSystemSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in DOMString filePath,
                in boolean overwrite);
        File createDirectory (in DOMString dirPath)
            raises (SecurityError, DeviceAPIError);
        File createFile (in DOMString filePath)
            raises (SecurityError, DeviceAPIError);
        File resolve (in DOMString filePath)
            raises (SecurityError, DeviceAPIError);
        PendingOperation deleteDirectory (in FileSystemSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in boolean recursive);
        boolean deleteFile ()
            raises (SecurityError, DeviceAPIError);
    };
    interface FileStream {
        readonly attribute boolean eof;
        attribute unsigned long position
            setraises (DeviceAPIError);
        readonly attribute unsigned long bytesAvailable;
        void close ();
        DOMString read (in unsigned long charCount)
            raises (DeviceAPIError);
        ByteArray readBytes (in unsigned long byteCount)
            raises (DeviceAPIError);
        DOMString readBase64 (in unsigned long byteCount)
            raises (DeviceAPIError);
        void write (in DOMString stringData)
            raises (DeviceAPIError);
        void writeBytes (in ByteArray byteData)
            raises (DeviceAPIError);
        void writeBase64 (in DOMString base64Data)
            raises (DeviceAPIError);
    };
    interface FileSystemManagerObject {
        readonly attribute FileSystemManager filesystem;
    };
    Bondi implements FileSystemManagerObject;
};

module geolocation {
    [Callback=FunctionOnly, NoInterfaceObject] interface PositionSuccessCallback {
        void handleEvent (in Position position);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface PositionErrorCallback {
        void handleEvent (in PositionError error);
    };
    interface Geolocation {
        void getCurrentPosition (in PositionSuccessCallback successCallback,
                [Optional] in PositionErrorCallback errorCallback,
                [Optional] in PositionOptions options)
            raises (SecurityError, DeviceAPIError);
        long watchPosition (in PositionSuccessCallback successCallback,
                [Optional] in PositionErrorCallback errorCallback,
                [Optional] in PositionOptions options)
            raises (SecurityError, DeviceAPIError);
        void clearWatch (in long id);
    };
    interface Coordinates {
        readonly attribute double latitude;
        readonly attribute double longitude;
        readonly attribute double altitude;
        readonly attribute double accuracy;
        readonly attribute double altitudeAccuracy;
        readonly attribute double heading;
        readonly attribute double speed;
    };
    interface Position {
        readonly attribute long timestamp;
        readonly attribute Coordinates coords;
    };
    interface PositionError {
        const unsigned short PERMISSION_DENIED = 1;
        const unsigned short POSITION_UNAVAILABLE = 2;
        const unsigned short TIMEOUT = 3;
        readonly attribute unsigned short code;
        readonly attribute DOMString message;
    };
    [Callback, NoInterfaceObject] interface PositionOptions {
        attribute long timeout;
        attribute long maximumAge;
        attribute boolean enableHighAccuracy;
    };
    interface GeolocationObject {
        readonly attribute Geolocation geolocation;
    };
    Bondi implements GeolocationObject;
};

module messaging {
    typedef sequence<SMS> SMSArray;
    typedef sequence<MMS> MMSArray;
    typedef sequence<Email> EmailArray;
    typedef sequence<MMSSlide> MMSSlideArray;
    [Callback=FunctionOnly, NoInterfaceObject] interface FindSMSsSuccessCallback {
        void onSuccess (in SMSArray obj);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface FindMMSsSuccessCallback {
        void onSuccess (in MMSArray obj);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface FindEmailsSuccessCallback {
        void onSuccess (in EmailArray obj);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface EmailAccountsSuccessCallback {
        void onSuccess (in StringArray obj);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface SubscriptionSuccessCallback {
        void onSuccess (in unsigned long subscriptionID);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface OnIncomingSMS {
        void onEvent (in SMS message);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface OnIncomingBinarySMS {
        void onEvent (in BinarySMS message);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface OnIncomingMMS {
        void onEvent (in MMS message);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface OnIncomingEmail {
        void onEvent (in Email message);
    };
    interface MessagingError : GenericError {
        const unsigned short OUT_OF_COVERAGE_ERROR = 1;
        const unsigned short MMS_VIDEO_SLIDE_ERROR = 2;
        const unsigned short MMS_MESSAGE_SIZE_EXCEEDED_ERROR = 3;
    };
    interface MessagingManager {
        const unsigned short INBOX_FOLDER = 0;
        const unsigned short SENT_FOLDER = 1;
        const unsigned short OUTBOX_FOLDER = 2;
        const unsigned short DRAFTS_FOLDER = 3;
        SMS createSMS ([Optional] in SMSProperties options)
            raises (DeviceAPIError);
        MMS createMMS ([Optional] in MMSProperties options)
            raises (DeviceAPIError);
        Email createEmail ([Optional] in EmailProperties options)
            raises (DeviceAPIError);
        BinarySMS createBinarySMS ([Optional] in BinarySMSProperties options)
            raises (DeviceAPIError);
        PendingOperation updateSMS (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in SMS sms);
        PendingOperation updateMMS (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in MMS mms);
        PendingOperation updateEmail (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Email email);
        PendingOperation sendSMS (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in SMS sms,
                [Optional] in boolean store);
        PendingOperation sendMMS (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in MMS mms,
                [Optional] in boolean store);
        PendingOperation sendEmail (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Email email,
                [Optional] in boolean store);
        PendingOperation sendBinarySMS (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in BinarySMS binary);
        PendingOperation findSMSs (in FindSMSsSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in ShortArray messageFolders,
                [Optional] in SMSFilter filter);
        PendingOperation findMMSs (in FindMMSsSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in ShortArray messageFolders,
                [Optional] in MMSFilter filter);
        PendingOperation findEmails (in FindEmailsSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in ShortArray messageFolders,
                [Optional] in EmailFilter filter);
        unsigned long getNumberOfSMSs (in ShortArray messageFolders,
                [Optional] in boolean unread)
            raises (DeviceAPIError);
        unsigned long getNumberOfMMSs (in ShortArray messageFolders,
                [Optional] in boolean unread)
            raises (DeviceAPIError);
        unsigned long getNumberOfEmails (in ShortArray messageFolders,
                [Optional] in boolean unread)
            raises (DeviceAPIError);
        PendingOperation deleteSMS (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in DOMString messageID,
                in unsigned short folder);
        PendingOperation deleteMMS (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in DOMString messageID,
                in unsigned short folder);
        PendingOperation deleteEmail (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in DOMString messageID,
                in unsigned short folder);
        PendingOperation getAvailableEmailAccounts (in EmailAccountsSuccessCallback successCallback,
                in ErrorCallback errorCallback);
        PendingOperation subscribeToSMS (in SubscriptionSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in OnIncomingSMS listener,
                in SMSFilter filter,
                in boolean exclusive);
        void unsubscribeFromSMS (in unsigned long subscriptionID)
            raises (SecurityError, DeviceAPIError);
        PendingOperation subscribeToBinarySMS (in SubscriptionSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in OnIncomingBinarySMS listener,
                in BinarySMSFilter filter,
                in boolean exclusive);
        void unsubscribeFromBinarySMS (in unsigned long subscriptionID)
            raises (DeviceAPIError);
        PendingOperation subscribeToMMS (in SubscriptionSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in OnIncomingMMS listener,
                in MMSFilter filter,
                in boolean exclusive);
        void unsubscribeFromMMS (in unsigned long subscriptionID)
            raises (DeviceAPIError);
        PendingOperation subscribeToEmail (in SubscriptionSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in OnIncomingEmail listener,
                in EmailFilter filter,
                in boolean exclusive);
        void unsubscribeFromEmail (in unsigned long subscriptionID)
            raises (DeviceAPIError);
    };
    interface SMS : SMSProperties {
        readonly attribute DOMString id;
    };
    interface MMSSlide {
        attribute unsigned long duration;
        attribute DOMString image
            setraises (MessagingError);
        attribute unsigned long imageBegin;
        attribute unsigned long imageEnd;
        attribute DOMString audio
            setraises (MessagingError);
        attribute unsigned long audioBegin;
        attribute unsigned long audioEnd;
        attribute DOMString text
            setraises (MessagingError);
        attribute unsigned long textBegin;
        attribute unsigned long textEnd;
        attribute DOMString video;
        attribute unsigned long videoBegin;
        attribute unsigned long videoEnd;
    };
    interface MMS : MMSProperties {
        const unsigned short MULTIPART_MIXED = 0;
        const unsigned short MULTIPART_RELATED = 1;
        readonly attribute DOMString id;
        attribute unsigned short messageType;
        attribute MMSSlideArray slides;
    };
    interface Email : EmailProperties {
        readonly attribute DOMString id;
    };
    [Callback, NoInterfaceObject] interface SMSProperties {
        attribute StringArray to;
        readonly attribute DOMString from;
        readonly attribute Date datetime;
        attribute DOMString body;
        readonly attribute unsigned short folder;
        readonly attribute boolean read;
    };
    [NoInterfaceObject] interface SMSFilter : GenericFilter {
    };
    [Callback, NoInterfaceObject] interface MMSProperties {
        attribute StringArray to;
        attribute StringArray cc;
        attribute StringArray bcc;
        readonly attribute DOMString from;
        attribute DOMString subject;
        attribute StringArray attachments;
        readonly attribute Date datetime;
        attribute DOMString body;
        readonly attribute unsigned long folder;
        readonly attribute boolean read;
    };
    [NoInterfaceObject] interface MMSFilter : GenericFilter {
    };
    [Callback, NoInterfaceObject] interface EmailProperties {
        attribute StringArray to;
        attribute StringArray cc;
        attribute StringArray bcc;
        readonly attribute DOMString from;
        attribute DOMString subject;
        attribute StringArray attachments;
        readonly attribute Date datetime;
        attribute DOMString body;
        readonly attribute unsigned long folder;
        readonly attribute boolean read;
    };
    [NoInterfaceObject] interface EmailFilter : GenericFilter {
    };
    [Callback, NoInterfaceObject] interface BinarySMSProperties {
        attribute DOMString to;
        attribute ByteArray payload;
        readonly attribute unsigned short port;
    };
    interface BinarySMS : BinarySMSProperties {
        readonly attribute DOMString id;
    };
    [NoInterfaceObject] interface BinarySMSFilter : GenericFilter {
    };
    interface MessagingManagerObject {
        readonly attribute MessagingManager messaging;
    };
    Bondi implements MessagingManagerObject;
};

module gallery {
    typedef sequence<Gallery> GalleryArray;
    typedef sequence<MediaItem> MediaItemArray;
    interface GalleryError : GenericError {
        const unsigned short GALLERY_OPEN_ERROR = 1;
        const unsigned short GALLERY_NOT_OPEN_ERROR = 2;
    };
    interface GalleryManager {
        GalleryArray getGalleries ();
    };
    interface Gallery {
        const unsigned short MEDIA_SORT_NONE = 0;
        const unsigned short MEDIA_SORT_BY_FILENAME = 1;
        const unsigned short MEDIA_SORT_BY_FILEDATE = 2;
        const unsigned short MEDIA_SORT_BY_TYPE = 3;
        const unsigned short MEDIA_SORT_BY_TITLE = 20;
        const unsigned short MEDIA_SORT_BY_AUTHOR = 21;
        const unsigned short MEDIA_SORT_BY_ALBUM = 22;
        const unsigned short MEDIA_SORT_BY_DATE = 23;
        const unsigned short MEDIA_SORT_ASCENDING = 0;
        const unsigned short MEDIA_SORT_DESCENDING = 1;
        readonly attribute Map info;
        unsigned long getNumberOfMediaItems ()
            raises (SecurityError, GalleryError);
        PendingOperation open (in SuccessCallback successCallback,
                in ErrorCallback errorCallback);
        PendingOperation refresh (in SuccessCallback successCallback,
                in ErrorCallback errorCallback);
        void close ()
            raises (DeviceAPIError, GalleryError);
        PendingOperation changeView (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in ViewFilter viewOptions);
        MediaItemArray getMediaItems ()
            raises (SecurityError, DeviceAPIError, GalleryError);
        MediaItem getMediaItemById (in unsigned long itemId)
            raises (SecurityError, DeviceAPIError, GalleryError);
    };
    interface MediaItem {
        const unsigned short MEDIA_ITEM_TYPE_UNDEFINED = 0;
        const unsigned short MEDIA_ITEM_TYPE_AUDIO = 1;
        const unsigned short MEDIA_ITEM_TYPE_VIDEO = 2;
        const unsigned short MEDIA_ITEM_TYPE_IMAGE = 3;
        readonly attribute unsigned long id;
        readonly attribute long type;
        readonly attribute DOMString mimeType;
        readonly attribute DOMString fileName;
        readonly attribute Map metadata;
    };
    [Callback, NoInterfaceObject] interface ViewFilter {
        attribute short order;
        attribute short primarySortOrder;
        attribute short secondarySortOrder;
        attribute Date startDate;
        attribute Date endDate;
        attribute DOMString metaTag;
    };
    interface GalleryManagerObject {
        readonly attribute GalleryManager gallery;
    };
    Bondi implements GalleryManagerObject;
};

module contact {
    typedef sequence<AddressBook> AddressBookArray;
    typedef sequence<Contact> ContactArray;
    typedef sequence<PhoneNumber> PhoneNumberArray;
    typedef sequence<EmailAddress> EmailAddressArray;
    typedef sequence<ContactAddress> ContactAddressArray;
    [Callback=FunctionOnly, NoInterfaceObject] interface ContactArraySuccessCallback {
        void onSuccess (in ContactArray contacts);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface AddressBookArraySuccessCallback {
        void onSuccess (in AddressBookArray addressbooks);
    };
    [NoInterfaceObject] interface ContactManager {
        PendingOperation getAddressBooks (in AddressBookArraySuccessCallback successCallback,
                in ErrorCallback errorCallback);
    };
    [NoInterfaceObject] interface AddressBook {
        const unsigned short SIM_ADDRESS_BOOK = 0;
        const unsigned short DEVICE_ADDRESS_BOOK = 1;
        readonly attribute unsigned short type;
        readonly attribute DOMString name;
        Contact createContact ([Optional] in ContactProperties options)
            raises (DeviceAPIError);
        PendingOperation addContact (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Contact contact);
        PendingOperation updateContact (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Contact contact);
        PendingOperation deleteContact (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Contact contact);
        PendingOperation findContacts (in ContactArraySuccessCallback successCallback,
                in ErrorCallback errorCallback,
                [Optional] in ContactFilter filter);
    };
    [NoInterfaceObject] interface Contact : ContactProperties {
        readonly attribute DOMString id;
    };
    [NoInterfaceObject] interface ContactProperties {
        attribute DOMString name;
        attribute StringArray nicknames;
        attribute ContactAddressArray addresses;
        attribute DOMString photoURI;
        attribute PhoneNumberArray phoneNumbers;
        attribute EmailAddressArray emails;
    };
    [NoInterfaceObject] interface Address {
        attribute DOMString country;
        attribute DOMString region;
        attribute DOMString county;
        attribute DOMString city;
        attribute DOMString street;
        attribute DOMString streetNumber;
        attribute DOMString premises;
        attribute DOMString additionalInformation;
        attribute DOMString postalCode;
    };
    [NoInterfaceObject] interface PhoneNumber {
        attribute DOMString number;
        attribute StringArray types;
    };
    [NoInterfaceObject] interface EmailAddress {
        attribute DOMString email;
        attribute StringArray types;
    };
    [NoInterfaceObject] interface ContactAddress : Address {
        attribute StringArray types;
    };
    [NoInterfaceObject] interface ContactFilter : GenericFilter {
    };
    interface ContactManagerObject {
        readonly attribute ContactManager contact;
    };
};

module task {
    typedef sequence<TaskList> TaskListArray;
    typedef sequence<Task> TaskArray;
    [Callback=FunctionOnly, NoInterfaceObject] interface TaskArraySuccessCallback {
        void onSuccess (in TaskArray tasks);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface TaskListArraySuccessCallback {
        void onSuccess (in TaskListArray taskLists);
    };
    [NoInterfaceObject] interface TaskManager {
        PendingOperation getTaskLists (in TaskListArraySuccessCallback successCallback,
                in ErrorCallback errorCallback);
    };
    [NoInterfaceObject] interface TaskList {
        const unsigned short SIM_TASK_LIST = 0;
        const unsigned short DEVICE_TASK_LIST = 1;
        readonly attribute unsigned short type;
        readonly attribute DOMString name;
        Task createTask ([Optional] in TaskProperties options)
            raises (DeviceAPIError);
        PendingOperation addTask (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Task task);
        PendingOperation updateTask (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Task task);
        PendingOperation deleteTask (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Task task);
        PendingOperation findTasks (in TaskArraySuccessCallback successCallback,
                in ErrorCallback errorCallback,
                [Optional] in TaskFilter filter);
    };
    [NoInterfaceObject] interface Task : TaskProperties {
        readonly attribute DOMString id;
    };
    [NoInterfaceObject] interface TaskProperties {
        const unsigned short HIGH_PRIORITY = 0;
        const unsigned short MEDIUM_PRIORITY = 1;
        const unsigned short LOW_PRIORITY = 2;
        const unsigned short STATUS_DONE = 0;
        const unsigned short STATUS_PENDING = 1;
        const unsigned short STATUS_ONGOING = 2;
        attribute unsigned short priority;
        attribute DOMString note;
        attribute DOMString summary;
        attribute Date dueDate;
        attribute unsigned short status;
    };
    [NoInterfaceObject] interface TaskFilter : GenericFilter {
    };
    interface TaskManagerObject {
        readonly attribute TaskManager task;
    };
};

module calendar {
    typedef sequence<Event> EventsArray;
    typedef sequence<Calendar> CalendarArray;
    [Callback=FunctionOnly, NoInterfaceObject] interface EventsArraySuccessCallback {
        void onSuccess (in EventsArray obj);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface CalendarArraySuccessCallback {
        void onSuccess (in CalendarArray obj);
    };
    [NoInterfaceObject] interface CalendarManager {
        PendingOperation getCalendars (in CalendarArraySuccessCallback successCallback,
                in ErrorCallback errorCallback);
    };
    [NoInterfaceObject] interface Calendar {
        const unsigned short SIM_CALENDAR = 0;
        const unsigned short DEVICE_CALENDAR = 1;
        readonly attribute unsigned short type;
        readonly attribute DOMString name;
        Event createEvent ([Optional] in EventProperties options)
            raises (DeviceAPIError);
        PendingOperation addEvent (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Event event);
        PendingOperation updateEvent (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Event event);
        PendingOperation deleteEvent (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in Event event);
        PendingOperation findEvents (in EventsArraySuccessCallback successCallback,
                in ErrorCallback errorCallback,
                [Optional] in EventFilter filter);
    };
    [NoInterfaceObject] interface Event : EventProperties {
        readonly attribute DOMString id;
    };
    [NoInterfaceObject] interface EventProperties {
        const unsigned short NO_RECURRENCE = 0;
        const unsigned short DAILY_RECURRENCE = 1;
        const unsigned short WEEKLY_RECURRENCE = 2;
        const unsigned short MONTHLY_RECURRENCE = 3;
        const unsigned short YEARLY_RECURRENCE = 4;
        const unsigned short TENTATIVE_STATUS = 0;
        const unsigned short CONFIRMED_STATUS = 1;
        const unsigned short CANCELLED_STATUS = 2;
        const unsigned short NO_ALARM = 0;
        const unsigned short SILENT_ALARM = 1;
        const unsigned short SOUND_ALARM = 2;
        attribute DOMString description;
        attribute DOMString summary;
        attribute Date startTime;
        attribute Date endTime;
        attribute DOMString location;
        attribute unsigned short recurrence;
        attribute DOMString status;
        attribute Date alarmDate;
        attribute unsigned long alarmType;
    };
    [NoInterfaceObject] interface EventFilter : GenericFilter {
    };
    interface CalendarManagerObject {
        readonly attribute CalendarManager calendar;
    };
};

module ui {
    typedef sequence<MenuItem> Menu;
    [Callback=FunctionOnly, NoInterfaceObject] interface WidgetActivateCallback {
        void onActivate ();
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface WidgetDeactivateCallback {
        void onDeactivate ();
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface WidgetKeyPressCallback {
        void onKeyPress (in unsigned short keyCode);
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface WidgetOrientationChangeCallback {
        void onOrientationChange ();
    };
    [Callback=FunctionOnly, NoInterfaceObject] interface WidgetMenuSelectCallback {
        void onSelect ();
    };
    interface UIManager {
        const unsigned short LEFT_SOFT_KEY = 0;
        const unsigned short RIGHT_SOFT_KEY = 1;
        const unsigned short NAVIGATION_CURSOR = 0;
        const unsigned short NAVIGATION_TABBED = 1;
        const unsigned short INFINITE_DURATION = 0;
        const unsigned short ORIENTATION_0 = 0;
        const unsigned short ORIENTATION_90 = 90;
        const unsigned short ORIENTATION_180 = 180;
        const unsigned short ORIENTATION_270 = 270;
        readonly attribute Preferences preferences;
        attribute boolean isActive
            setraises (DeviceAPIError);
        attribute unsigned short navigationMode
            setraises (DeviceAPIError);
        readonly attribute boolean isRotationSupported;
        attribute unsigned short displayOrientation;
        attribute boolean softKeysVisible
            setraises (DeviceAPIError);
        attribute boolean statusBarVisible
            setraises (DeviceAPIError);
        MenuItem getSoftKey (in unsigned short id)
            raises (DeviceAPIError);
        void setOnActivate (in WidgetActivateCallback handler)
            raises (DeviceAPIError);
        void setOnDeactivate (in WidgetDeactivateCallback handler)
            raises (DeviceAPIError);
        void setOnKeyPress (in WidgetKeyPressCallback handler)
            raises (DeviceAPIError);
        void beep (in unsigned long duration,
                in unsigned short frequency);
        void startVibrate (in unsigned long duration,
                in unsigned short intensity);
        void stopVibrate ();
        void setOnOrientationChange (in WidgetOrientationChangeCallback handler)
            raises (DeviceAPIError);
        void lightOn (in unsigned long duration,
                in unsigned short intensity,
                in boolean fadeIn);
        void lightOff (in boolean fadeOut);
        Preferences getPreferences ();
    };
    interface MenuItem {
        readonly attribute unsigned long id;
        attribute DOMString text;
        readonly attribute Menu menuItems;
        void setOnMenuSelect (in WidgetMenuSelectCallback handler)
            raises (DeviceAPIError);
        MenuItem getMenuItemById (in unsigned long id);
        MenuItem appendMenuItem (in unsigned long id,
                in DOMString text,
                in WidgetMenuSelectCallback onSelect)
            raises (DeviceAPIError);
        void removeMenuItem (in unsigned long id)
            raises (DeviceAPIError);
        void removeAllMenuItems ();
    };
    interface Preferences {
        attribute unsigned long callRingtoneVolume;
        attribute unsigned long messageRingtoneVolume;
        attribute boolean isVibrationActive;
        void setWallpaper (in DOMString wallpaper)
            raises (DeviceAPIError);
        void setCallRingtone (in DOMString ringtone)
            raises (DeviceAPIError);
        void setMessageRingtone (in DOMString ringtone)
            raises (DeviceAPIError);
    };
    interface UIManagerObject {
        readonly attribute UIManager ui;
    };
    Bondi implements UIManagerObject;
};

module pim {
    interface Pim {
    };
    interface PimObject {
        readonly attribute Pim pim;
    };
    Pim implements ContactManagerObject;
    Pim implements CalendarManagerObject;
    Pim implements TaskManagerObject;
    Bondi implements PimObject;
};

module telephony {
    typedef sequence<LogEntry> LogEntries;
    [Callback=FunctionOnly, NoInterfaceObject] interface LogManagerSuccessCallback {
        void onSuccess (in LogEntries obj);
    };
    interface LogManager {
        const unsigned short MISSED_CALLS_FOLDER = 0;
        const unsigned short RECEIVED_CALLS_FOLDER = 1;
        const unsigned short INITIATED_CALLS_FOLDER = 2;
        PendingOperation findLogEntries (in LogManagerSuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in ShortArray callFolder,
                [Optional] in LogFilter filter);
        unsigned long getNumberOfCalls (in ShortArray callFolders)
            raises (DeviceAPIError);
        PendingOperation deleteLogEntry (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in DOMString callID,
                in unsigned short folder);
        PendingOperation clearLog (in SuccessCallback successCallback,
                in ErrorCallback errorCallback,
                in unsigned short callFolder);
    };
    [NoInterfaceObject] interface LogEntry {
        readonly attribute DOMString phoneNumber;
        readonly attribute Date startTime;
        readonly attribute unsigned long duration;
        readonly attribute DOMString id;
        readonly attribute unsigned short folder;
    };
    [Callback, NoInterfaceObject] interface LogFilter : GenericFilter {
    };
    interface LogManagerObject {
        readonly attribute LogManager telephonyLog;
    };
    Bondi implements LogManagerObject;
};