got rid of copyonwrite array list for messages

This commit is contained in:
iNPUTmice 2014-10-19 23:13:55 +02:00
parent e8bf75d79b
commit a201f9e53f
4 changed files with 26 additions and 20 deletions

View file

@ -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);
}
}
}

View file

@ -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()) {

View file

@ -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;

View file

@ -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) {