diff --git a/res/layout/contacts_list.xml b/res/layout/contacts_list.xml
index 2b2536d74..5856688fb 100644
--- a/res/layout/contacts_list.xml
+++ b/res/layout/contacts_list.xml
@@ -127,6 +127,15 @@
android:fastScrollEnabled="true"
android:fastScrollAlwaysVisible="true"
android:dividerHeight="1dp" />
+
+
contacts = fetchContactsAsync();
- Message msg = handler.obtainMessage();
- msg.what = CONTACTS_UPDATED;
- msg.obj = contacts;
- handler.sendMessage(msg);
+ fetchContactsAsync();
}
public ContentResolver getContentResolver() {
@@ -223,12 +221,12 @@ public class ContactsManager extends ContentObserver {
}
}
}
-
- public synchronized void fetchContacts() {
- setContacts(fetchContactsAsync());
+
+ public synchronized void fetchContactsAsync() {
+ new ContactsFetchTask().execute();
}
- public List fetchContactsAsync() {
+ public List fetchContactsSync() {
List contacts = new ArrayList();
if (hasContactsAccess()) {
@@ -283,9 +281,22 @@ public class ContactsManager extends ContentObserver {
return contacts;
}
+ private class ContactsFetchTask extends AsyncTask> {
+ protected List doInBackground(Void... params) {
+ return fetchContactsSync();
+ }
+
+ protected void onPostExecute(List result) {
+ setContacts(result);
+ for (ContactsUpdatedListener listener : contactsUpdatedListeners) {
+ listener.onContactsUpdated();
+ }
+ }
+ }
+
public static String getAddressOrNumberForAndroidContact(ContentResolver resolver, Uri contactUri) {
// Phone Numbers
- String[] projection = new String[]{ ContactsContract.CommonDataKinds.Phone.NUMBER };
+ String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER };
Cursor c = resolver.query(contactUri, projection, null, null, null);
if (c != null) {
while (c.moveToNext()) {
diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java
index 43050a038..f51a62717 100644
--- a/src/org/linphone/LinphoneActivity.java
+++ b/src/org/linphone/LinphoneActivity.java
@@ -1264,7 +1264,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
ContactsManager.getInstance().enableContactsAccess();
}
- ContactsManager.getInstance().fetchContacts();
+ ContactsManager.getInstance().fetchContactsAsync();
fetchedContactsOnce = true;
break;
case PERMISSIONS_RECORD_AUDIO_ECHO_CANCELLER:
@@ -1289,7 +1289,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
if (contacts == PackageManager.PERMISSION_GRANTED && !fetchedContactsOnce) {
ContactsManager.getInstance().enableContactsAccess();
- ContactsManager.getInstance().fetchContacts();
+ ContactsManager.getInstance().fetchContactsAsync();
fetchedContactsOnce = true;
} else {
checkAndRequestReadContactsPermission();
diff --git a/src/org/linphone/LinphoneContact.java b/src/org/linphone/LinphoneContact.java
index 43453a62b..a4850dd0e 100644
--- a/src/org/linphone/LinphoneContact.java
+++ b/src/org/linphone/LinphoneContact.java
@@ -400,7 +400,7 @@ public class LinphoneContact implements Serializable, Comparable