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 @@ ...@@ -14,20 +14,6 @@
*/ */
package com.xabber.android.data.message; 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 android.database.Cursor;
import com.xabber.android.data.Application; import com.xabber.android.data.Application;
...@@ -45,6 +31,20 @@ import com.xabber.android.data.message.chat.ChatManager; ...@@ -45,6 +31,20 @@ import com.xabber.android.data.message.chat.ChatManager;
import com.xabber.android.data.notification.NotificationManager; import com.xabber.android.data.notification.NotificationManager;
import com.xabber.xmpp.archive.SaveMode; 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. * Chat instance.
* *
...@@ -109,6 +109,8 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -109,6 +109,8 @@ public abstract class AbstractChat extends BaseEntity {
*/ */
protected final Collection<MessageItem> sendQuery; protected final Collection<MessageItem> sendQuery;
protected Date creationTime = new Date();
protected AbstractChat(final String account, final String user) { protected AbstractChat(final String account, final String user) {
super(account, user); super(account, user);
threadId = StringUtils.randomString(12); threadId = StringUtils.randomString(12);
...@@ -120,6 +122,7 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -120,6 +122,7 @@ public abstract class AbstractChat extends BaseEntity {
historyIds = new ArrayList<Long>(); historyIds = new ArrayList<Long>();
messages = new ArrayList<MessageItem>(); messages = new ArrayList<MessageItem>();
sendQuery = new ArrayList<MessageItem>(); sendQuery = new ArrayList<MessageItem>();
updateCreationTime();
Application.getInstance().runInBackground(new Runnable() { Application.getInstance().runInBackground(new Runnable() {
@Override @Override
...@@ -267,6 +270,10 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -267,6 +270,10 @@ public abstract class AbstractChat extends BaseEntity {
} }
void openChat() { void openChat() {
if (!active) {
updateCreationTime();
}
active = true; active = true;
trackStatus = true; trackStatus = true;
} }
...@@ -672,4 +679,11 @@ public abstract class AbstractChat extends BaseEntity { ...@@ -672,4 +679,11 @@ public abstract class AbstractChat extends BaseEntity {
protected void onDisconnect() { 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; ...@@ -7,14 +7,14 @@ import android.support.v13.app.FragmentStatePagerAdapter;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.xabber.android.data.LogManager; 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.AbstractChat;
import com.xabber.android.data.message.MessageManager; import com.xabber.android.data.message.MessageManager;
import com.xabber.android.ui.ChatViewerFragment; import com.xabber.android.ui.ChatViewerFragment;
import com.xabber.xmpp.address.Jid; import com.xabber.xmpp.address.Jid;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collections;
import java.util.Comparator;
public class ChatViewerAdapter extends FragmentStatePagerAdapter implements UpdatableAdapter { public class ChatViewerAdapter extends FragmentStatePagerAdapter implements UpdatableAdapter {
...@@ -26,7 +26,7 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter implements Upda ...@@ -26,7 +26,7 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter implements Upda
/** /**
* Position to insert intent. * Position to insert intent.
*/ */
private final int intentPosition; // private final int intentPosition;
private ArrayList<AbstractChat> activeChats; private ArrayList<AbstractChat> activeChats;
...@@ -36,15 +36,11 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter implements Upda ...@@ -36,15 +36,11 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter implements Upda
super(fragmentManager); super(fragmentManager);
this.finishUpdateListener = finishUpdateListener; this.finishUpdateListener = finishUpdateListener;
activeChats = new ArrayList<>(); activeChats = new ArrayList<>(MessageManager.getInstance().getActiveChats());
intent = MessageManager.getInstance().getOrCreateChat(account, intent = MessageManager.getInstance().getOrCreateChat(account, Jid.getBareAddress(user));
Jid.getBareAddress(user));
Collection<? extends BaseEntity> activeChats = MessageManager if (!activeChats.contains(intent)) {
.getInstance().getActiveChats(); intent.updateCreationTime();
if (activeChats.contains(intent)) {
intentPosition = -1;
} else {
intentPosition = activeChats.size();
} }
onChange(); onChange();
} }
...@@ -68,18 +64,19 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter implements Upda ...@@ -68,18 +64,19 @@ public class ChatViewerAdapter extends FragmentStatePagerAdapter implements Upda
@Override @Override
public void onChange() { public void onChange() {
activeChats = new ArrayList<>(MessageManager.getInstance().getActiveChats()); activeChats = new ArrayList<>(MessageManager.getInstance().getActiveChats());
if (intentPosition != -1) {
int index = activeChats.indexOf(intent); if (!activeChats.contains(intent)) {
AbstractChat chat; activeChats.add(intent);
if (index == -1) {
chat = intent;
} else {
chat = activeChats.remove(index);
}
activeChats.add(Math.min(intentPosition, activeChats.size()), chat);
} }
Collections.sort(activeChats, new Comparator<AbstractChat>() {
@Override
public int compare(AbstractChat lhs, AbstractChat rhs) {
return lhs.getCreationTime().compareTo(rhs.getCreationTime());
}
});
notifyDataSetChanged(); 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