Commit 2d1bd719 authored by Grigory Fedorov's avatar Grigory Fedorov

Active chats in view pager (scrolling) now sorted by creation time.

parent 892510c5
......@@ -14,20 +14,6 @@
*/
package com.xabber.android.data.message;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.packet.DelayInformation;
import android.database.Cursor;
import com.xabber.android.data.Application;
......@@ -45,6 +31,20 @@ import com.xabber.android.data.message.chat.ChatManager;
import com.xabber.android.data.notification.NotificationManager;
import com.xabber.xmpp.archive.SaveMode;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.packet.DelayInformation;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
/**
* Chat instance.
*
......@@ -109,6 +109,8 @@ public abstract class AbstractChat extends BaseEntity {
*/
protected final Collection<MessageItem> sendQuery;
protected Date creationTime = new Date();
protected AbstractChat(final String account, final String user) {
super(account, user);
threadId = StringUtils.randomString(12);
......@@ -120,6 +122,7 @@ public abstract class AbstractChat extends BaseEntity {
historyIds = new ArrayList<Long>();
messages = new ArrayList<MessageItem>();
sendQuery = new ArrayList<MessageItem>();
updateCreationTime();
Application.getInstance().runInBackground(new Runnable() {
@Override
......@@ -267,6 +270,10 @@ public abstract class AbstractChat extends BaseEntity {
}
void openChat() {
if (!active) {
updateCreationTime();
}
active = true;
trackStatus = true;
}
......@@ -672,4 +679,11 @@ public abstract class AbstractChat extends BaseEntity {
protected void onDisconnect() {
}
public Date getCreationTime() {
return creationTime;
}
public void updateCreationTime() {
creationTime.setTime(System.currentTimeMillis());
}
}
......@@ -7,14 +7,14 @@ import android.support.v13.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;
import com.xabber.android.data.LogManager;
import com.xabber.android.data.entity.BaseEntity;
import com.xabber.android.data.message.AbstractChat;
import com.xabber.android.data.message.MessageManager;
import com.xabber.android.ui.ChatViewerFragment;
import com.xabber.xmpp.address.Jid;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
public class ChatViewerAdapter extends FragmentStatePagerAdapter implements UpdatableAdapter {
......@@ -26,7 +26,7 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter implements Upda
/**
* Position to insert intent.
*/
private final int intentPosition;
// private final int intentPosition;
private ArrayList<AbstractChat> activeChats;
......@@ -36,15 +36,11 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter implements Upda
super(fragmentManager);
this.finishUpdateListener = finishUpdateListener;
activeChats = new ArrayList<>();
intent = MessageManager.getInstance().getOrCreateChat(account,
Jid.getBareAddress(user));
Collection<? extends BaseEntity> activeChats = MessageManager
.getInstance().getActiveChats();
if (activeChats.contains(intent)) {
intentPosition = -1;
} else {
intentPosition = activeChats.size();
activeChats = new ArrayList<>(MessageManager.getInstance().getActiveChats());
intent = MessageManager.getInstance().getOrCreateChat(account, Jid.getBareAddress(user));
if (!activeChats.contains(intent)) {
intent.updateCreationTime();
}
onChange();
}
......@@ -68,18 +64,19 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter implements Upda
@Override
public void onChange() {
activeChats = new ArrayList<>(MessageManager.getInstance().getActiveChats());
if (intentPosition != -1) {
int index = activeChats.indexOf(intent);
AbstractChat chat;
if (index == -1) {
chat = intent;
} else {
chat = activeChats.remove(index);
}
activeChats.add(Math.min(intentPosition, activeChats.size()), chat);
if (!activeChats.contains(intent)) {
activeChats.add(intent);
}
Collections.sort(activeChats, new Comparator<AbstractChat>() {
@Override
public int compare(AbstractChat lhs, AbstractChat rhs) {
return lhs.getCreationTime().compareTo(rhs.getCreationTime());
}
});
notifyDataSetChanged();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment