Bug #272 ยป open_chats.patch
| src/com/beem/project/beem/service/BeemChatManager.java Thu Jun 10 20:08:03 2010 +0200 โ src/com/beem/project/beem/service/BeemChatManager.java Mon Jun 14 11:28:07 2010 -0500 | ||
|---|---|---|
| 44 | 44 |
package com.beem.project.beem.service; |
| 45 | 45 | |
| 46 | 46 |
import java.util.ArrayList; |
| 47 |
import java.util.Collections; |
|
| 47 | 48 |
import java.util.HashMap; |
| 48 | 49 |
import java.util.List; |
| 49 | 50 |
import java.util.Map; |
| ... | ... | |
| 193 | 194 |
IRoster mRoster = mService.getBind().getRoster(); |
| 194 | 195 | |
| 195 | 196 |
for (ChatAdapter chat : mChats.values()) {
|
| 196 |
if (chat.getMessages().size() > 0) {
|
|
| 197 |
if (chat.getMessageCount(Message.MSG_TYPE_CHAT) > 0 || |
|
| 198 |
chat.getMessageCount(Message.MSG_TYPE_GROUP_CHAT) > 0) {
|
|
| 197 | 199 |
Contact t = mRoster.getContact(chat.getParticipant().getJID()); |
| 198 | 200 |
if (t == null) |
| 199 | 201 |
t = new Contact(chat.getParticipant().getJID()); |
| 200 | 202 |
openedChats.add(t); |
| 201 | 203 |
} |
| 202 | 204 |
} |
| 205 |
Collections.sort(openedChats, new Contact.NameComparator()); |
|
| 203 | 206 |
return openedChats; |
| 204 | 207 |
} |
| 205 | 208 | |
| src/com/beem/project/beem/service/ChatAdapter.java Thu Jun 10 20:08:03 2010 +0200 โ src/com/beem/project/beem/service/ChatAdapter.java Mon Jun 14 11:28:07 2010 -0500 | ||
|---|---|---|
| 70 | 70 |
private final Chat mAdaptee; |
| 71 | 71 |
private final Contact mParticipant; |
| 72 | 72 |
private String mState; |
| 73 |
private int[] mCounts; |
|
| 73 | 74 |
private boolean mIsOpen; |
| 74 | 75 |
private final List<Message> mMessages; |
| 75 | 76 |
private final RemoteCallbackList<IMessageListener> mRemoteListeners = new RemoteCallbackList<IMessageListener>(); |
| ... | ... | |
| 84 | 85 |
mParticipant = new Contact(chat.getParticipant()); |
| 85 | 86 |
mMessages = new LinkedList<Message>(); |
| 86 | 87 |
mAdaptee.addMessageListener(mMsgListener); |
| 88 |
mCounts = new int[4]; |
|
| 87 | 89 |
} |
| 88 | 90 | |
| 89 | 91 |
/** |
| ... | ... | |
| 111 | 113 |
try {
|
| 112 | 114 |
mAdaptee.sendMessage(send); |
| 113 | 115 |
mMessages.add(message); |
| 116 |
updateMessageCount(message, false); |
|
| 114 | 117 |
} catch (XMPPException e) {
|
| 115 | 118 |
// TODO Auto-generated catch block |
| 116 | 119 |
e.printStackTrace(); |
| ... | ... | |
| 184 | 187 |
return Collections.unmodifiableList(mMessages); |
| 185 | 188 |
} |
| 186 | 189 | |
| 190 |
public int getMessageCount(int type) {
|
|
| 191 |
int count = 0; |
|
| 192 |
switch (type) {
|
|
| 193 |
case Message.MSG_TYPE_NORMAL: |
|
| 194 |
count = mCounts[0]; |
|
| 195 |
break; |
|
| 196 |
case Message.MSG_TYPE_CHAT: |
|
| 197 |
count = mCounts[1]; |
|
| 198 |
break; |
|
| 199 |
case Message.MSG_TYPE_GROUP_CHAT: |
|
| 200 |
count = mCounts[2]; |
|
| 201 |
break; |
|
| 202 |
case Message.MSG_TYPE_ERROR: |
|
| 203 |
count = mCounts[3]; |
|
| 204 |
break; |
|
| 205 |
default: |
|
| 206 |
} |
|
| 207 |
return count; |
|
| 208 |
} |
|
| 209 | ||
| 187 | 210 |
/** |
| 188 | 211 |
* Add a message in the chat history. |
| 189 | 212 |
* @param msg the message to add |
| 190 | 213 |
*/ |
| 191 | 214 |
void addMessage(Message msg) {
|
| 192 | 215 |
if (mMessages.size() == HISTORY_MAX_SIZE) |
| 193 |
mMessages.remove(0);
|
|
| 216 |
updateMessageCount(mMessages.remove(0), true);
|
|
| 194 | 217 |
mMessages.add(msg); |
| 218 |
updateMessageCount(msg, false); |
|
| 219 |
} |
|
| 220 | ||
| 221 |
/** |
|
| 222 |
* Increment or decrement the message counts in the chat history. |
|
| 223 |
* @param msg the message to update counts |
|
| 224 |
*/ |
|
| 225 |
private void updateMessageCount(Message msg, Boolean down) {
|
|
| 226 |
int val; |
|
| 227 | ||
| 228 |
if (down) |
|
| 229 |
val = -1; |
|
| 230 |
else |
|
| 231 |
val = 1; |
|
| 232 | ||
| 233 |
switch (msg.getType()) {
|
|
| 234 |
case Message.MSG_TYPE_NORMAL: |
|
| 235 |
mCounts[0] += val; |
|
| 236 |
break; |
|
| 237 |
case Message.MSG_TYPE_CHAT: |
|
| 238 |
mCounts[1] += val; |
|
| 239 |
break; |
|
| 240 |
case Message.MSG_TYPE_GROUP_CHAT: |
|
| 241 |
mCounts[2] += val; |
|
| 242 |
break; |
|
| 243 |
case Message.MSG_TYPE_ERROR: |
|
| 244 |
mCounts[3] += val; |
|
| 245 |
break; |
|
| 246 |
default: |
|
| 247 |
} |
|
| 195 | 248 |
} |
| 196 | 249 | |
| 197 | 250 |
/** |
| src/com/beem/project/beem/service/Contact.java Thu Jun 10 20:08:03 2010 +0200 โ src/com/beem/project/beem/service/Contact.java Mon Jun 14 11:28:07 2010 -0500 | ||
|---|---|---|
| 45 | 45 | |
| 46 | 46 |
import java.util.ArrayList; |
| 47 | 47 |
import java.util.Collection; |
| 48 |
import java.util.Comparator; |
|
| 48 | 49 |
import java.util.List; |
| 49 | 50 | |
| 50 | 51 |
import org.jivesoftware.smack.RosterGroup; |
| ... | ... | |
| 422 | 423 |
return mJID.hashCode(); |
| 423 | 424 |
} |
| 424 | 425 | |
| 426 |
static public class NameComparator implements Comparator {
|
|
| 427 |
|
|
| 428 |
public boolean equals(Object a, Object b) {
|
|
| 429 |
String sa, sb; |
|
| 430 |
sa = ((Contact)a).getName(); |
|
| 431 |
sb = ((Contact)b).getName(); |
|
| 432 |
return sa.equalsIgnoreCase(sb); |
|
| 433 |
} |
|
| 434 |
|
|
| 435 |
public int compare(Object a, Object b) {
|
|
| 436 |
String sa, sb; |
|
| 437 |
sa = ((Contact)a).getName(); |
|
| 438 |
sb = ((Contact)b).getName(); |
|
| 439 |
return sa.compareToIgnoreCase(sb); |
|
| 440 |
} |
|
| 441 |
} |
|
| 425 | 442 |
} |