From f1a83139cf7fcbb1197005ce950a7529373748e9 Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Fri, 15 Apr 2016 11:05:02 +0100 Subject: [PATCH] Fixed flicker when loading contact list. #297 --- .../android/contact/ContactListFragment.java | 6 +++++- .../android/contact/ConversationActivity.java | 9 ++++++--- .../android/contact/ConversationAdapter.java | 8 +++++++- .../android/introduction/ContactChooserFragment.java | 7 ++++++- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java index 0556310213..18d3295eb0 100644 --- a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java +++ b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java @@ -155,6 +155,11 @@ public class ContactListFragment extends BaseEventFragment { loadContacts(); } + @Override + public void onPause() { + super.onPause(); + adapter.clear(); + } private void loadContacts() { listener.runOnDbThread(new Runnable() { @@ -195,7 +200,6 @@ public class ContactListFragment extends BaseEventFragment { private void displayContacts(final List<ContactListItem> contacts) { listener.runOnUiThread(new Runnable() { public void run() { - adapter.clear(); if (contacts.size() == 0) list.showData(); else adapter.addAll(contacts); } diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java index ae09f0a416..0fb116b668 100644 --- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java +++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java @@ -81,8 +81,8 @@ import im.delight.android.identicons.IdenticonDrawable; import static android.widget.Toast.LENGTH_SHORT; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; -import static org.briarproject.android.contact.ConversationItem.OutgoingItem; import static org.briarproject.android.contact.ConversationItem.IncomingItem; +import static org.briarproject.android.contact.ConversationItem.OutgoingItem; public class ConversationActivity extends BriarActivity implements EventListener, OnClickListener, @@ -302,6 +302,8 @@ public class ConversationActivity extends BriarActivity // so let the list know to hide progress bar list.showData(); } else { + List<ConversationItem> items = + new ArrayList<ConversationItem>(); for (PrivateMessageHeader h : headers) { ConversationMessageItem item = (ConversationMessageItem) ConversationItem @@ -309,7 +311,7 @@ public class ConversationActivity extends BriarActivity byte[] body = bodyCache.get(h.getId()); if (body == null) loadMessageBody(h); else item.setBody(body); - adapter.add(item); + items.add(item); } for (IntroductionMessage m : introductions) { ConversationItem item; @@ -322,8 +324,9 @@ public class ConversationActivity extends BriarActivity contactName, (IntroductionResponse) m); } - adapter.add(item); + items.add(item); } + adapter.addAll(items); // Scroll to the bottom list.scrollToPosition(adapter.getItemCount() - 1); } diff --git a/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java b/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java index e4c2977889..4e8267663b 100644 --- a/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java +++ b/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java @@ -18,19 +18,21 @@ import org.briarproject.api.introduction.SessionId; import org.briarproject.api.messaging.PrivateMessageHeader; import org.briarproject.util.StringUtils; +import java.util.List; + import im.delight.android.identicons.IdenticonDrawable; import static android.support.v7.util.SortedList.INVALID_POSITION; import static android.support.v7.widget.RecyclerView.ViewHolder; import static org.briarproject.android.contact.ConversationItem.INTRODUCTION_IN; import static org.briarproject.android.contact.ConversationItem.INTRODUCTION_OUT; +import static org.briarproject.android.contact.ConversationItem.IncomingItem; import static org.briarproject.android.contact.ConversationItem.MSG_IN; import static org.briarproject.android.contact.ConversationItem.MSG_IN_UNREAD; import static org.briarproject.android.contact.ConversationItem.MSG_OUT; import static org.briarproject.android.contact.ConversationItem.NOTICE_IN; import static org.briarproject.android.contact.ConversationItem.NOTICE_OUT; import static org.briarproject.android.contact.ConversationItem.OutgoingItem; -import static org.briarproject.android.contact.ConversationItem.IncomingItem; class ConversationAdapter extends RecyclerView.Adapter { @@ -367,6 +369,10 @@ class ConversationAdapter extends RecyclerView.Adapter { items.clear(); } + public void addAll(List<ConversationItem> items) { + this.items.addAll(items); + } + private static class MessageHolder extends RecyclerView.ViewHolder { public ViewGroup layout; diff --git a/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java b/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java index ec5c276797..c381291f2a 100644 --- a/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java +++ b/briar-android/src/org/briarproject/android/introduction/ContactChooserFragment.java @@ -131,6 +131,12 @@ public class ContactChooserFragment extends BaseFragment { loadContacts(); } + @Override + public void onPause() { + super.onPause(); + adapter.clear(); + } + @Override public String getUniqueTag() { return TAG; @@ -175,7 +181,6 @@ public class ContactChooserFragment extends BaseFragment { introductionActivity.runOnUiThread(new Runnable() { public void run() { adapter.setLocalAuthor(localAuthorId); - adapter.clear(); if (contacts.size() == 0) list.showData(); else adapter.addAll(contacts); } -- GitLab