From 34e6b15e3210faf3b1c276032defa5e37f2e0c9e Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 21 Jul 2016 13:53:59 +0200 Subject: [PATCH] Fetch contacts on AsyncTask --- res/layout/contacts_list.xml | 9 +++++++ src/org/linphone/ContactsListFragment.java | 9 +++++++ src/org/linphone/ContactsManager.java | 31 +++++++++++++++------- src/org/linphone/LinphoneActivity.java | 4 +-- src/org/linphone/LinphoneContact.java | 2 +- 5 files changed, 42 insertions(+), 13 deletions(-) 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