PhoneHelper.java

 1package de.gultsch.chat.utils;
 2
 3import java.util.ArrayList;
 4import java.util.Hashtable;
 5
 6import android.content.Context;
 7import android.content.CursorLoader;
 8import android.content.Loader;
 9import android.content.Loader.OnLoadCompleteListener;
10import android.database.Cursor;
11import android.os.Bundle;
12import android.provider.ContactsContract;
13
14public class PhoneHelper {
15	
16	public static void loadPhoneContacts(Context context, final OnPhoneContactsLoadedListener listener) {
17		final Hashtable<String, Bundle> phoneContacts = new Hashtable<String, Bundle>();
18
19		final String[] PROJECTION = new String[] {
20				ContactsContract.Data._ID,
21				ContactsContract.Data.DISPLAY_NAME,
22				ContactsContract.Data.PHOTO_THUMBNAIL_URI,
23				ContactsContract.Data.LOOKUP_KEY,
24				ContactsContract.CommonDataKinds.Im.DATA };
25
26		final String SELECTION = "(" + ContactsContract.Data.MIMETYPE + "=\""
27				+ ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE
28				+ "\") AND (" + ContactsContract.CommonDataKinds.Im.PROTOCOL
29				+ "=\"" + ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER
30				+ "\")";
31
32		CursorLoader mCursorLoader = new CursorLoader(context,
33				ContactsContract.Data.CONTENT_URI, PROJECTION, SELECTION, null,
34				null);
35		mCursorLoader.registerListener(0, new OnLoadCompleteListener<Cursor>() {
36
37			@Override
38			public void onLoadComplete(Loader<Cursor> arg0, Cursor cursor) {
39				while (cursor.moveToNext()) {
40					Bundle contact = new Bundle();
41					contact.putInt("phoneid", cursor.getInt(cursor
42							.getColumnIndex(ContactsContract.Data._ID)));
43					contact.putString(
44							"displayname",
45							cursor.getString(cursor
46									.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)));
47					contact.putString(
48							"photouri",
49							cursor.getString(cursor
50									.getColumnIndex(ContactsContract.Data.PHOTO_THUMBNAIL_URI)));
51					contact.putString("lookup",cursor.getString(cursor
52							.getColumnIndex(ContactsContract.Data.LOOKUP_KEY)));
53					phoneContacts.put(
54							cursor.getString(cursor
55									.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)),
56							contact);
57				}
58				if (listener!=null) {
59					listener.onPhoneContactsLoaded(phoneContacts);
60				}
61			}
62		});
63		mCursorLoader.startLoading();
64	}
65}