package eoc.studio.voicecard.mailbox; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import android.content.Context; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import eoc.studio.voicecard.R; import eoc.studio.voicecard.utils.ListUtility; import eoc.studio.voicecard.utils.NetworkUtility; public class MailsAdapterView extends BaseAdapter { private static final String TAG = "MailsAdapterView"; public static final int NOCHECKED = 0; public static final int CHECKED = 1; private Context context; private List<Mail> mails; private Set<String> selecedMail; private MailsAdapterData mailsAdapterData; private boolean isPause = false; private boolean isInterrupt = false; private int count = 0; // View private ListView showMails; private LayoutInflater layoutInflater; private ViewTag viewTag; public MailsAdapterView(Context context, List<Mail> mails, MailsAdapterData mailsAdapterData, ListView showMails) { this.context = context; this.mails = mails; this.mailsAdapterData = mailsAdapterData; this.showMails = showMails; layoutInflater = LayoutInflater.from(context); isPause = false; isInterrupt = false; selecedMail = new HashSet<String>(); DownlaodImageThread downlaodImageThread = new DownlaodImageThread(mails, 0, mails.size()); downlaodImageThread.start(); } @Override public int getCount() { return mails.size(); } @Override public Object getItem(int position) { return mails.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = layoutInflater.inflate(R.layout.mailbox_list_item, null); viewTag = new ViewTag( (RelativeLayout) convertView.findViewById(R.id.glb_mailbox_list_item_rlyt), (ImageView) convertView.findViewById(R.id.glb_mailbox_list_item_check_icon), (ImageView) convertView.findViewById(R.id.glb_mailbox_list_item_img), (TextView) convertView.findViewById(R.id.glb_mailbox_list_item_tv_subject), (TextView) convertView.findViewById(R.id.glb_mailbox_list_item_tv_sendtime), (ImageView) convertView.findViewById(R.id.glb_mailbox_list_item_new_icon), (LinearLayout) convertView .findViewById(R.id.glb_mailbox_list_item_llyt_check_icon)); convertView.setTag(viewTag); } else { viewTag = (ViewTag) convertView.getTag(); } convertView.setId(ListUtility.BASE_INDEX + position); // checkIcon if (position < mails.size()) { int checkState = mails.get(position).getCheckState(); Log.d(TAG, "checkState is " + checkState); if (checkState == CHECKED) { viewTag.checkIcon.setImageDrawable(context.getResources().getDrawable( R.drawable.icon_checkbox_check)); viewTag.itemLayout.setBackgroundColor(context.getResources().getColor( R.color.mail_box_list_item_selected_bg_color)); } else { viewTag.checkIcon.setImageDrawable(context.getResources().getDrawable( R.drawable.icon_checkbox)); viewTag.itemLayout.setBackgroundColor(context.getResources().getColor( R.color.transparent_text)); } // itemImg byte[] img = mails.get(position).getSenderImg(); if (img != null) { viewTag.itemImg.setBackgroundDrawable(new BitmapDrawable(context.getResources(), BitmapFactory.decodeByteArray(img, 0, img.length))); } else { viewTag.itemImg.setBackgroundDrawable(context.getResources().getDrawable( R.drawable.user_reflect)); } // subject viewTag.subject.setText(mails.get(position).getSendedFromName()); // sendTime viewTag.sendTime.setText(mails.get(position).getSendedTime()); // newIcon int newState = mails.get(position).getNewState(); if (newState == MailsAdapterData.NEW) { viewTag.newIcon.setVisibility(View.VISIBLE); } else { viewTag.newIcon.setVisibility(View.INVISIBLE); } setUIEvent(position, convertView, parent); } return convertView; } private void setUIEvent(final int position, View convertView, ViewGroup parent) { viewTag.checkIconLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int checkState = mails.get(position).getCheckState(); Log.d(TAG, "click checkState is " + checkState); if (checkState == CHECKED) { viewTag.checkIcon.setImageDrawable(context.getResources().getDrawable( R.drawable.icon_checkbox)); viewTag.itemLayout.setBackgroundColor(context.getResources().getColor( R.color.mail_box_list_item_selected_bg_color)); mails.get(position).setCheckState(NOCHECKED); selecedMail.remove(mails.get(position).getRowId()); if (count > 0) { count--; } ((MailboxActivity) context).showMailInfo(count); ((MailboxActivity) context).setButtonString(false, R.string.select_all); } else { viewTag.checkIcon.setImageDrawable(context.getResources().getDrawable( R.drawable.icon_checkbox_check)); viewTag.itemLayout.setBackgroundColor(context.getResources().getColor( R.color.transparent_text)); mails.get(position).setCheckState(CHECKED); selecedMail.add(mails.get(position).getRowId()); if (count < mails.size()) { count++; } ((MailboxActivity) context).showMailInfo(count); if (count == mails.size()) { ((MailboxActivity) context).setButtonString(true, R.string.deselect_all); } } MailsAdapterView.this.notifyDataSetChanged(); } }); } public void selectAll() { for (Mail mail : mails) { mail.setCheckState(CHECKED); selecedMail.add(mail.getRowId()); } MailsAdapterView.this.notifyDataSetChanged(); count = mails.size(); ((MailboxActivity) context).showMailInfo(count); } public void deselectAll() { for (Mail mail : mails) { mail.setCheckState(NOCHECKED); } selecedMail.clear(); MailsAdapterView.this.notifyDataSetChanged(); count = 0; ((MailboxActivity) context).showMailInfo(count); } public Set<String> getSelectedItem() { return selecedMail; } public void clearData() { for (Iterator it = mails.iterator(); it.hasNext();) { it.remove(); } mails.clear(); selecedMail.clear(); } public void setPause(boolean isPause) { this.isPause = isPause; } public void setInterrupt(boolean isInterrupt) { this.isInterrupt = isInterrupt; } public void loadImagefromPosition(int startPostion, int endPosition) { if (startPostion > 0 && endPosition <= mails.size()) { DownlaodImageThread downlaodImageThread = new DownlaodImageThread(mails.subList( startPostion, endPosition), startPostion, endPosition); downlaodImageThread.start(); } } private Handler showImgHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what < mails.size()) { Log.d(TAG, "showImgHandler === msg.what === " + msg.what); if (mails.get(msg.what).getSenderImg() == null) { Log.d(TAG, "mails is null"); if (showMails.findViewById(ListUtility.BASE_INDEX + msg.what) != null) { viewTag = (ViewTag) showMails.findViewById( ListUtility.BASE_INDEX + msg.what).getTag(); } else { Log.d(TAG, "mails.get(msg.what) is null"); } } else { Log.d(TAG, "mails not null"); if (showMails.findViewById(ListUtility.BASE_INDEX + msg.what) != null) { viewTag = (ViewTag) showMails.findViewById( ListUtility.BASE_INDEX + msg.what).getTag(); byte[] img = mails.get(msg.what).getSenderImg(); viewTag.itemImg .setBackgroundDrawable(new BitmapDrawable(context.getResources(), BitmapFactory.decodeByteArray(img, 0, img.length))); } else { Log.d(TAG, "mails.get(msg.what) not null but findView is null"); } } } } }; class ViewTag { RelativeLayout itemLayout; ImageView checkIcon; ImageView itemImg; TextView subject; TextView sendTime; ImageView newIcon; LinearLayout checkIconLayout; public ViewTag(RelativeLayout itemLayout, ImageView checkIcon, ImageView itemImg, TextView subject, TextView sendTime, ImageView newIcon, LinearLayout checkIconLayout) { this.checkIcon = checkIcon; this.itemImg = itemImg; this.subject = subject; this.sendTime = sendTime; this.newIcon = newIcon; this.checkIconLayout = checkIconLayout; this.itemLayout = itemLayout; } } private class DownlaodImageThread extends Thread { List<Mail> mails; int startPosition; int endPosition; public DownlaodImageThread(List<Mail> mails, int startPosition, int endPosition) { this.mails = mails; this.startPosition = startPosition; this.endPosition = endPosition; } @Override public void run() { Log.d(TAG, "mails size === " + mails.size()); Log.d(TAG, "startPosition === " + startPosition); Log.d(TAG, "endPosition === " + endPosition); for (int i = startPosition; i < endPosition; i++) { if (isInterrupt) { break; } if (!isPause) { int position = i - startPosition; if (position < mails.size()) { Mail mail = mails.get(position); byte[] mailImg = mail.getSenderImg(); if (mailImg == null) { mailImg = NetworkUtility.getWebImage(mail.getSenderImgLink()); mailsAdapterData.updateImg(mail.getRowId(), mailImg); if (position < mails.size()) mails.get(position).setSenderImg(mailImg); } showImgHandler.sendMessage(showImgHandler.obtainMessage(i)); } else { break; } } else { break; } } Log.d(TAG, "Download img finish() "); } } }