package com.openerp.support.contact; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.List; import android.accounts.Account; import android.content.ContentProviderOperation; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.os.StrictMode; import android.provider.BaseColumns; import android.provider.ContactsContract; import android.provider.ContactsContract.RawContacts; import android.util.Log; import com.openerp.auth.OpenERPAccountManager; import com.openerp.orm.OEDataRow; import com.openerp.orm.OEValues; import com.openerp.support.OEUser; import com.openerp.util.Base64Helper; public class OEContact { public static final String TAG = "com.openerp.support.contact.OEContact"; ContentResolver mContentResolver = null; Uri rawContactUri = null; String[] mProjections = new String[] { BaseColumns._ID, ContactsContract.RawContacts.SYNC1 }; Uri mRawContacts = null; Uri mContactContract = null; String mRawContactId = null; Account mAccount = null; OEUser mUser = null; Context mContext = null; public OEContact(Context context, OEUser user) { mContext = context; mUser = user; mAccount = OpenERPAccountManager.getAccount(context, user.getAndroidName()); mContentResolver = mContext.getContentResolver(); mRawContacts = RawContacts.CONTENT_URI; mContactContract = ContactsContract.Data.CONTENT_URI; mRawContactId = ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID; rawContactUri = RawContacts.CONTENT_URI.buildUpon() .appendQueryParameter(RawContacts.ACCOUNT_NAME, mAccount.name) .appendQueryParameter(RawContacts.ACCOUNT_TYPE, mAccount.type) .build(); if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .permitAll().build(); StrictMode.setThreadPolicy(policy); } } public List<OEValues> localContacts() { List<OEValues> contacts = new ArrayList<OEValues>(); Cursor cr = mContentResolver.query(rawContactUri, mProjections, null, null, null); if (cr.moveToFirst()) { do { OEValues values = new OEValues(); for (String key : mProjections) values.put(key, cr.getString(cr.getColumnIndex(key))); contacts.add(values); } while (cr.moveToNext()); } cr.close(); return contacts; } public boolean contactExists(int partner_id) { Log.d(TAG, "OEContact->contactExists()"); boolean flag = false; if (contactUri(partner_id) != null) flag = true; return flag; } public boolean createContacts(List<OEDataRow> partners) { Log.d(TAG, "OEContact->createContacts()"); boolean flag = false; for (OEDataRow partner : partners) flag = createContact(partner); return flag; } public boolean removeContact(int partner_id) { int count = mContentResolver.delete(rawContactUri, mProjections[1] + " = ?", new String[] { partner_id + "" }); if (count > 0) { return true; } return false; } public boolean createContact(OEDataRow partner) { Log.d(TAG, "OEContact->createContact()"); boolean flag = false; boolean isContact = contactExists(partner.getInt("id")); if (isContact) removeContact(partner.getInt("id")); ContentProviderOperation.Builder builder = null; ArrayList<ContentProviderOperation> oList = new ArrayList<ContentProviderOperation>(); int rawContactInsertIndex = oList.size(); // Contact Raw details builder = ContentProviderOperation.newInsert(mRawContacts); builder.withValue(RawContacts.ACCOUNT_NAME, mAccount.name); builder.withValue(RawContacts.ACCOUNT_TYPE, mAccount.type); builder.withValue(RawContacts.SYNC1, partner.getInt("id")); oList.add(builder.build()); // Display Name builder = ContentProviderOperation.newInsert(mContactContract); builder.withValueBackReference(mRawContactId, 0); builder.withValue( ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); builder.withValue( ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, partner.getString("name")); oList.add(builder.build()); // Connection to send message from contact builder = ContentProviderOperation.newInsert(mContactContract); builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0); builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.com.openerp.auth.profile"); builder.withValue(ContactsContract.Data.DATA1, partner.getString("name")); builder.withValue(ContactsContract.Data.DATA2, partner.getInt("id")); builder.withValue(ContactsContract.Data.DATA3, "Send Message"); oList.add(builder.build()); // Email if (!partner.getString("email").equals("false")) { builder = ContentProviderOperation.newInsert(mContactContract); builder.withValueBackReference(mRawContactId, 0); builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE); builder.withValue(ContactsContract.CommonDataKinds.Email.DATA, partner.getString("email")); oList.add(builder.build()); } // Phone number if (!partner.getString("phone").equals("false")) { builder = ContentProviderOperation .newInsert(ContactsContract.Data.CONTENT_URI); builder.withValueBackReference( ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0); builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, partner.getString("phone")); oList.add(builder.build()); } // Mobile number if (!partner.getString("mobile").equals("false")) { builder = ContentProviderOperation.newInsert(mContactContract); builder.withValueBackReference(mRawContactId, 0); builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, partner.getString("mobile")); builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE); oList.add(builder.build()); } // Website if (!partner.getString("website").equals("false")) { builder = ContentProviderOperation .newInsert(ContactsContract.Data.CONTENT_URI); builder.withValueBackReference( ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0); builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE); builder.withValue(ContactsContract.CommonDataKinds.Website.TYPE, partner.getString("website")); oList.add(builder.build()); } // Address street 1 if (!partner.getString("street").equals("false")) { builder = ContentProviderOperation.newInsert(mContactContract); builder.withValueBackReference(mRawContactId, 0); builder.withValue( ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE); builder.withValue( ContactsContract.CommonDataKinds.StructuredPostal.STREET, partner.getString("street")); oList.add(builder.build()); } // Address street 2 if (!partner.getString("street2").equals("false")) { builder = ContentProviderOperation.newInsert(mContactContract); builder.withValueBackReference(mRawContactId, 0); builder.withValue( ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE); builder.withValue( ContactsContract.CommonDataKinds.StructuredPostal.STREET, partner.getString("street2")); oList.add(builder.build()); } // Address City if (!partner.getString("city").equals("false")) { builder = ContentProviderOperation.newInsert(mContactContract); builder.withValueBackReference(mRawContactId, 0); builder.withValue( ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE); builder.withValue( ContactsContract.CommonDataKinds.StructuredPostal.CITY, partner.getString("city")); oList.add(builder.build()); } // Zip code if (!partner.getString("zip").equals("false")) { builder = ContentProviderOperation.newInsert(mContactContract); builder.withValueBackReference(mRawContactId, 0); builder.withValue( ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE); builder.withValue( ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, partner.getString("zip")); oList.add(builder.build()); } // Partner Image if (!partner.getString("image_small").equals("false")) { Bitmap bitmapOrg = Base64Helper.getBitmapImage(mContext, partner.getString("image_small")); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 100, stream); oList.add(ContentProviderOperation .newInsert(mContactContract) .withValueBackReference( ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue( ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, stream.toByteArray()).build()); } // Organization String company = "false"; company = partner.getM2ORecord("company_id").browse().getString("name"); if (!company.equals("false")) { oList.add(ContentProviderOperation .newInsert(mContactContract) .withValueBackReference( ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue( ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE) .withValue( ContactsContract.CommonDataKinds.Organization.COMPANY, company) .withValue( ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK) .build()); } try { mContentResolver.applyBatch(ContactsContract.AUTHORITY, oList); flag = true; } catch (Exception e) { e.printStackTrace(); } return flag; } public Uri contactUri(int partner_id) { Uri uri = null; Cursor cr = mContentResolver.query(rawContactUri, mProjections, mProjections[1] + " = ?", new String[] { partner_id + "" }, null); if (cr.moveToFirst()) { String raw_id = cr.getString(0); uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, raw_id); } cr.close(); return uri; } }