/** * */ package com.photoshare.msg.view; import android.content.Context; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import com.photoshare.common.IObserver; import com.photoshare.msg.MessageItem; import com.photoshare.msg.MessageList; import com.photoshare.tabHost.R; import com.photoshare.utils.async.AsyncUtils; /** * @author Aron * */ public class MessageQueueView { private Context context; private View baseView; private AsyncUtils async; private ListView msgQueue; private MessageList messages; private MsgQueueAdapter adapter; /** * @param context * @param baseView * @param async * @param messages */ public MessageQueueView(Context context, View baseView, AsyncUtils async, MessageList messages) { super(); this.context = context; this.baseView = baseView; this.async = async; this.messages = messages; } public void applyView() { messages.registerListener(onModifyListener); msgQueue = (ListView) baseView.findViewById(R.id.messageQueue); adapter = new MsgQueueAdapter(); msgQueue.setAdapter(adapter); } private class MsgQueueAdapter extends ArrayAdapter<MessageItem> { /** * @param context * @param textViewResourceId * @param objects */ public MsgQueueAdapter() { super(context, 0, messages.getList()); } @Override public View getView(int position, View convertView, ViewGroup parent) { View rowView = convertView; MessageItem item; MessageQueueItemView itemView; LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (rowView == null) { rowView = inflater.inflate(R.layout.simple_list_item_message, null); item = getItem(position); itemView = new MessageQueueItemView(rowView, item, async); itemView.registerListener(messageListener); rowView.setTag(itemView); } else { itemView = (MessageQueueItemView) rowView.getTag(); } itemView.applyView(); return rowView; } public void notifyDataChanged() { notifyDataSetChanged(); } } private MessageQueueItemView.MessageListener messageListener = new MessageQueueItemView.MessageListener() { public void OnResend(MessageItem message, IObserver<Boolean> observer) { // TODO Auto-generated method stub if (listener != null) { listener.OnMsgClicked(message, observer); } } public void OnImageLoaded(ImageView imageView, Drawable drawable, String url) { if (listener != null) { listener.OnImageLoaded(imageView, drawable, url); } } public void OnImageDefault(ImageView imageView) { if (listener != null) { listener.OnImageDefault(imageView); } } }; private MessageList.OnModifyListener onModifyListener = new MessageList.OnModifyListener() { public void OnRemove(MessageItem item) { adapter.notifyDataChanged(); } public void OnAdd(MessageItem item) { adapter.notifyDataChanged(); } }; private OnMsgListener listener; public interface OnMsgListener { public void OnMsgClicked(MessageItem message, IObserver<Boolean> observer); public void OnImageLoaded(ImageView image, Drawable drawable, String url); public void OnImageDefault(ImageView image); } public void registerListener(OnMsgListener listener) { this.listener = listener; } }