package xmpp.client.service.user.contact; import xmpp.client.service.user.User; import xmpp.client.service.user.UserList; import xmpp.client.service.user.UserState; import xmpp.client.service.user.group.GroupList; import android.content.Context; import android.graphics.Bitmap; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; public class Contact implements Parcelable, Comparable<Contact> { private final UserList mUserList; private String mUserContact; private int mUnreadMessageCount; public static final Parcelable.Creator<Contact> CREATOR = new Parcelable.Creator<Contact>() { @Override public Contact createFromParcel(Parcel in) { return new Contact(in); } @Override public Contact[] newArray(int size) { return new Contact[size]; } }; public Contact() { mUserList = new UserList(); mUnreadMessageCount = 0; } private Contact(Parcel in) { mUserList = in.readParcelable(UserList.class.getClassLoader()); mUserContact = in.readString(); mUnreadMessageCount = in.readInt(); } public Contact(User user) { this(); mUserList.add(user); } public void add(User user) { mUserList.add(user); mUserList.sort(); } public void clearUnreadMessages() { mUnreadMessageCount = 0; } @Override public int compareTo(Contact another) { return getUsers().get(0).compareTo(another.getUsers().get(0)); } public boolean contains(String address, boolean fullcheck) { for (final User user : getUsers()) { if ((!fullcheck && user.getUserLogin().equalsIgnoreCase(address)) || (fullcheck && user.getFullUserLogin().equalsIgnoreCase( address))) { return true; } } return false; } public boolean contains(User user) { for (final User user2 : getUsers()) { if (user2.equals(user)) { Log.d("ContactProvider", user.getFullUserLogin() + "==" + user2.getFullUserLogin() + ":" + getUserName()); return true; } } return false; } @Override public int describeContents() { // TODO Auto-generated method stub return 0; } public boolean equals(Contact o) { if (o.getUserName().equalsIgnoreCase(getUserName())) { return true; } return false; } @Deprecated public boolean equals(User o) { if (contains(o)) { return true; } return false; } public Bitmap getBitmap(Context mContext, boolean showIcon) { for (final User user : mUserList) { if (user.getAvatar() != null) { return user.getBitmap(mContext, showIcon); } } return getUser().getBitmap(mContext, showIcon); } public GroupList getGroups() { final GroupList groupList = new GroupList(); for (final User user : mUserList) { for (final String group : user.getGroups()) { if (!groupList.contains(group)) { groupList.add(group); } } } return groupList; } public int getUnreadMessages() { int sum = 0; for (final User user : mUserList) { sum += user.getUnreadMessages(); } return sum; } public User getUser() { return mUserList.get(0); } public String getUserContact() { return mUserContact; } public String getUserLogin() { return mUserList.get(0).getUserLogin(); } public String[] getUserLogins() { final String[] logins = new String[mUserList.size()]; int i = 0; for (final User user : mUserList) { logins[i] = user.getUserLogin(); i++; } return logins; } public String getUserName() { if (getUser() != null) { return getUser().getDisplayName(); } return null; } public UserList getUsers() { return mUserList; } public UserState getUserState() { return getUser().getUserState(); } public void increaseUnreadMessages() { mUnreadMessageCount++; } public void remove(String address) { for (final User user : mUserList) { if (user.getUserLogin().equalsIgnoreCase(address) || user.getFullUserLogin().equalsIgnoreCase(address)) { mUserList.remove(user); return; } } } public void setUserContact(String userContact) { mUserContact = userContact; } @Override public void writeToParcel(Parcel out, int flags) { out.writeParcelable(mUserList, flags); out.writeString(mUserContact); out.writeInt(mUnreadMessageCount); } }