got rid of copyonwrite array list for messages

iNPUTmice created

Change summary

src/eu/siacs/conversations/entities/Conversation.java        | 30 +++--
src/eu/siacs/conversations/parser/MessageParser.java         |  2 
src/eu/siacs/conversations/persistance/DatabaseBackend.java  | 10 +
src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java |  4 
4 files changed, 26 insertions(+), 20 deletions(-)

Detailed changes

src/eu/siacs/conversations/entities/Conversation.java 🔗

@@ -1,8 +1,8 @@
 package eu.siacs.conversations.entities;
 
 import java.security.interfaces.DSAPublicKey;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -57,7 +57,7 @@ public class Conversation extends AbstractEntity {
 
 	private String nextPresence;
 
-	private transient CopyOnWriteArrayList<Message> messages = null;
+	private transient ArrayList<Message> messages = new ArrayList<Message>();
 	private transient Account account = null;
 
 	private transient SessionImpl otrSession;
@@ -104,17 +104,6 @@ public class Conversation extends AbstractEntity {
 	}
 
 	public List<Message> getMessages() {
-		if (messages == null) {
-			this.messages = new CopyOnWriteArrayList<Message>(); // prevent null
-																	// pointer
-		}
-
-		// populate with Conversation (this)
-
-		for (Message msg : messages) {
-			msg.setConversation(this);
-		}
-
 		return messages;
 	}
 
@@ -165,7 +154,7 @@ public class Conversation extends AbstractEntity {
 		}
 	}
 
-	public void setMessages(CopyOnWriteArrayList<Message> msgs) {
+	public void setMessages(ArrayList<Message> msgs) {
 		this.messages = msgs;
 	}
 
@@ -507,4 +496,17 @@ public class Conversation extends AbstractEntity {
 			}
 		}
 	}
+	
+	public void add(Message message) {
+		message.setConversation(this);
+		synchronized (this.messages) {
+			this.messages.add(message);
+		}
+	}
+
+	public void addAll(int index, List<Message> messages) {
+		synchronized (this.messages) {
+			this.messages.addAll(index, messages);
+		}
+	}
 }

src/eu/siacs/conversations/parser/MessageParser.java 🔗

@@ -469,7 +469,7 @@ public class MessageParser extends AbstractParser implements
 			}
 		}
 		Conversation conversation = message.getConversation();
-		conversation.getMessages().add(message);
+		conversation.add(message);
 		if (packet.getType() != MessagePacket.TYPE_ERROR) {
 			if (message.getEncryption() == Message.ENCRYPTION_NONE
 					|| mXmppConnectionService.saveEncryptedMessages()) {

src/eu/siacs/conversations/persistance/DatabaseBackend.java 🔗

@@ -152,14 +152,14 @@ public class DatabaseBackend extends SQLiteOpenHelper {
 		return list;
 	}
 
-	public CopyOnWriteArrayList<Message> getMessages(
+	public ArrayList<Message> getMessages(
 			Conversation conversations, int limit) {
 		return getMessages(conversations, limit, -1);
 	}
 
-	public CopyOnWriteArrayList<Message> getMessages(Conversation conversation,
+	public ArrayList<Message> getMessages(Conversation conversation,
 			int limit, long timestamp) {
-		CopyOnWriteArrayList<Message> list = new CopyOnWriteArrayList<Message>();
+		ArrayList<Message> list = new ArrayList<Message>();
 		SQLiteDatabase db = this.getReadableDatabase();
 		Cursor cursor;
 		if (timestamp == -1) {
@@ -178,7 +178,9 @@ public class DatabaseBackend extends SQLiteOpenHelper {
 		if (cursor.getCount() > 0) {
 			cursor.moveToLast();
 			do {
-				list.add(Message.fromCursor(cursor));
+				Message message = Message.fromCursor(cursor);
+				message.setConversation(conversation);
+				list.add(message);
 			} while (cursor.moveToPrevious());
 		}
 		return list;

src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java 🔗

@@ -307,7 +307,7 @@ public class JingleConnection implements Downloadable {
 				if (supportedFile) {
 					long size = Long.parseLong(fileSize.getContent());
 					message.setBody(Long.toString(size));
-					conversation.getMessages().add(message);
+					conversation.add(message);
 					mXmppConnectionService.updateConversationUi();
 					if (size <= this.mJingleConnectionManager
 							.getAutoAcceptFileSize()) {
@@ -634,6 +634,7 @@ public class JingleConnection implements Downloadable {
 	}
 
 	private void sendFallbackToIbb() {
+		Log.d(Config.LOGTAG,"sending fallback to ibb");
 		JinglePacket packet = this.bootstrapPacket("transport-replace");
 		Content content = new Content(this.contentCreator, this.contentName);
 		this.transportId = this.mJingleConnectionManager.nextRandomId();
@@ -645,6 +646,7 @@ public class JingleConnection implements Downloadable {
 	}
 
 	private boolean receiveFallbackToIbb(JinglePacket packet) {
+		Log.d(Config.LOGTAG,"receiving fallack to ibb");
 		String receivedBlockSize = packet.getJingleContent().ibbTransport()
 				.getAttribute("block-size");
 		if (receivedBlockSize != null) {