synchronize around getting last visibile uuid

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 26 
1 file changed, 14 insertions(+), 12 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -1581,20 +1581,22 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
 		if (binding == null) {
 			return null;
 		}
-		int pos = binding.messagesView.getLastVisiblePosition();
-		if (pos >= 0) {
-			Message message = null;
-			for(int i = pos ; i >= 0; --i) {
-				message = (Message) binding.messagesView.getItemAtPosition(i);
-				if (message.getType() != Message.TYPE_STATUS) {
-					break;
+		synchronized (this.messageList) {
+			int pos = binding.messagesView.getLastVisiblePosition();
+			if (pos >= 0) {
+				Message message = null;
+				for (int i = pos; i >= 0; --i) {
+					message = (Message) binding.messagesView.getItemAtPosition(i);
+					if (message.getType() != Message.TYPE_STATUS) {
+						break;
+					}
 				}
-			}
-			if (message != null) {
-				while (message.next() != null && message.next().wasMergedIntoPrevious()) {
-					message = message.next();
+				if (message != null) {
+					while (message.next() != null && message.next().wasMergedIntoPrevious()) {
+						message = message.next();
+					}
+					return message.getUuid();
 				}
-				return message.getUuid();
 			}
 		}
 		return null;