From 0904ba42f83aa300711f73afb9bb50454712d440 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 13 Apr 2017 00:12:23 +0200 Subject: [PATCH] use async message loading only when called from UI --- .../conversations/parser/MessageParser.java | 4 ++-- .../conversations/parser/PresenceParser.java | 2 +- .../services/XmppConnectionService.java | 23 +++++++++++-------- .../ui/ConferenceDetailsActivity.java | 2 +- .../conversations/ui/ShareWithActivity.java | 2 +- .../ui/StartConversationActivity.java | 10 ++++---- .../conversations/utils/ExceptionHelper.java | 2 +- .../xmpp/jingle/JingleConnection.java | 2 +- 8 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 8266e38212d679506d886522cd8f4da392af1a6d..cef8bd1af66cc23c97a4f63477e66a4615ce6e4c 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -192,7 +192,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece public boolean execute(Account account) { if (jid != null) { - Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, jid, true); + Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, jid, true, false); if (!conversation.getMucOptions().online()) { conversation.getMucOptions().setPassword(password); mXmppConnectionService.databaseBackend.updateConversation(conversation); @@ -415,7 +415,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece } if ((body != null || pgpEncrypted != null || axolotlEncrypted != null || oobUrl != null) && !isMucStatusMessage) { - final Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, counterpart.toBareJid(), isTypeGroupChat, false, query); + final Conversation conversation = mXmppConnectionService.findOrCreateConversation(account, counterpart.toBareJid(), isTypeGroupChat, false, query, false); final boolean conversationMultiMode = conversation.getMode() == Conversation.MODE_MULTI; if (serverMsgId == null) { diff --git a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java index 4ff11401e13a4d13bfe6ae8ec612f2d877f9c8e3..eb8593f894f40114456db862bc1abd24bd368b1c 100644 --- a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java +++ b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java @@ -253,7 +253,7 @@ public class PresenceParser extends AbstractParser implements } else { contact.setOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST); final Conversation conversation = mXmppConnectionService.findOrCreateConversation( - account, contact.getJid().toBareJid(), false); + account, contact.getJid().toBareJid(), false, false); final String statusMessage = packet.findChildContent("status"); if (statusMessage != null && !statusMessage.isEmpty() diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 56717488f4abf8d0c1dabf8d8d776acf621a8563..5c6baf9d23d1f9d0b969cf4e3f3464d7cf4ba6de 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -1413,7 +1413,7 @@ public class XmppConnectionService extends Service { if (conversation != null) { conversation.setBookmark(bookmark); } else if (bookmark.autojoin() && bookmark.getJid() != null && autojoin) { - conversation = findOrCreateConversation(account, bookmark.getJid(), true, true); + conversation = findOrCreateConversation(account, bookmark.getJid(), true, true, false); conversation.setBookmark(bookmark); } } @@ -1681,15 +1681,15 @@ public class XmppConnectionService extends Service { return null; } - public Conversation findOrCreateConversation(Account account, Jid jid, boolean muc) { - return this.findOrCreateConversation(account,jid,muc,false); + public Conversation findOrCreateConversation(Account account, Jid jid, boolean muc, final boolean async) { + return this.findOrCreateConversation(account,jid,muc,false, async); } - public Conversation findOrCreateConversation(final Account account, final Jid jid, final boolean muc, final boolean joinAfterCreate) { - return this.findOrCreateConversation(account, jid, muc, joinAfterCreate, null); + public Conversation findOrCreateConversation(final Account account, final Jid jid, final boolean muc, final boolean joinAfterCreate, final boolean async) { + return this.findOrCreateConversation(account, jid, muc, joinAfterCreate, null, async); } - public Conversation findOrCreateConversation(final Account account, final Jid jid, final boolean muc, final boolean joinAfterCreate, final MessageArchiveService.Query query) { + public Conversation findOrCreateConversation(final Account account, final Jid jid, final boolean muc, final boolean joinAfterCreate, final MessageArchiveService.Query query, final boolean async) { synchronized (this.conversations) { Conversation conversation = find(account, jid); if (conversation != null) { @@ -1728,7 +1728,7 @@ public class XmppConnectionService extends Service { loadMessagesFromDb = false; } final Conversation c = conversation; - mDatabaseExecutor.execute(new Runnable() { + final Runnable runnable = new Runnable() { @Override public void run() { if (loadMessagesFromDb) { @@ -1752,7 +1752,12 @@ public class XmppConnectionService extends Service { joinMuc(c); } } - }); + }; + if (async) { + mDatabaseExecutor.execute(runnable); + } else { + runnable.run(); + } this.conversations.add(conversation); updateConversationUi(); return conversation; @@ -2454,7 +2459,7 @@ public class XmppConnectionService extends Service { return false; } final Jid jid = Jid.fromParts(new BigInteger(64, getRNG()).toString(Character.MAX_RADIX), server, null); - final Conversation conversation = findOrCreateConversation(account, jid, true, false); + final Conversation conversation = findOrCreateConversation(account, jid, true, false, true); joinMuc(conversation, new OnConferenceJoined() { @Override public void onConferenceJoined(final Conversation conversation) { diff --git a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java index da9ba754f7a7033ec9d6b56c0163d987ea3e4fa5..b58073298ce65606d0c7c1bc32b22e6d432b38d5 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java @@ -482,7 +482,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers protected void startConversation(User user) { if (user.getRealJid() != null) { - Conversation conversation = xmppConnectionService.findOrCreateConversation(this.mConversation.getAccount(),user.getRealJid().toBareJid(),false); + Conversation conversation = xmppConnectionService.findOrCreateConversation(this.mConversation.getAccount(),user.getRealJid().toBareJid(),false,true); switchToConversation(conversation); } } diff --git a/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java b/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java index 9cb7c87ee8512bc59777b6d73077d9c8a87a4ca1..c79782fd68c0038ffd1990f9fda84951e506f794 100644 --- a/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java @@ -265,7 +265,7 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer try { conversation = xmppConnectionService - .findOrCreateConversation(account, Jid.fromString(share.contact), false); + .findOrCreateConversation(account, Jid.fromString(share.contact), false,true); } catch (final InvalidJidException e) { return; } diff --git a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java index 32f2de5cb48ba122474c080ac59d1077212777f0..35d6201aecfbf3d2fbef478f3642820059daa9e4 100644 --- a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java @@ -316,7 +316,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU protected void openConversationForContact(Contact contact) { Conversation conversation = xmppConnectionService .findOrCreateConversation(contact.getAccount(), - contact.getJid(), false); + contact.getJid(), false, true); switchToConversation(conversation); } @@ -357,7 +357,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU Toast.makeText(this, R.string.invalid_jid, Toast.LENGTH_SHORT).show(); return; } - Conversation conversation = xmppConnectionService.findOrCreateConversation(bookmark.getAccount(), jid, true, true); + Conversation conversation = xmppConnectionService.findOrCreateConversation(bookmark.getAccount(), jid, true, true, true); conversation.setBookmark(bookmark); if (!bookmark.autojoin() && getPreferences().getBoolean("autojoin", true)) { bookmark.setAutojoin(true); @@ -513,7 +513,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU account.getBookmarks().add(bookmark); xmppConnectionService.pushBookmarks(account); final Conversation conversation = xmppConnectionService - .findOrCreateConversation(account, conferenceJid, true, true); + .findOrCreateConversation(account, conferenceJid, true, true, true); conversation.setBookmark(bookmark); dialog.dismiss(); mCurrentDialog = null; @@ -521,7 +521,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU } } else { final Conversation conversation = xmppConnectionService - .findOrCreateConversation(account,conferenceJid, true, true); + .findOrCreateConversation(account,conferenceJid, true, true, true); dialog.dismiss(); mCurrentDialog = null; switchToConversation(conversation); @@ -582,7 +582,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU protected void switchToConversation(Contact contact, String body) { Conversation conversation = xmppConnectionService .findOrCreateConversation(contact.getAccount(), - contact.getJid(),false); + contact.getJid(),false,true); switchToConversation(conversation, body, false); } diff --git a/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java b/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java index 46405fd909c2e1f4c6fae7b87eb9baa3b69aad83..b3184dff19715c0610e8b15875dd6a0f1a8d2beb 100644 --- a/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java @@ -100,7 +100,7 @@ public class ExceptionHelper { Conversation conversation = null; try { conversation = service.findOrCreateConversation(finalAccount, - Jid.fromString(Config.BUG_REPORTS), false); + Jid.fromString(Config.BUG_REPORTS), false, true); } catch (final InvalidJidException ignored) { } Message message = new Message(conversation, report diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java index 38098bbed9ea9d8120bda8e72b7edb36ca08882e..a7bb669788463a4574f3f0415719b8fca514bc88 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java @@ -313,7 +313,7 @@ public class JingleConnection implements Transferable { this.mJingleStatus = JINGLE_STATUS_INITIATED; Conversation conversation = this.mXmppConnectionService .findOrCreateConversation(account, - packet.getFrom().toBareJid(), false); + packet.getFrom().toBareJid(), false, false); this.message = new Message(conversation, "", Message.ENCRYPTION_NONE); this.message.setStatus(Message.STATUS_RECEIVED); this.mStatus = Transferable.STATUS_OFFER;