Merge branch '297-flickering-contacts' into 'master'

Fix flicker when loading contact list

Fixes #297.

See merge request !144
This commit is contained in:
Ernir Erlingsson
2016-04-18 08:57:54 +00:00
4 changed files with 24 additions and 6 deletions

View File

@@ -155,6 +155,11 @@ public class ContactListFragment extends BaseEventFragment {
loadContacts(); loadContacts();
} }
@Override
public void onPause() {
super.onPause();
adapter.clear();
}
private void loadContacts() { private void loadContacts() {
listener.runOnDbThread(new Runnable() { listener.runOnDbThread(new Runnable() {
@@ -195,7 +200,6 @@ public class ContactListFragment extends BaseEventFragment {
private void displayContacts(final List<ContactListItem> contacts) { private void displayContacts(final List<ContactListItem> contacts) {
listener.runOnUiThread(new Runnable() { listener.runOnUiThread(new Runnable() {
public void run() { public void run() {
adapter.clear();
if (contacts.size() == 0) list.showData(); if (contacts.size() == 0) list.showData();
else adapter.addAll(contacts); else adapter.addAll(contacts);
} }

View File

@@ -81,8 +81,8 @@ import im.delight.android.identicons.IdenticonDrawable;
import static android.widget.Toast.LENGTH_SHORT; import static android.widget.Toast.LENGTH_SHORT;
import static java.util.logging.Level.INFO; import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING; 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.IncomingItem;
import static org.briarproject.android.contact.ConversationItem.OutgoingItem;
public class ConversationActivity extends BriarActivity public class ConversationActivity extends BriarActivity
implements EventListener, OnClickListener, implements EventListener, OnClickListener,
@@ -302,6 +302,8 @@ public class ConversationActivity extends BriarActivity
// so let the list know to hide progress bar // so let the list know to hide progress bar
list.showData(); list.showData();
} else { } else {
List<ConversationItem> items =
new ArrayList<ConversationItem>();
for (PrivateMessageHeader h : headers) { for (PrivateMessageHeader h : headers) {
ConversationMessageItem item = ConversationMessageItem item =
(ConversationMessageItem) ConversationItem (ConversationMessageItem) ConversationItem
@@ -309,7 +311,7 @@ public class ConversationActivity extends BriarActivity
byte[] body = bodyCache.get(h.getId()); byte[] body = bodyCache.get(h.getId());
if (body == null) loadMessageBody(h); if (body == null) loadMessageBody(h);
else item.setBody(body); else item.setBody(body);
adapter.add(item); items.add(item);
} }
for (IntroductionMessage m : introductions) { for (IntroductionMessage m : introductions) {
ConversationItem item; ConversationItem item;
@@ -322,8 +324,9 @@ public class ConversationActivity extends BriarActivity
contactName, contactName,
(IntroductionResponse) m); (IntroductionResponse) m);
} }
adapter.add(item); items.add(item);
} }
adapter.addAll(items);
// Scroll to the bottom // Scroll to the bottom
list.scrollToPosition(adapter.getItemCount() - 1); list.scrollToPosition(adapter.getItemCount() - 1);
} }

View File

@@ -18,19 +18,21 @@ import org.briarproject.api.introduction.SessionId;
import org.briarproject.api.messaging.PrivateMessageHeader; import org.briarproject.api.messaging.PrivateMessageHeader;
import org.briarproject.util.StringUtils; import org.briarproject.util.StringUtils;
import java.util.List;
import im.delight.android.identicons.IdenticonDrawable; import im.delight.android.identicons.IdenticonDrawable;
import static android.support.v7.util.SortedList.INVALID_POSITION; import static android.support.v7.util.SortedList.INVALID_POSITION;
import static android.support.v7.widget.RecyclerView.ViewHolder; 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_IN;
import static org.briarproject.android.contact.ConversationItem.INTRODUCTION_OUT; 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;
import static org.briarproject.android.contact.ConversationItem.MSG_IN_UNREAD; 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.MSG_OUT;
import static org.briarproject.android.contact.ConversationItem.NOTICE_IN; 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.NOTICE_OUT;
import static org.briarproject.android.contact.ConversationItem.OutgoingItem; import static org.briarproject.android.contact.ConversationItem.OutgoingItem;
import static org.briarproject.android.contact.ConversationItem.IncomingItem;
class ConversationAdapter extends RecyclerView.Adapter { class ConversationAdapter extends RecyclerView.Adapter {
@@ -367,6 +369,10 @@ class ConversationAdapter extends RecyclerView.Adapter {
items.clear(); items.clear();
} }
public void addAll(List<ConversationItem> items) {
this.items.addAll(items);
}
private static class MessageHolder extends RecyclerView.ViewHolder { private static class MessageHolder extends RecyclerView.ViewHolder {
public ViewGroup layout; public ViewGroup layout;

View File

@@ -131,6 +131,12 @@ public class ContactChooserFragment extends BaseFragment {
loadContacts(); loadContacts();
} }
@Override
public void onPause() {
super.onPause();
adapter.clear();
}
@Override @Override
public String getUniqueTag() { public String getUniqueTag() {
return TAG; return TAG;
@@ -175,7 +181,6 @@ public class ContactChooserFragment extends BaseFragment {
introductionActivity.runOnUiThread(new Runnable() { introductionActivity.runOnUiThread(new Runnable() {
public void run() { public void run() {
adapter.setLocalAuthor(localAuthorId); adapter.setLocalAuthor(localAuthorId);
adapter.clear();
if (contacts.size() == 0) list.showData(); if (contacts.size() == 0) list.showData();
else adapter.addAll(contacts); else adapter.addAll(contacts);
} }