scroll fixes

iNPUTmice created

Change summary

src/eu/siacs/conversations/services/XmppConnectionService.java |  8 +-
src/eu/siacs/conversations/ui/ConversationFragment.java        | 13 ++-
2 files changed, 11 insertions(+), 10 deletions(-)

Detailed changes

src/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -819,15 +819,15 @@ public class XmppConnectionService extends Service {
 			}
 		});
 	}
-
-	public List<Message> getMoreMessages(Conversation conversation,
-			long timestamp) {
+	
+	public int loadMoreMessages(Conversation conversation, long timestamp) {
 		List<Message> 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<Account> getAccounts() {

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<Message> 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("");