package uk.ac.cam.echo; import android.app.Activity; import android.content.Context; import android.os.AsyncTask; import android.util.DisplayMetrics; import android.util.Log; 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 android.widget.TextView; import java.text.SimpleDateFormat; import java.util.Collections; import java.util.Date; import java.util.List; import uk.ac.cam.echo.client.ClientApi; import uk.ac.cam.echo.client.data.MessageData; import uk.ac.cam.echo.data.Message; import uk.ac.cam.echo.data.User; public class MessageAdapter extends ArrayAdapter<Message> { private Context context; private int layoutResourceId; private LayoutInflater inflater; private ListView listView; private static List<Message> data = null; private ClientApi api; private User user; // for scaling message TextViews private int width; private int height; public MessageAdapter(Context context, int layoutResourceId, List<Message> data) { super(context, layoutResourceId, data); this.context = context; this.layoutResourceId = layoutResourceId; this.data = data; this.inflater = ((Activity)context).getLayoutInflater(); DisplayMetrics metrics = context.getResources().getDisplayMetrics(); width = metrics.widthPixels; height = metrics.heightPixels; } public static MessageAdapter newInstance(Context context, int layoutResourceId, List<Message> data, ClientApi api, User user) { MessageAdapter adapter = new MessageAdapter(context, layoutResourceId, data); adapter.setApi(api); adapter.setUser(user); return adapter; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; MessageHolder holder; int type = getItemViewType(position); if(row == null) { if(type == 0) { // home row = inflater.inflate(R.layout.message_row_home, parent, false); } else { // remote row = inflater.inflate(R.layout.message_row_remote, parent, false); } holder = new MessageHolder(); holder.user = (TextView)row.findViewById(R.id.userText); holder.time = (TextView)row.findViewById(R.id.dateText); holder.contents = (TextView)row.findViewById(R.id.message); row.setTag(holder); } else { holder = (MessageHolder)row.getTag(); } Message message = data.get(position); String user = message.getSenderName(); long time = message.getTimeStamp(); Date date = new Date(time); SimpleDateFormat formatter = new SimpleDateFormat("dd/MM\nHH:mm"); String timeString = formatter.format(date); String contents = message.getContents(); holder.contents.setMaxWidth((int) (width*0.66)); holder.contents.setMinWidth(width/3); holder.user.setText(user); holder.contents.setText(contents); holder.time.setText(timeString); return row; } public void updateMessage(Message m) { add(m); Log.d("LISTEN", "adding new m"); notifyDataSetChanged(); listView.setSelection(getCount()); } public void setListView(ListView lv) { listView = lv; } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { //return (data.get(position).getSenderName()).equals(user.getDisplayName())? 0 : 1; return ((MessageData)data.get(position)).getSenderId() == user.getId() ? 0 : 1; } @Override public int getCount() { return data == null ? 0 : data.size(); } private void setApi(ClientApi clientApi) { api = clientApi; } private void setUser(User u) { user = u; } static class MessageHolder { ImageView img; TextView user; TextView time; TextView contents; } }