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