# HG changeset patch # User "Vincent Veronis" # Date 1304849071 -7200 # Node ID 9ffd19d0249cb502a7e9f92624c5b9977a420d82 # Parent d9a0565ccaccbc373a86a57f6689c84c727001a4 Improve code style diff -r d9a0565ccacc -r 9ffd19d0249c AndroidManifest.xml --- a/AndroidManifest.xml Sun May 08 11:35:51 2011 +0200 +++ b/AndroidManifest.xml Sun May 08 12:04:31 2011 +0200 @@ -55,16 +55,7 @@ android:label="Beem Connection"> - - - - - - + ops) { + /** + * Method to execute content provider operation. + * @param ops + */ + private static void executeOperation(final ArrayList ops) { try { mContentResolver.applyBatch(ContactsContract.AUTHORITY, ops); } catch (RemoteException e) { @@ -154,6 +168,11 @@ } } + /** + * Roster sync method. + * @param r The roster to sync + * @param a The account related + */ private static void manageRoster(final Roster r, final Account a) { ArrayList ops = new ArrayList(); for (RosterEntry entry : r.getEntries()) { @@ -163,20 +182,18 @@ if (ops.size() > 100) executeOperation(ops); } - // TODO: dont know how to ttest - // for (RosterGroup group : r.getGroups()) { - // if (group != null) - // manageGroup(ops, a, group); - // if (ops.size() > 0) - // executeOperation(ops); - // } if (ops.size() > 0) executeOperation(ops); } + /** + * RosterEntry sync method. + * @param ops The content provider operation + * @param account The account related + * @param entry The roster entry to sync + */ private static void manageEntry(ArrayList ops, Account account, RosterEntry entry) { long rawContactID = getRawContactID(account.name, entry.getUser()); - String displayName = entry.getName() != null ? entry.getName() : entry.getUser(); Log.i(TAG, "Sync Contact : " + entry.getUser() + " RawContactID : " + rawContactID); if (rawContactID == -1) { // Not found in database, add new ContentValues values = new ContentValues(); @@ -186,17 +203,57 @@ Uri rawContactUri = mContentResolver.insert(ContactsContract.RawContacts.CONTENT_URI, values); rawContactID = ContentUris.parseId(rawContactUri); values.clear(); - //Insert Name values - ContentProviderOperation.Builder builder = ContentProviderOperation - .newInsert(ContactsContract.Data.CONTENT_URI); + ContentProviderOperation.Builder builder = addUpdateStructuredName(entry, rawContactID, true); + ops.add(builder.build()); + builder = addUpdateIm(entry, rawContactID, true); + ops.add(builder.build()); + } else { // Found, update + ContentProviderOperation.Builder builder = addUpdateStructuredName(entry, rawContactID, false); + ops.add(builder.build()); + } + } + + /** + * Method to insert or update structured name informations. + * @param entry The roster entry to sync + * @param rawContactID The contact ID in the android database + * @param isInsert Insert boolean + * @return + */ + private static ContentProviderOperation.Builder addUpdateStructuredName(RosterEntry entry, long rawContactID, + boolean isInsert) { + String displayName = entry.getName() != null ? entry.getName() : entry.getUser(); + ContentProviderOperation.Builder builder; + if (isInsert) { + builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); builder.withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactID); builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); builder.withValue(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, rawContactID); - builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName); - builder.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, displayName); - builder.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, displayName); - ops.add(builder.build()); + } else { + builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI); + builder.withSelection( + ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID + " =? AND " + + ContactsContract.Data.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE + + "'", new String[] { String.valueOf(rawContactID) }); + } + builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName); + builder.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, displayName); + builder.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, displayName); + return builder; + } + + /** + * Method to insert or update IM informations. + * @param entry The roster entry to sync + * @param rawContactID The contact ID in the android database + * @param isInsert Insert boolean + * @return + */ + private static ContentProviderOperation.Builder addUpdateIm(RosterEntry entry, long rawContactID, boolean isInsert) { + String displayName = entry.getName() != null ? entry.getName() : entry.getUser(); + ContentProviderOperation.Builder builder; + if (isInsert) { builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); builder.withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactID); builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE); @@ -204,23 +261,18 @@ builder.withValue(ContactsContract.CommonDataKinds.Im.DATA1, displayName); builder.withValue(ContactsContract.CommonDataKinds.Im.PROTOCOL, ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER); - ops.add(builder.build()); - } else { // Found, update - // Update Name values - ContentProviderOperation.Builder builder = ContentProviderOperation - .newUpdate(ContactsContract.Data.CONTENT_URI); - builder.withSelection( - ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID + " =? AND " - + ContactsContract.Data.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE - + "'", new String[] { String.valueOf(rawContactID)}); - builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName); - builder.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, displayName); - builder.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, displayName); - ops.add(builder.build()); + } else { + builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI); } + return builder; } - + /** + * Get contact ID from android database. + * @param account The account related + * @param jid The jid related + * @return ID in the database of the jid + */ private static long getRawContactID(String account, String jid) { long authorId = -1; final Cursor c = mContentResolver.query(ContactsContract.RawContacts.CONTENT_URI, new String[] {