Merge remote-tracking branch 'remotes/origin/trz/rename' into trz/rebase

This commit is contained in:
steckbrief 2015-10-15 22:40:05 +02:00
commit e891f076f2
3 changed files with 64 additions and 36 deletions

View file

@ -1050,9 +1050,14 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
Log.d("mam", "Query in progress");
return;
}
//TODO Create a separate class for this runnable to store if messages are getting loaded or not. Not really a good idea to do this in the callback.
Runnable runnable = new Runnable() {
@Override
public void run() {
if (null == callback || !callback.isLoadingInProgress()) { // if a callback is set, ensure that there is no loading in progress
if (null != callback) {
callback.setLoadingInProgress(); // Tell the callback that the loading is in progress
}
final Account account = conversation.getAccount();
List<Message> messages = databaseBackend.getMessages(conversation, 50, timestamp);
Log.d("mam", "runnable load more messages");
@ -1076,6 +1081,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
callback.informUser(R.string.no_more_history_on_server);
}
}
}
};
mDatabaseExecutor.execute(runnable);
}
@ -2553,6 +2559,10 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
public void onMoreMessagesLoaded(int count, Conversation conversation);
public void informUser(int r);
void setLoadingInProgress();
boolean isLoadingInProgress();
}
public interface OnAccountPasswordChanged {

View file

@ -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();
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();

View file

@ -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;