keep reference to previous and next message in message

This commit is contained in:
iNPUTmice 2014-10-20 17:01:37 +02:00
parent a8a37ec08d
commit 0bb2c3c4d5
3 changed files with 28 additions and 13 deletions

View file

@ -57,8 +57,8 @@ public class Conversation extends AbstractEntity {
private String nextPresence;
private transient ArrayList<Message> messages = new ArrayList<Message>();
private transient Account account = null;
protected ArrayList<Message> messages = new ArrayList<Message>();
protected Account account = null;
private transient SessionImpl otrSession;

View file

@ -62,6 +62,9 @@ public class Message extends AbstractEntity {
protected Downloadable downloadable = null;
public boolean markable = false;
private Message mNextMessage = null;
private Message mPreviousMessage = null;
private Message() {
}
@ -293,22 +296,35 @@ public class Message extends AbstractEntity {
}
public Message next() {
int index = this.conversation.getMessages().indexOf(this);
if (index < 0 || index >= this.conversation.getMessages().size() - 1) {
return null;
if (this.mNextMessage == null) {
synchronized (this.conversation.messages) {
int index = this.conversation.messages.indexOf(this);
if (index < 0
|| index >= this.conversation.getMessages().size() - 1) {
this.mNextMessage = null;
} else {
return this.conversation.getMessages().get(index + 1);
this.mNextMessage = this.conversation.messages
.get(index + 1);
}
}
}
return this.mNextMessage;
}
public Message prev() {
int index = this.conversation.getMessages().indexOf(this);
if (index <= 0 || index > this.conversation.getMessages().size()) {
return null;
if (this.mPreviousMessage == null) {
synchronized (this.conversation.messages) {
int index = this.conversation.messages.indexOf(this);
if (index <= 0 || index > this.conversation.messages.size()) {
this.mPreviousMessage = null;
} else {
return this.conversation.getMessages().get(index - 1);
this.mPreviousMessage = this.conversation.messages
.get(index - 1);
}
}
}
return this.mPreviousMessage;
}
public boolean mergable(Message message) {
if (message == null) {

View file

@ -40,7 +40,6 @@ import android.util.SparseArray;
import eu.siacs.conversations.Config;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.ui.StartConversationActivity;
import eu.siacs.conversations.utils.CryptoHelper;
import eu.siacs.conversations.utils.DNSHelper;
import eu.siacs.conversations.utils.zlib.ZLibOutputStream;