package com.openims.view.chat; import java.util.ArrayList; import org.jivesoftware.smack.packet.Presence; import android.content.Context; import android.database.Cursor; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.smit.EasyLauncher.R; import com.openims.model.chat.RosterDataBase; import com.openims.utility.PushServiceUtil; import com.openims.view.chat.OnAvater.OnAvaterListener; public class MessageBoxAdapter extends BaseAdapter implements OnAvaterListener { private Context context; private ArrayList<Account> accountList = new ArrayList<Account>(10); private RosterDataBase mRosterDataBase; private int indexJId = -1; private int indexId = -1; private int indexUserName = -1; private int indexPresence = -1; private int indexUnread = -1; private int indexMsgStartId = -1; private String mMyJid; private String mSelectedJid; // private OnAvater mOnAvater; public class Account{ public Integer id; public String jId; public String userName; public Integer unReadNum; public Integer msgStartId; public boolean isOnline; @Override public boolean equals(Object o) { if(o instanceof Account){ Account a = (Account)o; return jId.equals(a.jId); } return super.equals(o); } } public MessageBoxAdapter(Context context){ this.context = context; mRosterDataBase = new RosterDataBase(context,null); } @Override public int getItemViewType(int position) { if(accountList.get(position).jId.equals(mSelectedJid)){ return 2; } return 1; } @Override public int getViewTypeCount() { return 2; } @Override public int getCount() { return accountList.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return accountList.get(position).id; } @Override public View getView(int position, View convertView, ViewGroup parent) { Account account = accountList.get(position); View view; boolean isSelected = false; if(account.jId.equals(mSelectedJid)){ isSelected = true; } if(convertView == null){ int srcId = R.layout.multi_chat_account_viewitem; if(isSelected){ srcId = R.layout.multi_chat_account_viewitem_select; } view = LayoutInflater.from(context).inflate( srcId, null); }else{ view = convertView; } if(isSelected == false){ TextView title = (TextView) view.findViewById(R.id.title); if(account.unReadNum != 0){ title.setVisibility(View.VISIBLE); title.setText(String.valueOf(account.unReadNum)); }else{ title.setVisibility(View.GONE); } } ImageView head = (ImageView)view.findViewById(R.id.imageView1); Drawable avater = mOnAvater.getAvater(account.jId, this); head.setImageDrawable(avater); if(account.isOnline){ head.setColorFilter(null); }else{ head.setColorFilter(PushServiceUtil.GREY_COLOR_FILTER); } view.setTag(account); return view; } public void close(){ mRosterDataBase.close(); } public void setSelectedJid(String jid){ mSelectedJid = jid; } public String getSelectedJid(){ return mSelectedJid; } /** * delete this account form chat list * @param position * @return if list is empty after delete return null */ public Account deleteAccount(int position){ accountList.remove(position); int nSize = accountList.size(); if(nSize == 0){ return null; } if(position + 1 > nSize){ position--; } return accountList.get(position); } // ���� public int initAdapter(String myJid){ this.mMyJid = myJid; RosterDataBase roster = new RosterDataBase(context, mMyJid); int startId = 0; Cursor c = roster.queryHaveNewMsgRoster(); if(indexJId == -1){ indexJId = c.getColumnIndex(RosterDataBase.JID); indexId = c.getColumnIndex(RosterDataBase.ID); indexUserName = c.getColumnIndex(RosterDataBase.USER_NAME); indexPresence = c.getColumnIndex(RosterDataBase.PRESENCE); indexUnread = c.getColumnIndex(RosterDataBase.NEW_MSG_UREAD); indexMsgStartId = c.getColumnIndex(RosterDataBase.NEW_MSG_START_ID); } c.moveToFirst(); accountList.clear(); while(c.isAfterLast() == false){ Account account = new Account(); account.id = c.getInt(indexId); account.userName = c.getString(indexUserName); account.unReadNum = c.getInt(indexUnread); account.msgStartId = c.getInt(indexMsgStartId); account.jId = c.getString(indexJId); String presence = c.getString(indexPresence); if(presence.equals(Presence.Type.available.name())){ account.isOnline = true; }else{ account.isOnline = false; } accountList.add(account); c.moveToNext(); if(account.jId.equals(mSelectedJid)){ startId = account.msgStartId; } } roster.close(); return startId; } public String addAccount(long accountId, int unReadNum,int a){ Cursor cursor = mRosterDataBase.queryById(accountId); if(indexJId == -1){ indexJId = cursor.getColumnIndex(RosterDataBase.JID); indexId = cursor.getColumnIndex(RosterDataBase.ID); indexUserName = cursor.getColumnIndex(RosterDataBase.USER_NAME); indexPresence = cursor.getColumnIndex(RosterDataBase.PRESENCE); } cursor.moveToFirst(); Account account = new Account(); account.jId = cursor.getString(indexJId); int nId = accountList.indexOf(account); if(nId == -1){ account.id = cursor.getInt(indexId); account.userName = cursor.getString(indexUserName);; accountList.add(0, account); }else{ account = accountList.get(nId); account.unReadNum = account.unReadNum + unReadNum; accountList.set(nId, account); } return account.jId; } public void setOnAvater(OnAvater onAvater){ mOnAvater = onAvater; } @Override public void avater(String avaterJid, Drawable avater) { initAdapter(mMyJid); notifyDataSetChanged(); } }