PhoneHelper.java

 1package eu.siacs.conversations.utils;
 2
 3import java.util.Hashtable;
 4
 5import android.app.Activity;
 6import android.content.Context;
 7import android.content.CursorLoader;
 8import android.content.Loader;
 9import android.content.Loader.OnLoadCompleteListener;
10import android.database.Cursor;
11import android.net.Uri;
12import android.os.Bundle;
13import android.os.Looper;
14import android.provider.ContactsContract;
15import android.provider.ContactsContract.Profile;
16
17public class PhoneHelper {
18	
19	public static void loadPhoneContacts(Context context, final OnPhoneContactsLoadedListener listener) {
20		if (Looper.myLooper()==null) {
21			Looper.prepare();
22		}
23		final Looper mLooper = Looper.myLooper();
24		final Hashtable<String, Bundle> phoneContacts = new Hashtable<String, Bundle>();
25		
26		final String[] PROJECTION = new String[] {
27				ContactsContract.Data._ID,
28				ContactsContract.Data.DISPLAY_NAME,
29				ContactsContract.Data.PHOTO_THUMBNAIL_URI,
30				ContactsContract.Data.LOOKUP_KEY,
31				ContactsContract.CommonDataKinds.Im.DATA };
32
33		final String SELECTION = "(" + ContactsContract.Data.MIMETYPE + "=\""
34				+ ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE
35				+ "\") AND (" + ContactsContract.CommonDataKinds.Im.PROTOCOL
36				+ "=\"" + ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER
37				+ "\")";
38		
39		CursorLoader mCursorLoader = new CursorLoader(context,
40				ContactsContract.Data.CONTENT_URI, PROJECTION, SELECTION, null,
41				null);
42		mCursorLoader.registerListener(0, new OnLoadCompleteListener<Cursor>() {
43
44			@Override
45			public void onLoadComplete(Loader<Cursor> arg0, Cursor cursor) {
46				while (cursor.moveToNext()) {
47					Bundle contact = new Bundle();
48					contact.putInt("phoneid", cursor.getInt(cursor
49							.getColumnIndex(ContactsContract.Data._ID)));
50					contact.putString(
51							"displayname",
52							cursor.getString(cursor
53									.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)));
54					contact.putString(
55							"photouri",
56							cursor.getString(cursor
57									.getColumnIndex(ContactsContract.Data.PHOTO_THUMBNAIL_URI)));
58					contact.putString("lookup",cursor.getString(cursor
59							.getColumnIndex(ContactsContract.Data.LOOKUP_KEY)));
60					phoneContacts.put(
61							cursor.getString(cursor
62									.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)),
63							contact);
64				}
65				if (listener!=null) {
66					listener.onPhoneContactsLoaded(phoneContacts);
67				}
68				mLooper.quit();
69			}
70		});
71		mCursorLoader.startLoading();
72	}
73
74	public static Uri getSefliUri(Activity activity) {
75		String[] mProjection = new String[] { Profile._ID,
76				Profile.PHOTO_THUMBNAIL_URI };
77		Cursor mProfileCursor = activity.getContentResolver().query(
78				Profile.CONTENT_URI, mProjection, null, null, null);
79
80		if (mProfileCursor.getCount()==0) {
81			return null;
82		} else {
83			mProfileCursor.moveToFirst();
84			String uri = mProfileCursor.getString(1);
85			if (uri==null) {
86				return null;
87			} else {
88				return Uri.parse(uri);
89			}
90		}
91	}
92}