From c0267bb8f6cdbea4f4b42488b79a15a235dcf977 Mon Sep 17 00:00:00 2001 From: lookshe Date: Tue, 22 Mar 2016 00:16:54 +0100 Subject: Fixes FS#87 - Crash on load messages after delete account --- .../conversationsplus/services/XmppConnectionService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/thedevstack/conversationsplus/services/XmppConnectionService.java b/src/main/java/de/thedevstack/conversationsplus/services/XmppConnectionService.java index 3678288d..943c8dff 100644 --- a/src/main/java/de/thedevstack/conversationsplus/services/XmppConnectionService.java +++ b/src/main/java/de/thedevstack/conversationsplus/services/XmppConnectionService.java @@ -1271,7 +1271,11 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa callback.onMoreMessagesLoaded(0, conversation); } } else { - Logging.d("mam", ((!conversation.hasMessagesLeftOnServer()) ? "no" : "") + " more messages left on server, mam " + ((account.getXmppConnection().getFeatures().mam()) ? "" : "not") + " activated, account is " + ((account.isOnlineAndConnected()) ? "" : "not") + " online or connected)"); + Logging.d("mam", ((!conversation.hasMessagesLeftOnServer()) ? "no" : "") + + " more messages left on server, mam " + + ((account.isOnlineAndConnected() && account.getXmppConnection().getFeatures().mam()) ? "" : "not") + + " activated, account is " + ((account.isOnlineAndConnected()) ? "" : "not") + + " online or connected)"); callback.onMoreMessagesLoaded(0, conversation); callback.informUser(R.string.no_more_history_on_server); } -- cgit v1.2.3 From 02f958ce7687eeff0eaae7da372bad4b65f78596 Mon Sep 17 00:00:00 2001 From: lookshe Date: Tue, 22 Mar 2016 00:46:18 +0100 Subject: Correct notifications to user if swiping with disabled or not connected account (FS#159) --- .../ConversationSwipeRefreshListener.java | 62 +++++++++++++--------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/src/main/java/de/thedevstack/conversationsplus/ui/listeners/ConversationSwipeRefreshListener.java b/src/main/java/de/thedevstack/conversationsplus/ui/listeners/ConversationSwipeRefreshListener.java index dede54ca..6dc9f4a4 100644 --- a/src/main/java/de/thedevstack/conversationsplus/ui/listeners/ConversationSwipeRefreshListener.java +++ b/src/main/java/de/thedevstack/conversationsplus/ui/listeners/ConversationSwipeRefreshListener.java @@ -10,6 +10,7 @@ import java.util.List; import de.thedevstack.android.logcat.Logging; import de.thedevstack.conversationsplus.Config; import de.thedevstack.conversationsplus.R; +import de.thedevstack.conversationsplus.entities.Account; import de.thedevstack.conversationsplus.entities.Conversation; import de.thedevstack.conversationsplus.entities.Message; import de.thedevstack.conversationsplus.services.MessageArchiveService; @@ -24,10 +25,12 @@ public class ConversationSwipeRefreshListener implements SwipyRefreshLayout.OnRe private List messageList; private ConversationFragment fragment; private ConversationMoreMessagesLoadedListener listener; + private SwipyRefreshLayout swipeLayout; public ConversationSwipeRefreshListener(List messageList, SwipyRefreshLayout swipeLayout, ConversationFragment fragment, ListView messagesView, MessageAdapter messageListAdapter) { this.messageList = messageList; this.fragment = fragment; + this.swipeLayout = swipeLayout; this.listener = new ConversationMoreMessagesLoadedListener(swipeLayout, messageList, fragment, messagesView, messageListAdapter); } @@ -35,33 +38,42 @@ public class ConversationSwipeRefreshListener implements SwipyRefreshLayout.OnRe public void onRefresh(SwipyRefreshLayoutDirection direction) { Logging.d(Config.LOGTAG, "Refresh swipe container"); Logging.d(Config.LOGTAG, "Refresh direction " + direction); - synchronized (this.messageList) { - long timestamp; - if (SwipyRefreshLayoutDirection.TOP == direction) { // Load history -> messages sent/received before first message in database - if (messageList.isEmpty()) { - timestamp = System.currentTimeMillis(); - } else { - timestamp = this.messageList.get(0).getTimeSent(); // works only because of the ordering (last msg = first msg in list) + final ConversationActivity activity = (ConversationActivity) fragment.getActivity(); + if (activity.getSelectedConversation().getAccount().getStatus() != Account.State.DISABLED) { + synchronized (this.messageList) { + long timestamp; + if (SwipyRefreshLayoutDirection.TOP == direction) { // Load history -> messages sent/received before first message in database + if (messageList.isEmpty()) { + timestamp = System.currentTimeMillis(); + } else { + timestamp = this.messageList.get(0).getTimeSent(); // works only because of the ordering (last msg = first msg in list) + } + this.listener.setLoadHistory(true); + activity.xmppConnectionService.loadMoreMessages(activity.getSelectedConversation(), timestamp, this.listener); + } else if (SwipyRefreshLayoutDirection.BOTTOM == direction) { // load messages sent/received between last received or last session establishment and now + if (activity.getSelectedConversation().getAccount().isOnlineAndConnected()) { + Logging.d("mam", "loading missing messages from mam (last session establishing or last received message)"); + long lastSessionEstablished = this.getTimestampOfLastSessionEstablished(activity.getSelectedConversation()); + long lastReceivedMessage = this.getTimestampOfLastReceivedOrTransmittedMessage(); + long startTimestamp = Math.min(lastSessionEstablished, lastReceivedMessage); + MessageArchiveService.Query query = activity.xmppConnectionService.getMessageArchiveService().query(activity.getSelectedConversation(), startTimestamp, System.currentTimeMillis(), this.listener); + if (query != null) { + this.listener.setLoadHistory(false); + } else { + Logging.d("mam", "no query built - no messages loaded"); + this.listener.onMoreMessagesLoaded(0, activity.getSelectedConversation()); + this.listener.informUser(R.string.no_more_history_on_server); + } + this.listener.informUser(R.string.fetching_history_from_server); + } else { + this.listener.informUser(R.string.not_connected_try_again); + swipeLayout.setRefreshing(false); + } } - ConversationActivity activity = (ConversationActivity) fragment.getActivity(); - this.listener.setLoadHistory(true); - activity.xmppConnectionService.loadMoreMessages(activity.getSelectedConversation(), timestamp, this.listener); - } else if (SwipyRefreshLayoutDirection.BOTTOM == direction) { // load messages sent/received between last received or last session establishment and now - Logging.d("mam", "loading missing messages from mam (last session establishing or last received message)"); - final ConversationActivity activity = (ConversationActivity) fragment.getActivity(); - long lastSessionEstablished = this.getTimestampOfLastSessionEstablished(activity.getSelectedConversation()); - long lastReceivedMessage = this.getTimestampOfLastReceivedOrTransmittedMessage(); - long startTimestamp = Math.min(lastSessionEstablished, lastReceivedMessage); - MessageArchiveService.Query query = activity.xmppConnectionService.getMessageArchiveService().query(activity.getSelectedConversation(), startTimestamp, System.currentTimeMillis(), this.listener); - if (query != null) { - this.listener.setLoadHistory(false); - } else { - Logging.d("mam", "no query built - no messages loaded"); - this.listener.onMoreMessagesLoaded(0, activity.getSelectedConversation()); - this.listener.informUser(R.string.no_more_history_on_server); - } - this.listener.informUser(R.string.fetching_history_from_server); } + } else { + this.listener.informUser(R.string.this_account_is_disabled); + swipeLayout.setRefreshing(false); } Logging.d(Config.LOGTAG, "End Refresh swipe container"); } -- cgit v1.2.3