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(Context context) {
76 String[] mProjection = new String[] { Profile._ID,
77 Profile.PHOTO_THUMBNAIL_URI };
78 Cursor mProfileCursor = context.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}