aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/services
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2017-02-08 21:35:47 +0100
committerChristian Schneppe <christian@pix-art.de>2017-02-08 21:35:47 +0100
commit88c839371be97c8ce6acd570c55ae3e748e2e0f7 (patch)
treeee6ec74187f777dc181a3e25c235eef1f9b8739d /src/main/java/de/pixart/messenger/services
parenta13be0c48dd6a0ed94ff23295824f8635a0e5e2a (diff)
fixed scrolling and async loading of message of new conversation start
Diffstat (limited to 'src/main/java/de/pixart/messenger/services')
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java38
1 files changed, 25 insertions, 13 deletions
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index 55b87074a..5fe77667b 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -1717,6 +1717,7 @@ public class XmppConnectionService extends Service {
return conversation;
}
conversation = databaseBackend.findConversation(account, jid);
+ final boolean loadMessagesFromDb;
if (conversation != null) {
conversation.setStatus(Conversation.STATUS_AVAILABLE);
conversation.setAccount(account);
@@ -1727,8 +1728,8 @@ public class XmppConnectionService extends Service {
conversation.setMode(Conversation.MODE_SINGLE);
conversation.setContactJid(jid.toBareJid());
}
- conversation.addAll(0, databaseBackend.getMessages(conversation, Config.PAGE_SIZE));
- this.databaseBackend.updateConversation(conversation);
+ databaseBackend.updateConversation(conversation);
+ loadMessagesFromDb = conversation.messagesLoaded.compareAndSet(true,false);
} else {
String conversationName;
Contact contact = account.getRoster().getContact(jid);
@@ -1744,20 +1745,31 @@ public class XmppConnectionService extends Service {
conversation = new Conversation(conversationName, account, jid.toBareJid(),
Conversation.MODE_SINGLE);
}
- this.databaseBackend.createConversation(conversation);
+ loadMessagesFromDb = false;
}
- if (account.getXmppConnection() != null
- && account.getXmppConnection().getFeatures().mam()
- && !muc) {
- if (query == null) {
- this.mMessageArchiveService.query(conversation);
- } else {
- if (query.getConversation() == null) {
- this.mMessageArchiveService.query(conversation, query.getStart());
+ final Conversation c = conversation;
+ mDatabaseExecutor.execute(new Runnable() {
+ @Override
+ public void run() {
+ if (loadMessagesFromDb) {
+ c.addAll(0, databaseBackend.getMessages(c, Config.PAGE_SIZE));
+ updateConversationUi();
+ c.messagesLoaded.set(true);
+ }
+ if (account.getXmppConnection() != null
+ && account.getXmppConnection().getFeatures().mam()
+ && !muc) {
+ if (query == null) {
+ mMessageArchiveService.query(c);
+ } else {
+ if (query.getConversation() == null) {
+ mMessageArchiveService.query(c, query.getStart());
+ }
+ }
}
+ checkDeletedFiles(c);
}
- }
- checkDeletedFiles(conversation);
+ });
this.conversations.add(conversation);
updateConversationUi();
return conversation;