add virtual group in database to show all_contact, no_group, muc in the banner of the contactlist
--- 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);
+ // }
}
}