diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index a8900f71d..03f81d9ae 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -819,15 +819,15 @@ public class XmppConnectionService extends Service { } }); } - - public List getMoreMessages(Conversation conversation, - long timestamp) { + + public int loadMoreMessages(Conversation conversation, long timestamp) { List messages = databaseBackend.getMessages(conversation, 50, timestamp); for (Message message : messages) { message.setConversation(conversation); } - return messages; + conversation.getMessages().addAll(0, messages); + return messages.size(); } public List getAccounts() { diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java index e09958cb5..ea0a6f143 100644 --- a/src/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/eu/siacs/conversations/ui/ConversationFragment.java @@ -165,14 +165,15 @@ public class ConversationFragment extends Fragment { if (firstVisibleItem == 0 && messagesLoaded) { long timestamp = messageList.get(0).getTimeSent(); messagesLoaded = false; - List messages = activity.xmppConnectionService - .getMoreMessages(conversation, timestamp); - messageList.addAll(0, messages); + int size = activity.xmppConnectionService.loadMoreMessages( + conversation, timestamp); + messageList.clear(); + messageList.addAll(conversation.getMessages()); messageListAdapter.notifyDataSetChanged(); - if (messages.size() != 0) { + if (size != 0) { messagesLoaded = true; } - messagesView.setSelectionFromTop(messages.size() + 1, 0); + messagesView.setSelectionFromTop(size + 1, 0); } } }; @@ -492,7 +493,7 @@ public class ConversationFragment extends Fragment { private void messageSent() { int size = this.messageList.size(); - if (size >= 1) { + if (size >= 1 && this.messagesView.getLastVisiblePosition() != size - 1) { messagesView.setSelection(size - 1); } mEditMessage.setText("");