# HG changeset patch # User Vincent V. # Date 1326127972 -3600 # Node ID 008566b90ba8a09868ccb00bab2f9c580d749a3a # Parent 039fe4e3534f7a8c06f90df490f29d85a6e4cd12 add virtual group in database to show all_contact, no_group, muc in the banner of the contactlist diff -r 039fe4e3534f -r 008566b90ba8 res/layout/contactlist_group.xml --- a/res/layout/contactlist_group.xml Sun Jan 08 12:08:22 2012 +0100 +++ b/res/layout/contactlist_group.xml Mon Jan 09 17:52:52 2012 +0100 @@ -1,11 +1,11 @@ + - \ No newline at end of file + \ No newline at end of file diff -r 039fe4e3534f -r 008566b90ba8 res/values/colors.xml --- a/res/values/colors.xml Sun Jan 08 12:08:22 2012 +0100 +++ b/res/values/colors.xml Mon Jan 09 17:52:52 2012 +0100 @@ -2,6 +2,7 @@ #A0C8FF #CCFF00 + #BCFF00 #000000 #FFFFFF #FF0000 diff -r 039fe4e3534f -r 008566b90ba8 src/com/beem/project/beem/BeemSync.java --- 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 ops = new ArrayList(); + 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 ops, String accountName, RosterGroup group) { + private void manageGroup(ArrayList 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 ops, String accountName, RosterEntry entry) { - long rawContactID = getRawContactID(accountName, entry.getUser()); + private long manageEntry(ArrayList 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 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()); + } + } diff -r 039fe4e3534f -r 008566b90ba8 src/com/beem/project/beem/ui/ContactList.java --- a/src/com/beem/project/beem/ui/ContactList.java Sun Jan 08 12:08:22 2012 +0100 +++ b/src/com/beem/project/beem/ui/ContactList.java Mon Jan 09 17:52:52 2012 +0100 @@ -58,7 +58,6 @@ import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.Filter; -import android.widget.Filterable; import android.widget.Gallery; import android.widget.ImageView; import android.widget.ListView; @@ -80,10 +79,9 @@ private static final String SETTINGS_HIDDEN_CONTACT = "settings_key_hidden_contact"; private static final String TAG = "ContactList"; - /** - * Map containing a list of the different contacts of a given group. Each list is a @{link SortedList} so there is - * no need to sort it again. - */ + private final int BANNER_POS_ALL_CONTACT = 0; + private int BANNER_POS_NO_GROUP; + private int BANNER_POS_MUC; private final BeemContactListOnClick mOnContactClick = new BeemContactListOnClick(); @@ -120,10 +118,14 @@ final Cursor cursorGroup = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, new String[] { ContactsContract.Groups._ID, ContactsContract.Groups.TITLE }, ContactsContract.Groups.ACCOUNT_NAME + "=?", new String[] { mAccountName }, null); + mAdapterBanner = new BeemBanner(this, R.layout.contactlist_group, cursorGroup, new String[] { ContactsContract.Groups.TITLE }, new int[] { R.id.contactlist_group }); cursorGroup.registerContentObserver(new BeemGroupObserver(new Handler())); + BANNER_POS_MUC = cursorGroup.getCount() - 1; + BANNER_POS_NO_GROUP = cursorGroup.getCount() - 2; + // Get Contacts list final Uri rawContactUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon() .appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_NAME, mAccountName) @@ -315,13 +317,14 @@ /** * Adapter contact list. */ - private static class BeemContactList extends SimpleCursorAdapter implements Filterable { + private static class BeemContactList extends SimpleCursorAdapter { //implements Filterable { private Context mContext; private int mLayout; private BeemAvatarCache mBeemAvatarCache; - private final ContactFilter mContactFilter = new ContactFilter(); - private final GroupFilter mGroupFilter = new GroupFilter(); + + //private final ContactFilter mContactFilter = new ContactFilter(); + //private final GroupFilter mGroupFilter = new GroupFilter(); public BeemContactList(Context context, int layout, Cursor c, String[] from, int[] to) { super(context, layout, c, from, to); @@ -355,7 +358,7 @@ if (mimeType.equals(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)) { TextView nameText = (TextView) view.findViewById(R.id.contactlistpseudo); nameText.setText(data); - } + } //else if other mimetype } @@ -375,13 +378,13 @@ img.setImageLevel(contactStatus); } - public Filter getContactFilter() { - return mContactFilter; - } + // public Filter getContactFilter() { + // return mContactFilter; + // } - public Filter getGroupFilter() { - return mGroupFilter; - } + // public Filter getGroupFilter() { + // return mGroupFilter; + // } /** * Get a LayerDrawable containing the avatar and the status icon. The status icon will change with the level of @@ -557,19 +560,27 @@ @Override public void onItemClick(AdapterView arg0, View v, int i, long l) { - Log.e(TAG, "ONGROUPCLICK"); + if (i == BANNER_POS_ALL_CONTACT) + Log.e("CONTACTLIST TODO", "ALL_CONTACT"); + else if (i == BANNER_POS_NO_GROUP) + Log.e("CONTACTLIST TODO", "NO GROUP"); + else if (i == BANNER_POS_MUC) + Log.e("CONTACTLIST TODO", "MUC"); + else + Log.e("CONTACTLIST TODO", "FILTER CONTACT BY GROUP"); + TextView nameGroup = (TextView) v.findViewById(R.id.contactlist_group); - Uri groupUri = ContactsContract.Groups.CONTENT_URI.buildUpon() - .appendQueryParameter(ContactsContract.Groups.ACCOUNT_NAME, mAccountName) - .appendQueryParameter(ContactsContract.Groups.ACCOUNT_TYPE, BeemApplication.BEEM_PACKAGE) - .appendQueryParameter(ContactsContract.Groups.TITLE, nameGroup.toString()).build(); - nameGroup.setTextColor(R.color.vert_manu); - Cursor cursorGroup = getContentResolver().query(groupUri, null, ContactsContract.Groups.DELETED + "= 0", - null, null); - if (cursorGroup.moveToFirst()) { - String _id = cursorGroup.getString(cursorGroup.getColumnIndex(ContactsContract.Groups._ID)); - mAdapterContactList.getGroupFilter().filter(_id); - } + // Uri groupUri = ContactsContract.Groups.CONTENT_URI.buildUpon() + // .appendQueryParameter(ContactsContract.Groups.ACCOUNT_NAME, mAccountName) + // .appendQueryParameter(ContactsContract.Groups.ACCOUNT_TYPE, BeemApplication.BEEM_PACKAGE) + // .appendQueryParameter(ContactsContract.Groups.TITLE, nameGroup.toString()).build(); + // nameGroup.setTextColor(R.color.vert_manu); + // Cursor cursorGroup = getContentResolver().query(groupUri, null, ContactsContract.Groups.DELETED + "= 0", + // null, null); + // if (cursorGroup.moveToFirst()) { + // String _id = cursorGroup.getString(cursorGroup.getColumnIndex(ContactsContract.Groups._ID)); + // mAdapterContactList.getGroupFilter().filter(_id); + // } } }