ConversationAdapter.java

  1package eu.siacs.conversations.ui.adapter;
  2
  3import android.content.Context;
  4import android.graphics.Color;
  5import android.graphics.Typeface;
  6import android.util.Pair;
  7import android.view.LayoutInflater;
  8import android.view.View;
  9import android.view.ViewGroup;
 10import android.widget.ArrayAdapter;
 11import android.widget.ImageView;
 12import android.widget.TextView;
 13
 14import java.util.List;
 15
 16import eu.siacs.conversations.R;
 17import eu.siacs.conversations.entities.Conversation;
 18import eu.siacs.conversations.entities.Downloadable;
 19import eu.siacs.conversations.entities.DownloadableFile;
 20import eu.siacs.conversations.entities.Message;
 21import eu.siacs.conversations.ui.ConversationActivity;
 22import eu.siacs.conversations.ui.XmppActivity;
 23import eu.siacs.conversations.utils.UIHelper;
 24
 25public class ConversationAdapter extends ArrayAdapter<Conversation> {
 26
 27	private XmppActivity activity;
 28
 29	public ConversationAdapter(XmppActivity activity,
 30			List<Conversation> conversations) {
 31		super(activity, 0, conversations);
 32		this.activity = activity;
 33	}
 34
 35	@Override
 36	public View getView(int position, View view, ViewGroup parent) {
 37		if (view == null) {
 38			LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 39			view = inflater.inflate(R.layout.conversation_list_row,parent, false);
 40		}
 41		Conversation conversation = getItem(position);
 42		if (this.activity instanceof ConversationActivity) {
 43			ConversationActivity activity = (ConversationActivity) this.activity;
 44			if (!activity.isConversationsOverviewHideable()) {
 45				if (conversation == activity.getSelectedConversation()) {
 46					view.setBackgroundColor(activity
 47							.getSecondaryBackgroundColor());
 48				} else {
 49					view.setBackgroundColor(Color.TRANSPARENT);
 50				}
 51			} else {
 52				view.setBackgroundColor(Color.TRANSPARENT);
 53			}
 54		}
 55		TextView convName = (TextView) view.findViewById(R.id.conversation_name);
 56		if (conversation.getMode() == Conversation.MODE_SINGLE || activity.useSubjectToIdentifyConference()) {
 57			convName.setText(conversation.getName());
 58		} else {
 59			convName.setText(conversation.getJid().toBareJid().toString());
 60		}
 61		TextView mLastMessage = (TextView) view.findViewById(R.id.conversation_lastmsg);
 62		TextView mTimestamp = (TextView) view.findViewById(R.id.conversation_lastupdate);
 63		ImageView imagePreview = (ImageView) view.findViewById(R.id.conversation_lastimage);
 64
 65		Message message = conversation.getLatestMessage();
 66
 67		if (!conversation.isRead()) {
 68			convName.setTypeface(null, Typeface.BOLD);
 69		} else {
 70			convName.setTypeface(null, Typeface.NORMAL);
 71		}
 72
 73		if (message.getImageParams().width > 0
 74				&& (message.getDownloadable() == null
 75				|| message.getDownloadable().getStatus() != Downloadable.STATUS_DELETED)) {
 76			mLastMessage.setVisibility(View.GONE);
 77			imagePreview.setVisibility(View.VISIBLE);
 78			activity.loadBitmap(message, imagePreview);
 79		} else {
 80			Pair<String,Boolean> preview = UIHelper.getMessagePreview(activity,message);
 81			mLastMessage.setVisibility(View.VISIBLE);
 82			imagePreview.setVisibility(View.GONE);
 83			mLastMessage.setText(preview.first);
 84			if (preview.second) {
 85				if (conversation.isRead()) {
 86					mLastMessage.setTypeface(null, Typeface.ITALIC);
 87				} else {
 88					mLastMessage.setTypeface(null,Typeface.BOLD_ITALIC);
 89				}
 90			} else {
 91				if (conversation.isRead()) {
 92					mLastMessage.setTypeface(null,Typeface.NORMAL);
 93				} else {
 94					mLastMessage.setTypeface(null,Typeface.BOLD);
 95				}
 96			}
 97		}
 98
 99		mTimestamp.setText(UIHelper.readableTimeDifference(activity,conversation.getLatestMessage().getTimeSent()));
100		ImageView profilePicture = (ImageView) view.findViewById(R.id.conversation_image);
101		profilePicture.setImageBitmap(activity.avatarService().get(conversation, activity.getPixel(56)));
102
103		return view;
104	}
105}