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