/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ /** * Contains information about a single contact. * @param {DOMString} id unique identifier * @param {DOMString} displayName * @param {ContactName} name * @param {DOMString} nickname * @param {ContactField[]} phoneNumbers array of phone numbers * @param {ContactField[]} emails array of email addresses * @param {ContactAddress[]} addresses array of addresses * @param {ContactField[]} ims instant messaging user ids * @param {ContactOrganization[]} organizations * @param {DOMString} revision date contact was last updated * @param {DOMString} birthday contact's birthday * @param {DOMString} gender contact's gender * @param {DOMString} note user notes about contact * @param {ContactField[]} photos * @param {ContactField[]} urls contact's web sites * @param {DOMString} timezone UTC time zone offset */ var Contact = function(id, displayName, name, nickname, phoneNumbers, emails, addresses, ims, organizations, revision, birthday, gender, note, photos, categories, urls, timezone) { this.id = id || null; this.displayName = displayName || null; this.name = name || null; // ContactName this.nickname = nickname || null; this.phoneNumbers = phoneNumbers || null; // ContactField[] this.emails = emails || null; // ContactField[] this.addresses = addresses || null; // ContactAddress[] this.ims = ims || null; // ContactField[] this.organizations = organizations || null; // ContactOrganization[] this.revision = revision || null; // JS Date this.birthday = birthday || null; // JS Date this.gender = gender || null; this.note = note || null; this.photos = photos || null; // ContactField[] this.categories = categories || null; this.urls = urls || null; // ContactField[] this.timezone = timezone || null; }; /** * Removes contact from device storage. * @param successCB success callback * @param errorCB error callback (optional) */ Contact.prototype.remove = function(successCB, errorCB) { if (this.id == null) { var errorObj = new ContactError(); errorObj.code = ContactError.NOT_FOUND_ERROR; errorCB(errorObj); } else { Cordova.exec(successCB, errorCB, "org.apache.cordova.Contacts", "remove", [this.id]); } }; /** * Bada ONLY * displays contact via Bada Contact UI * * @param errorCB error callback */ Contact.prototype.display = function(successCB, errorCB, options) { if (this.id == null) { var errorObj = new ContactError(); errorObj.code = ContactError.NOT_FOUND_ERROR; errorCB(errorObj); } else { Cordova.exec(successCB, errorCB, "org.apache.cordova.Contacts","displayContact", [this.id, options]); } }; /** * Creates a deep copy of this Contact. * With the contact ID set to null. * @return copy of this Contact */ Contact.prototype.clone = function() { var clonedContact = Cordova.clone(this); clonedContact.id = null; // Loop through and clear out any id's in phones, emails, etc. if (clonedContact.phoneNumbers) { for (i=0; i<clonedContact.phoneNumbers.length; i++) { clonedContact.phoneNumbers[i].id = null; } } if (clonedContact.emails) { for (i=0; i<clonedContact.emails.length; i++) { clonedContact.emails[i].id = null; } } if (clonedContact.addresses) { for (i=0; i<clonedContact.addresses.length; i++) { clonedContact.addresses[i].id = null; } } if (clonedContact.ims) { for (i=0; i<clonedContact.ims.length; i++) { clonedContact.ims[i].id = null; } } if (clonedContact.organizations) { for (i=0; i<clonedContact.organizations.length; i++) { clonedContact.organizations[i].id = null; } } if (clonedContact.photos) { for (i=0; i<clonedContact.photos.length; i++) { clonedContact.photos[i].id = null; } } if (clonedContact.urls) { for (i=0; i<clonedContact.urls.length; i++) { clonedContact.urls[i].id = null; } } return clonedContact; }; /** * Persists contact to device storage. * @param successCB success callback * @param errorCB error callback - optional */ Contact.prototype.save = function(successCB, errorCB) { // Read by Bada to create contact var id = navigator.service.contacts.records.push(this) - 1; Cordova.exec(successCB, errorCB, "org.apache.cordova.Contacts", "save", [id]); }; /** * Contact name. * @param formatted * @param familyName * @param givenName * @param middle * @param prefix * @param suffix */ var ContactName = function(formatted, familyName, givenName, middle, prefix, suffix) { this.formatted = formatted != "undefined" ? formatted : null; this.familyName = familyName != "undefined" ? familyName : null; this.givenName = givenName != "undefined" ? givenName : null; this.middleName = middle != "undefined" ? middle : null; this.honorificPrefix = prefix != "undefined" ? prefix : null; this.honorificSuffix = suffix != "undefined" ? suffix : null; }; /** * Generic contact field. * @param type * @param value * @param primary * @param id */ var ContactField = function(type, value, pref, id) { this.type = type != "undefined" ? type : null; this.value = value != "undefined" ? value : null; this.pref = pref != "undefined" ? pref : null; this.id = id != "undefined" ? id : null; }; /** * Contact address. * @param formatted * @param streetAddress * @param locality * @param region * @param postalCode * @param country */ var ContactAddress = function(formatted, streetAddress, locality, region, postalCode, country, id) { this.formatted = formatted != "undefined" ? formatted : null; this.streetAddress = streetAddress != "undefined" ? streetAddress : null; this.locality = locality != "undefined" ? locality : null; this.region = region != "undefined" ? region : null; this.postalCode = postalCode != "undefined" ? postalCode : null; this.country = country != "undefined" ? country : null; this.id = id != "undefined" ? id : null; }; /** * Contact organization. * @param name * @param dept * @param title * @param startDate * @param endDate * @param location * @param desc */ var ContactOrganization = function(name, dept, title, startDate, endDate, location, desc) { this.name = name != "undefined" ? name : null; this.department = dept != "undefined" ? dept : null; this.title = title != "undefined" ? title : null; this.startDate = startDate != "undefined" ? startDate : null; this.endDate = endDate != "undefined" ? endDate : null; this.location = location != "undefined" ? location : null; this.description = desc != "undefined" ? desc : null; }; /** * Contact account. * @param domain * @param username * @param userid */ var ContactAccount = function(domain, username, userid) { this.domain = domain != "undefined" ? domain : null; this.username = username != "undefined" ? username : null; this.userid = userid != "undefined" ? userid : null; } /** * Represents a group of Contacts. */ var Contacts = function() { this.inProgress = false; this.records = new Array(); // used by bada to create contacts this.results = new Array(); // used by bada to update contact results this.resultsCallback = null; this.errorCallback = null; }; /** * Returns an array of Contacts matching the search criteria. * @param fields that should be searched * @param successCB success callback * @param errorCB error callback (optional) * @param {ContactFindOptions} options that can be applied to contact searching * @return array of Contacts matching search criteria */ Contacts.prototype.find = function(fields, successCB, errorCB, options) { /* fields searched are: displayName, Email, Phone Number, User Id * other fields are ignored */ Cordova.exec(successCB, errorCB, "org.apache.cordova.Contacts","find",[options.filter]); }; /** * need to turn the JSON string representing contact object into actual object * @param JSON string with contact data * Call stored results function with Contact object */ Contacts.prototype._findCallback = function(contact) { if(contact) { try { this.results.push(this.create(contact)); } catch(e){ console.log("Error parsing contact"); } } }; /** * Need to return an error object rather than just a single error code * @param error code * Call optional error callback if found. * Called from objective c find, remove, and save methods on error. */ Contacts.prototype._errCallback = function(pluginResult) { var errorObj = new ContactError(); errorObj.code = pluginResult.message; pluginResult.message = errorObj; return pluginResult; }; // Bada only api to create a new contact via the GUI Contacts.prototype.newContactUI = function(successCallback) { Cordova.exec(successCallback, null, "org.apache.cordova.Contacts","newContact", []); }; // Bada only api to select a contact via the GUI Contacts.prototype.chooseContact = function(successCallback, options) { Cordova.exec(successCallback, null, "org.apache.cordova.Contacts","chooseContact", options); }; /** * This function creates a new contact, but it does not persist the contact * to device storage. To persist the contact to device storage, invoke * contact.save(). * @param properties an object who's properties will be examined to create a new Contact * @returns new Contact object */ Contacts.prototype.create = function(properties) { var contact = new Contact(); for (i in properties) { if (contact[i]!='undefined') { contact[i]=properties[i]; } } return contact; }; /** * ContactFindOptions. * @param filter used to match contacts against * @param multiple boolean used to determine if more than one contact should be returned * @param updatedSince return only contact records that have been updated on or after the given time */ var ContactFindOptions = function(filter, multiple, updatedSince) { this.filter = filter || ''; this.multiple = multiple || true; this.updatedSince = updatedSince || ''; }; /** * ContactError. * An error code assigned by an implementation when an error has occurred */ var ContactError = function() { this.code=null; }; /** * Error codes */ ContactError.UNKNOWN_ERROR = 0; ContactError.INVALID_ARGUMENT_ERROR = 1; ContactError.NOT_FOUND_ERROR = 2; ContactError.TIMEOUT_ERROR = 3; ContactError.PENDING_OPERATION_ERROR = 4; ContactError.IO_ERROR = 5; ContactError.NOT_SUPPORTED_ERROR = 6; ContactError.PERMISSION_DENIED_ERROR = 20; /** * Add the contact interface into the browser. */ Cordova.addConstructor(function() { if(typeof navigator.service == "undefined") navigator.service = new Object(); if(typeof navigator.service.contacts == "undefined") navigator.service.contacts = new Contacts(); });