--- a/src/com/beem/project/beem/ui/ContactList.java Mon Jan 09 17:52:52 2012 +0100
+++ b/src/com/beem/project/beem/ui/ContactList.java Thu Jan 26 16:43:44 2012 +0100
@@ -29,6 +29,8 @@
package com.beem.project.beem.ui;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import android.app.Activity;
import android.content.ContentUris;
@@ -58,6 +60,8 @@
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Filter;
+import android.widget.FilterQueryProvider;
+import android.widget.Filterable;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.ListView;
@@ -91,6 +95,8 @@
private String mAccountName;
+ private static List<Long> mArrayContactID2Show = new ArrayList<Long>();
+
/**
* Constructor.
*/
@@ -102,6 +108,7 @@
super.onCreate(saveBundle);
setContentView(R.layout.contactlist);
+
Bundle b = getIntent().getExtras();
if (b == null) {
//TODO: Add toast to advice need to configure at least 1 beem account (Should not happend)
@@ -130,6 +137,7 @@
final Uri rawContactUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon()
.appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_NAME, mAccountName)
.appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_TYPE, BeemApplication.BEEM_PACKAGE).build();
+ //TODO: change null value for the projection (not efficient)
Cursor cursorRawContact = getContentResolver().query(rawContactUri, null,
ContactsContract.RawContacts.DELETED + "= 0", null, null);
@@ -143,19 +151,19 @@
registerForContextMenu(listView);
listView.setAdapter(mAdapterContactList);
- // mAdapterContactList.setFilterQueryProvider(new FilterQueryProvider() {
- // public Cursor runQuery(CharSequence constraint) {
- // String s = '%' + constraint.toString() + '%';
- // return getContentResolver().query(rawContactUri, null,
- // ContactsContract.RawContacts.SOURCE_ID+ " LIKE ? ", new String[] { s }, null);
- // }
- // });
+ mAdapterContactList.setFilterQueryProvider(new FilterQueryProvider() {
+ @Override
+ public Cursor runQuery(CharSequence constraint) {
+ String s = '%' + constraint.toString() + '%';
+ return getContentResolver().query(rawContactUri, null,
+ ContactsContract.RawContacts.SOURCE_ID + " LIKE ? ", new String[] { s }, null);
+ }
+ });
}
@Override
protected void onResume() {
super.onResume();
- Log.e(TAG, "onResume : " + mSettings.getBoolean("settings_key_hide_groups", false));
if (!mSettings.getBoolean("settings_key_hide_groups", false))
showGroups();
else
@@ -317,22 +325,29 @@
/**
* 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 GroupFilter mGroupFilter = new GroupFilter();
+ private Cursor mCursor;
public BeemContactList(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
mContext = context;
mLayout = layout;
mBeemAvatarCache = new BeemAvatarCache(context);
+ mCursor = c;
}
+ @Override
+ public int getCount() {
+ if (mArrayContactID2Show.size() > 0)
+ return mArrayContactID2Show.size();
+ return mCursor.getCount();
+ }
+
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final LayoutInflater inflater = LayoutInflater.from(mContext);
@@ -341,8 +356,14 @@
@Override
public void bindView(View view, Context context, Cursor cursor) {
+
long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID));
+ if (mArrayContactID2Show.size() > 0 && !mArrayContactID2Show.contains(id))
+ return;
+
+ Log.e("BINDVIEWWW", "OOOOOO" + id);
+
Uri rawContactUri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, id);
Uri entityUri = Uri.withAppendedPath(rawContactUri, ContactsContract.RawContacts.Entity.CONTENT_DIRECTORY);
Cursor cursorContact = mContext.getContentResolver().query(
@@ -350,6 +371,7 @@
new String[] { ContactsContract.RawContacts.SOURCE_ID, ContactsContract.RawContacts.Entity.DATA_ID,
ContactsContract.RawContacts.Entity.MIMETYPE, ContactsContract.RawContacts.Entity.DATA1 }, null,
null, null);
+
try {
while (cursorContact.moveToNext()) {
if (!cursorContact.isNull(1)) {
@@ -364,27 +386,24 @@
}
}
+
+ String jid = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.SOURCE_ID));
+ view.setTag(jid);
+
+ ImageView img = (ImageView) view.findViewById(R.id.avatar);
+ int contactStatus = 1;
+ //TODO: set the jid instead of null then debug
+ Drawable avatar = getAvatarStatusDrawable(null);
+ img.setImageDrawable(avatar);
+ img.setImageLevel(contactStatus);
} finally {
cursorContact.close();
}
-
- String jid = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.SOURCE_ID));
- view.setTag(jid);
-
- ImageView img = (ImageView) view.findViewById(R.id.avatar);
- int contactStatus = 1;
- Drawable avatar = getAvatarStatusDrawable(jid);
- img.setImageDrawable(avatar);
- img.setImageLevel(contactStatus);
}
- // 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
@@ -413,47 +432,6 @@
/**
* A Filter which select Contact to display by searching in ther Jid.
*/
- private class ContactFilter extends Filter {
-
- /**
- * Create a ContactFilter.
- */
- public ContactFilter() {
- }
-
- @Override
- protected Filter.FilterResults performFiltering(CharSequence constraint) {
- Log.d(TAG, "performFiltering");
- // while (mCursor.moveToNext()) {
- //
- // }
- // List<Contact> result = mListContact;
- // if (constraint.length() > 0) {
- // result = new LinkedList<Contact>();
- // for (Contact c : mContactOnGroup.get(mSelectedGroup)) {
- // if (c.getJID().contains(constraint))
- // result.add(c);
- // }
- // }
- // Filter.FilterResults fr = new Filter.FilterResults();
- // fr.values = result;
- // fr.count = result.size();
- // return fr;
- return null;
- }
-
- @Override
- protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
- Log.d(TAG, "publishResults");
- // List<Contact> contacts = (List<Contact>) results.values;
- // mListContact = contacts;
- // notifyDataSetChanged();
- }
- }
-
- /**
- * A Filter which select Contact to display by searching in ther Jid.
- */
private class GroupFilter extends Filter {
/**
@@ -469,27 +447,32 @@
Cursor cursorContact = mContext.getContentResolver().query(ContactsContract.Data.CONTENT_URI,
new String[] { ContactsContract.Data.RAW_CONTACT_ID }, ContactsContract.Data.MIMETYPE + " =? ",
new String[] { ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE }, null);
+
+ List<Long> arrayValues = new ArrayList<Long>();
try {
while (cursorContact.moveToNext()) {
- Log.e(
- TAG,
- "HOW MUCH "
- + cursorContact.getString(cursorContact
- .getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)));
+ arrayValues.add(cursorContact.getLong(cursorContact
+ .getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)));
}
+
} finally {
cursorContact.close();
}
Filter.FilterResults fr = new Filter.FilterResults();
- fr.values = cursorContact;
- fr.count = cursorContact.getCount();
+ fr.values = arrayValues;
+ fr.count = arrayValues.size();
return fr;
}
@Override
protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
Log.d(TAG, "publishResults " + results.count);
+ //Use in the bindview to show only filtered ID
+ mArrayContactID2Show.clear();
+ mArrayContactID2Show.addAll((ArrayList<Long>) results.values);
+ //mArrayContactID2Show = (List<Integer>) results.values;
+ notifyDataSetChanged();
}
}
}
@@ -560,27 +543,38 @@
@Override
public void onItemClick(AdapterView<?> arg0, View v, int i, long l) {
- 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)
+ if (i == BANNER_POS_ALL_CONTACT) {
+ mArrayContactID2Show.clear();
+ mAdapterContactList.notifyDataSetChanged();
+ } else if (i == BANNER_POS_NO_GROUP) {
+
+ } else if (i == BANNER_POS_MUC)
Log.e("CONTACTLIST TODO", "MUC");
- else
- Log.e("CONTACTLIST TODO", "FILTER CONTACT BY GROUP");
+ else {
+ 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();
+ 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);
- 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);
- // }
+// // Get Contacts list
+// final Uri rawContactUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon()
+// .appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_NAME, mAccountName)
+// .appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_TYPE, BeemApplication.BEEM_PACKAGE)
+// .build();
+// //TODO: change null value for the projection (not efficient)
+// Cursor cursorRawContact = getContentResolver().query(rawContactUri, null,
+// ContactsContract.RawContacts.DELETED + "= 0", null, null);
+// mAdapterContactList.changeCursor(cursorRawContact);
+// cursorRawContact.requery();
+// mAdapterContactList.notifyDataSetChanged();
+ }
+ }
}
}