diff options
author | steckbrief <steckbrief@chefmail.de> | 2015-10-15 22:40:05 +0200 |
---|---|---|
committer | steckbrief <steckbrief@chefmail.de> | 2015-10-15 22:40:05 +0200 |
commit | e891f076f2b479146fc7ecce3763bf500919df43 (patch) | |
tree | 8b6fbb891b06ac8a5a9ba59f56229d4b61183e70 /src/main/java/eu/siacs/conversations/ui/listeners | |
parent | 0265bd05bf7ef6ee14c85ae87831bcc42a4b02cd (diff) | |
parent | 7206541a7b951c03297b7cc7bec02a0f18ac7bd4 (diff) |
Merge remote-tracking branch 'remotes/origin/trz/rename' into trz/rebase
Diffstat (limited to 'src/main/java/eu/siacs/conversations/ui/listeners')
2 files changed, 32 insertions, 14 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/listeners/ConversationMoreMessagesLoadedListener.java b/src/main/java/eu/siacs/conversations/ui/listeners/ConversationMoreMessagesLoadedListener.java index 2154f8d8..02a32114 100644 --- a/src/main/java/eu/siacs/conversations/ui/listeners/ConversationMoreMessagesLoadedListener.java +++ b/src/main/java/eu/siacs/conversations/ui/listeners/ConversationMoreMessagesLoadedListener.java @@ -24,18 +24,32 @@ public class ConversationMoreMessagesLoadedListener implements XmppConnectionSer private ListView messagesView; private MessageAdapter messageListAdapter; private Toast messageLoaderToast; + /* + The current loading status + */ + private boolean loadingMessages = false; public ConversationMoreMessagesLoadedListener(SwipeRefreshLayout swipeLayout, List<Message> messageList, ConversationFragment fragment, ListView messagesView, MessageAdapter messageListAdapter) { this.swipeLayout = swipeLayout; this.messageList = messageList; + this.fragment = fragment; this.messagesView = messagesView; this.messageListAdapter = messageListAdapter; } + public void setLoadingInProgress() { + this.loadingMessages = true; + } + + public boolean isLoadingInProgress() { + return this.loadingMessages; + } + @Override public void onMoreMessagesLoaded(final int c, final Conversation conversation) { ConversationActivity activity = (ConversationActivity) fragment.getActivity(); + // Current selected conversation is not the same the messages are loaded - skip updating message view and hide loading graphic if (activity.getSelectedConversation() != conversation) { activity.runOnUiThread(new Runnable() { @Override @@ -45,6 +59,7 @@ public class ConversationMoreMessagesLoadedListener implements XmppConnectionSer }); return; } + // No new messages are loaded if (0 == c) { activity.runOnUiThread(new Runnable() { @Override @@ -56,19 +71,26 @@ public class ConversationMoreMessagesLoadedListener implements XmppConnectionSer activity.runOnUiThread(new Runnable() { @Override public void run() { - final int oldPosition = messagesView.getFirstVisiblePosition(); - int pos = 0; - View v = messagesView.getChildAt(0); - final int pxOffset = (v == null) ? 0 : v.getTop(); + final int oldPosition = messagesView.getFirstVisiblePosition(); // Always 0 - because loading starts always when hitting the top + String uuid = null; + boolean oldMessageListWasEmpty = messageList.isEmpty(); if (-1 < oldPosition && messageList.size() > oldPosition) { Message message = messageList.get(oldPosition); - String uuid = message != null ? message.getUuid() : null; - pos = getIndexOf(uuid, messageList); + uuid = message != null ? message.getUuid() : null; } - conversation.populateWithMessages(messageList); - fragment.updateStatusMessages(); + View v = messagesView.getChildAt(0); + final int pxOffset = (v == null) ? 0 : v.getTop(); + + conversation.populateWithMessages(messageList); // This overrides the old message list + fragment.updateStatusMessages(); // This adds "messages" to the list for the status messageListAdapter.notifyDataSetChanged(); - messagesView.setSelectionFromTop(pos, pxOffset); + loadingMessages = false; // Loading of messages is finished - next query can be loaded + + int pos = getIndexOf(uuid, messageList); + + if (!oldMessageListWasEmpty) { + messagesView.setSelectionFromTop(pos, pxOffset); + } if (messageLoaderToast != null) { messageLoaderToast.cancel(); @@ -99,7 +121,7 @@ public class ConversationMoreMessagesLoadedListener implements XmppConnectionSer if (uuid == null) { return 0; } - for(int i = 0; i < messages.size(); ++i) { + for (int i = 0; i < messages.size(); ++i) { if (uuid.equals(messages.get(i).getUuid())) { return i; } else { diff --git a/src/main/java/eu/siacs/conversations/ui/listeners/ConversationSwipeRefreshListener.java b/src/main/java/eu/siacs/conversations/ui/listeners/ConversationSwipeRefreshListener.java index 09a8d730..15bcaaef 100644 --- a/src/main/java/eu/siacs/conversations/ui/listeners/ConversationSwipeRefreshListener.java +++ b/src/main/java/eu/siacs/conversations/ui/listeners/ConversationSwipeRefreshListener.java @@ -2,16 +2,12 @@ package eu.siacs.conversations.ui.listeners; import android.support.v4.widget.SwipeRefreshLayout; import android.util.Log; -import android.view.View; import android.widget.ListView; -import android.widget.Toast; import java.util.List; import eu.siacs.conversations.Config; -import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.Message; -import eu.siacs.conversations.services.XmppConnectionService; import eu.siacs.conversations.ui.ConversationActivity; import eu.siacs.conversations.ui.ConversationFragment; import eu.siacs.conversations.ui.adapter.MessageAdapter; |