1package eu.siacs.conversations.utils;
2
3import android.content.Context;
4import android.content.CursorLoader;
5import android.content.Loader;
6import android.content.Loader.OnLoadCompleteListener;
7import android.content.pm.PackageManager;
8import android.database.Cursor;
9import android.net.Uri;
10import android.os.Bundle;
11import android.provider.ContactsContract;
12import android.provider.ContactsContract.Profile;
13
14import java.util.List;
15import java.util.concurrent.RejectedExecutionException;
16
17public class PhoneHelper {
18
19 public static void loadPhoneContacts(Context context,final List<Bundle> phoneContacts, final OnPhoneContactsLoadedListener listener) {
20 final String[] PROJECTION = new String[] { ContactsContract.Data._ID,
21 ContactsContract.Data.DISPLAY_NAME,
22 ContactsContract.Data.PHOTO_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 if (cursor == null) {
40 return;
41 }
42 while (cursor.moveToNext()) {
43 Bundle contact = new Bundle();
44 contact.putInt("phoneid", cursor.getInt(cursor
45 .getColumnIndex(ContactsContract.Data._ID)));
46 contact.putString(
47 "displayname",
48 cursor.getString(cursor
49 .getColumnIndex(ContactsContract.Data.DISPLAY_NAME)));
50 contact.putString("photouri", cursor.getString(cursor
51 .getColumnIndex(ContactsContract.Data.PHOTO_URI)));
52 contact.putString("lookup", cursor.getString(cursor
53 .getColumnIndex(ContactsContract.Data.LOOKUP_KEY)));
54
55 contact.putString(
56 "jid",
57 cursor.getString(cursor
58 .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)));
59 phoneContacts.add(contact);
60 }
61 if (listener != null) {
62 listener.onPhoneContactsLoaded(phoneContacts);
63 }
64 cursor.close();
65 }
66 });
67 try {
68 mCursorLoader.startLoading();
69 } catch (RejectedExecutionException e) {
70 if (listener != null) {
71 listener.onPhoneContactsLoaded(phoneContacts);
72 }
73 }
74 }
75
76 public static Uri getSefliUri(Context context) {
77 String[] mProjection = new String[] { Profile._ID, Profile.PHOTO_URI };
78 Cursor mProfileCursor = context.getContentResolver().query(
79 Profile.CONTENT_URI, mProjection, null, null, null);
80
81 if (mProfileCursor == null || mProfileCursor.getCount() == 0) {
82 return null;
83 } else {
84 mProfileCursor.moveToFirst();
85 String uri = mProfileCursor.getString(1);
86 mProfileCursor.close();
87 if (uri == null) {
88 return null;
89 } else {
90 return Uri.parse(uri);
91 }
92 }
93 }
94
95 public static String getVersionName(Context context) {
96 final String packageName = context == null ? null : context.getPackageName();
97 if (packageName != null) {
98 try {
99 return context.getPackageManager().getPackageInfo(packageName, 0).versionName;
100 } catch (final PackageManager.NameNotFoundException | RuntimeException e) {
101 return "unknown";
102 }
103 } else {
104 return "unknown";
105 }
106 }
107}