add virtual group in database to show all_contact, no_group, muc in the banner of the contactlist
authorVincent V. <marseille@beem-project.com>
Mon, 09 Jan 2012 17:52:52 +0100
changeset 928 008566b90ba8
parent 927 039fe4e3534f
child 929 4d171bf7378a
add virtual group in database to show all_contact, no_group, muc in the banner of the contactlist
res/layout/contactlist_group.xml
res/values/colors.xml
src/com/beem/project/beem/BeemSync.java
src/com/beem/project/beem/ui/ContactList.java
--- 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 @@
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/contactlist_group"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:textColor="@color/vert_manu"    
+    android:selectAllOnFocus="true"
+    android:textSize="18sp"
+    android:textStyle="bold"
+    android:typeface="normal" >
 
-<TextView
-	xmlns:android="http://schemas.android.com/apk/res/android"
-	android:layout_width="wrap_content"
-	android:layout_height="wrap_content"
-	android:textColor="@color/white"
-	android:textColorHighlight="@color/red"
-	android:textSize="18sp"
-	android:typeface="normal"
-	android:textStyle="bold"
-	android:id="@+id/contactlist_group"></TextView>
\ No newline at end of file
+</TextView>
\ No newline at end of file
--- 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 @@
 <resources>
 	<color name="blue_sky">#A0C8FF</color>
 	<color name="vert_manu">#CCFF00</color>
+	<color name="vert_manu_hl">#BCFF00</color>
 	<color name="black">#000000</color>
 	<color name="white">#FFFFFF</color>
 	<color name="red">#FF0000</color>
--- 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());
+    }
+
 }
--- 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);
+	    //	    }
 	}
     }