diff --git a/briar-android/src/org/briarproject/android/contact/ContactListActivity.java b/briar-android/src/org/briarproject/android/contact/ContactListActivity.java index 1edbd2d2a08f86a59102b9c1bc9b9ebcd6a59441..7f9298089cf30789cc3e0efa486453b565e784d4 100644 --- a/briar-android/src/org/briarproject/android/contact/ContactListActivity.java +++ b/briar-android/src/org/briarproject/android/contact/ContactListActivity.java @@ -227,10 +227,11 @@ public class ContactListActivity extends BriarActivity final Collection<PrivateMessageHeader> headers) { runOnUiThread(new Runnable() { public void run() { - ContactListItem item = adapter.findItem(c); + int position = adapter.findItemPosition(c); + ContactListItem item = adapter.getItem(position); if (item != null) { item.setHeaders(headers); - adapter.notifyDataSetChanged(); + adapter.updateItem(position, item); } } }); @@ -255,10 +256,11 @@ public class ContactListActivity extends BriarActivity private void setConnected(final ContactId c, final boolean connected) { runOnUiThread(new Runnable() { public void run() { - ContactListItem item = adapter.findItem(c); + int position = adapter.findItemPosition(c); + ContactListItem item = adapter.getItem(position); if (item != null) { item.setConnected(connected); - adapter.notifyDataSetChanged(); + adapter.notifyItemChanged(position); } } }); diff --git a/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java b/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java index 7e511ea9a431c4e914bd4f8e88d5a245f78cb140..2abe5e6ffcf4d6d40c279c976108060c1e98624e 100644 --- a/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java +++ b/briar-android/src/org/briarproject/android/contact/ContactListAdapter.java @@ -48,8 +48,13 @@ public class ContactListAdapter @Override public int compare(ContactListItem c1, ContactListItem c2) { - return (int) (c1.getTimestamp() - - c2.getTimestamp()); + // sort items by time + // and do not take unread messages into account + long time1 = c1.getTimestamp(); + long time2 = c2.getTimestamp(); + if (time1 < time2) return 1; + if (time1 > time2) return -1; + return 0; } @Override @@ -145,6 +150,10 @@ public class ContactListAdapter return contacts.get(position); } + public void updateItem(int position, ContactListItem item) { + contacts.updateItemAt(position, item); + } + public ContactListItem findItem(ContactId c) { int count = getItemCount(); for (int i = 0; i < count; i++) { @@ -154,6 +163,15 @@ public class ContactListAdapter return null; // Not found } + public int findItemPosition(ContactId c) { + int count = getItemCount(); + for (int i = 0; i < count; i++) { + ContactListItem item = getItem(i); + if (item.getContact().getId().equals(c)) return i; + } + return -1; // Not found + } + public void addAll(final List<ContactListItem> contacts) { this.contacts.addAll(contacts); } diff --git a/briar-android/src/org/briarproject/android/contact/ContactListItemComparator.java b/briar-android/src/org/briarproject/android/contact/ContactListItemComparator.java deleted file mode 100644 index db41a3ef52be317d5cc77df42369b448c023435b..0000000000000000000000000000000000000000 --- a/briar-android/src/org/briarproject/android/contact/ContactListItemComparator.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.briarproject.android.contact; - -import java.util.Comparator; - -class ContactListItemComparator implements Comparator<ContactListItem> { - - static final ContactListItemComparator INSTANCE = - new ContactListItemComparator(); - - public int compare(ContactListItem a, ContactListItem b) { - String aName = a.getContact().getAuthor().getName(); - String bName = b.getContact().getAuthor().getName(); - return String.CASE_INSENSITIVE_ORDER.compare(aName, bName); - } -}