package org.qii.weiciyuan.bean; import org.qii.weiciyuan.support.settinghelper.SettingUtility; import org.qii.weiciyuan.support.utils.ObjectToStringUtility; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; /** * User: qii * Date: 12-7-29 */ public class MessageListBean extends ListBean<MessageBean, MessageListBean> implements Parcelable { private List<MessageBean> statuses = new ArrayList<MessageBean>(); private List<AdBean> ad = new ArrayList<AdBean>(); private int removedCount = 0; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(total_number); dest.writeString(previous_cursor); dest.writeString(next_cursor); dest.writeTypedList(statuses); dest.writeTypedList(ad); dest.writeInt(removedCount); } public static final Parcelable.Creator<MessageListBean> CREATOR = new Parcelable.Creator<MessageListBean>() { public MessageListBean createFromParcel(Parcel in) { MessageListBean messageListBean = new MessageListBean(); messageListBean.total_number = in.readInt(); messageListBean.previous_cursor = in.readString(); messageListBean.next_cursor = in.readString(); messageListBean.statuses = new ArrayList<MessageBean>(); in.readTypedList(messageListBean.statuses, MessageBean.CREATOR); messageListBean.ad = new ArrayList<AdBean>(); in.readTypedList(messageListBean.ad, AdBean.CREATOR); messageListBean.removedCount = in.readInt(); return messageListBean; } public MessageListBean[] newArray(int size) { return new MessageListBean[size]; } }; private List<MessageBean> getStatuses() { return statuses; } public List<AdBean> getAd() { return ad; } public void setStatuses(List<MessageBean> statuses) { this.statuses = statuses; } @Override public int getSize() { return statuses.size(); } @Override public MessageBean getItem(int position) { return getStatuses().get(position); } @Override public List<MessageBean> getItemList() { return getStatuses(); } public int getReceivedCount() { return getSize() + removedCount; } public void removedCountPlus() { removedCount++; } @Override public void addNewData(MessageListBean newValue) { if (newValue == null || newValue.getSize() == 0) { return; } boolean receivedCountBelowRequestCount = newValue.getReceivedCount() < Integer .valueOf(SettingUtility.getMsgCount()); boolean receivedCountEqualRequestCount = newValue.getReceivedCount() >= Integer .valueOf(SettingUtility.getMsgCount()); if (receivedCountEqualRequestCount && this.getSize() > 0) { MessageBean middleUnreadItem = new MessageBean(); middleUnreadItem.setId(String.valueOf(System.currentTimeMillis())); middleUnreadItem.setMiddleUnreadItem(true); newValue.getItemList().add(middleUnreadItem); } this.getItemList().addAll(0, newValue.getItemList()); this.setTotal_number(newValue.getTotal_number()); //remove duplicate null flag, [x,y,null,null,z....] List<MessageBean> msgList = getItemList(); ListIterator<MessageBean> listIterator = msgList.listIterator(); boolean isLastItemNull = false; while (listIterator.hasNext()) { MessageBean msg = listIterator.next(); if (msg == null || msg.isMiddleUnreadItem()) { if (isLastItemNull) { listIterator.remove(); } isLastItemNull = true; } else { isLastItemNull = false; } } } @Override public void addOldData(MessageListBean oldValue) { if (oldValue != null && oldValue.getSize() > 1) { getItemList().addAll(oldValue.getItemList().subList(1, oldValue.getSize())); setTotal_number(oldValue.getTotal_number()); } } public void addMiddleData(int position, MessageListBean middleValue, boolean towardsBottom) { if (middleValue == null) { return; } if (middleValue.getSize() == 0 || middleValue.getSize() == 1) { getItemList().remove(position); return; } List<MessageBean> middleData = middleValue.getItemList().subList(1, middleValue.getSize()); String beginId = getItem(position + 1).getId(); String endId = getItem(position - 1).getId(); Iterator<MessageBean> iterator = middleData.iterator(); while (iterator.hasNext()) { MessageBean msg = iterator.next(); boolean notNull = !TextUtils.isEmpty(msg.getId()); if (notNull) { if (msg.getId().equals(beginId) || msg.getId().equals(endId)) { iterator.remove(); } } } getItemList().addAll(position, middleData); } public void replaceData(MessageListBean value) { if (value == null) { return; } getItemList().clear(); getItemList().addAll(value.getItemList()); setTotal_number(value.getTotal_number()); } public MessageListBean copy() { MessageListBean object = new MessageListBean(); object.replaceData(MessageListBean.this); return object; } @Override public String toString() { return ObjectToStringUtility.toString(this); } }