--- a/src/com/beem/project/beem/BeemSync.java Sun Jan 08 12:08:22 2012 +0100
+++ b/src/com/beem/project/beem/BeemSync.java Mon Jan 09 17:52:52 2012 +0100
@@ -51,7 +51,6 @@
import android.util.Log;
import com.beem.project.beem.service.BeemAvatarCache;
-import com.beem.project.beem.ui.BeemNotification;
import com.beem.project.beem.utils.Status;
/**
@@ -98,19 +97,37 @@
Log.w(TAG, "Roster is null cant sync informations");
return;
}
+
+ Account account = null;
+ Account[] accounts = AccountManager.get(mContext).getAccounts();
+ for (Account a : accounts) {
+ if (a.name.equals(accountName)) {
+ account = a;
+ break;
+ }
+ }
+
+ if (account == null) {
+ Log.w(TAG, "Account " + accountName + "not found, cant sync informations");
+ return;
+ }
+
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
+ addVirtualGroup(ops, account, "All Contact");
for (RosterGroup group : r.getGroups()) {
if (group != null) {
- manageGroup(ops, accountName, group);
+ manageGroup(ops, account, group);
}
if (ops.size() > NB_DB_OPERATION)
executeOperation(ops);
}
+ addVirtualGroup(ops, account, "No Group");
+ addVirtualGroup(ops, account, "Muc");
if (ops.size() > 0)
executeOperation(ops);
for (RosterEntry entry : r.getEntries()) {
if (entry != null) {
- long rawContactID = manageEntry(ops, accountName, entry);
+ long rawContactID = manageEntry(ops, account, entry);
addUpdateStatus(ops, entry, r.getPresence(entry.getUser()), rawContactID);
}
if (ops.size() > NB_DB_OPERATION)
@@ -120,21 +137,14 @@
executeOperation(ops);
}
- private void manageGroup(ArrayList<ContentProviderOperation> ops, String accountName, RosterGroup group) {
+ private void manageGroup(ArrayList<ContentProviderOperation> ops, Account account, RosterGroup group) {
Log.i(TAG, "Sync group : " + group.getName() + " " + group.getEntryCount());
- long rawGroupID = getRawGroupID(accountName, group.getName());
+ long rawGroupID = getRawGroupID(account.name, group.getName());
if (rawGroupID == -1) {
-
ContentProviderOperation.Builder builder = ContentProviderOperation
.newInsert(ContactsContract.Groups.CONTENT_URI);
- Account[] accounts = AccountManager.get(mContext).getAccounts();
- for (Account account : accounts) {
- if (account.name.equals(accountName)) {
- builder.withValue(ContactsContract.Groups.ACCOUNT_NAME, account.name);
- builder.withValue(ContactsContract.Groups.ACCOUNT_TYPE, account.type);
- break;
- }
- }
+ builder.withValue(ContactsContract.Groups.ACCOUNT_NAME, account.name);
+ builder.withValue(ContactsContract.Groups.ACCOUNT_TYPE, account.type);
builder.withValue(ContactsContract.Groups.TITLE, group.getName());
ops.add(builder.build());
}
@@ -147,19 +157,13 @@
* @param entry The roster entry to sync
* @return The raw contact ID
*/
- private long manageEntry(ArrayList<ContentProviderOperation> ops, String accountName, RosterEntry entry) {
- long rawContactID = getRawContactID(accountName, entry.getUser());
+ private long manageEntry(ArrayList<ContentProviderOperation> ops, Account account, RosterEntry entry) {
+ long rawContactID = getRawContactID(account.name, entry.getUser());
Log.i(TAG, "Sync Contact : " + entry.getUser() + " RawContactID : " + rawContactID);
if (rawContactID == -1) { // Not found in database, add new
ContentValues values = new ContentValues();
- Account[] accounts = AccountManager.get(mContext).getAccounts();
- for (Account account : accounts) {
- if (account.name.equals(accountName)) {
- values.put(ContactsContract.RawContacts.ACCOUNT_TYPE, account.type);
- values.put(ContactsContract.RawContacts.ACCOUNT_NAME, account.name);
- break;
- }
- }
+ values.put(ContactsContract.RawContacts.ACCOUNT_TYPE, account.type);
+ values.put(ContactsContract.RawContacts.ACCOUNT_NAME, account.name);
values.put(ContactsContract.RawContacts.SOURCE_ID, entry.getUser());
Uri rawContactUri = mContext.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
rawContactID = ContentUris.parseId(rawContactUri);
@@ -167,10 +171,10 @@
ContentProviderOperation.Builder builder = addUpdateStructuredName(entry, rawContactID, true);
ops.add(builder.build());
for (RosterGroup group : entry.getGroups()) {
- builder = addUpdateGroup(entry, rawContactID, getRawGroupID(accountName, group.getName()), true);
+ builder = addUpdateGroup(entry, rawContactID, getRawGroupID(account.name, group.getName()), true);
ops.add(builder.build());
}
- builder = createProfile(entry, rawContactID, accountName);
+ builder = createProfile(entry, rawContactID, account.name);
ops.add(builder.build());
} else { // Found, update
ContentProviderOperation.Builder builder = addUpdateStructuredName(entry, rawContactID, false);
@@ -357,4 +361,21 @@
}
return authorId;
}
+
+ /**
+ * Add in database virtual group to manage All Contact - No Contact.
+ * @param ops The content provider operation
+ * @param account The account related
+ * @param groupName The virtual group name
+ */
+ private void addVirtualGroup(ArrayList<ContentProviderOperation> ops, Account account, String groupName) {
+ ContentProviderOperation.Builder builder = ContentProviderOperation
+ .newInsert(ContactsContract.Groups.CONTENT_URI);
+ builder.withValue(ContactsContract.Groups.ACCOUNT_NAME, account.name);
+ builder.withValue(ContactsContract.Groups.ACCOUNT_TYPE, account.type);
+ builder.withValue(ContactsContract.Groups.TITLE, groupName);
+
+ ops.add(builder.build());
+ }
+
}