From ccfbf6d5e11d549638085a1bf82acf652d6d70e5 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 16 Jan 2017 10:21:32 +0100 Subject: [PATCH] This should fix the ConcurrentModificationException in contacts list --- src/org/linphone/ChatListFragment.java | 4 +++- src/org/linphone/ContactsListFragment.java | 16 +++++++++------- src/org/linphone/ContactsManager.java | 13 +++++++------ src/org/linphone/HistoryListFragment.java | 4 +++- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/org/linphone/ChatListFragment.java b/src/org/linphone/ChatListFragment.java index 2987b8ccf..739874394 100644 --- a/src/org/linphone/ChatListFragment.java +++ b/src/org/linphone/ChatListFragment.java @@ -228,7 +228,9 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte @Override public void onContactsUpdated() { ChatListAdapter adapter = (ChatListAdapter)chatList.getAdapter(); - adapter.notifyDataSetChanged(); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } } @Override diff --git a/src/org/linphone/ContactsListFragment.java b/src/org/linphone/ContactsListFragment.java index 07b957d42..b92441214 100644 --- a/src/org/linphone/ContactsListFragment.java +++ b/src/org/linphone/ContactsListFragment.java @@ -411,14 +411,16 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O @Override public void onContactsUpdated() { ContactsListAdapter adapter = (ContactsListAdapter)contactsList.getAdapter(); - contactsList.setFastScrollEnabled(false); - if (onlyDisplayLinphoneContacts) { - adapter.updateDataSet(ContactsManager.getInstance().getSIPContacts()); - } else { - adapter.updateDataSet(ContactsManager.getInstance().getContacts()); + if (adapter != null) { + contactsList.setFastScrollEnabled(false); + if (onlyDisplayLinphoneContacts) { + adapter.updateDataSet(ContactsManager.getInstance().getSIPContacts()); + } else { + adapter.updateDataSet(ContactsManager.getInstance().getContacts()); + } + contactsList.setFastScrollEnabled(true); + contactsFetchInProgress.setVisibility(View.GONE); } - contactsList.setFastScrollEnabled(true); - contactsFetchInProgress.setVisibility(View.GONE); } public void invalidate() { diff --git a/src/org/linphone/ContactsManager.java b/src/org/linphone/ContactsManager.java index a211ecd35..b3f7bca7e 100644 --- a/src/org/linphone/ContactsManager.java +++ b/src/org/linphone/ContactsManager.java @@ -136,7 +136,6 @@ public class ContactsManager extends ContentObserver { } public synchronized List getSIPContacts() { - setContacts(contacts); return sipContacts; } @@ -411,11 +410,13 @@ public class ContactsManager extends ContentObserver { return contacts; } - protected synchronized void onProgressUpdate(List... result) { - setContacts(result[0]); - contactsCache.clear(); - for (ContactsUpdatedListener listener : contactsUpdatedListeners) { - listener.onContactsUpdated(); + protected void onProgressUpdate(List... result) { + synchronized (ContactsManager.this) { + setContacts(result[0]); + contactsCache.clear(); + for (ContactsUpdatedListener listener : contactsUpdatedListeners) { + listener.onContactsUpdated(); + } } } diff --git a/src/org/linphone/HistoryListFragment.java b/src/org/linphone/HistoryListFragment.java index 5fec54996..b9538302b 100644 --- a/src/org/linphone/HistoryListFragment.java +++ b/src/org/linphone/HistoryListFragment.java @@ -222,7 +222,9 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On @Override public void onContactsUpdated() { CallHistoryAdapter adapter = (CallHistoryAdapter)historyList.getAdapter(); - adapter.notifyDataSetChanged(); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } } @Override