ListItemAdapter.java

  1package eu.siacs.conversations.ui.adapter;
  2
  3import android.content.SharedPreferences;
  4import android.content.res.Resources;
  5import android.databinding.DataBindingUtil;
  6import android.graphics.Bitmap;
  7import android.graphics.drawable.BitmapDrawable;
  8import android.graphics.drawable.Drawable;
  9import android.os.AsyncTask;
 10import android.preference.PreferenceManager;
 11import android.view.LayoutInflater;
 12import android.view.View;
 13import android.view.ViewGroup;
 14import android.widget.ArrayAdapter;
 15import android.widget.ImageView;
 16import android.widget.TextView;
 17
 18import com.wefika.flowlayout.FlowLayout;
 19
 20import java.lang.ref.WeakReference;
 21import java.util.List;
 22import java.util.concurrent.RejectedExecutionException;
 23
 24import eu.siacs.conversations.R;
 25import eu.siacs.conversations.databinding.ContactBinding;
 26import eu.siacs.conversations.entities.ListItem;
 27import eu.siacs.conversations.ui.SettingsActivity;
 28import eu.siacs.conversations.ui.XmppActivity;
 29import eu.siacs.conversations.ui.util.AvatarWorkerTask;
 30import eu.siacs.conversations.utils.EmojiWrapper;
 31import eu.siacs.conversations.utils.IrregularUnicodeDetector;
 32import eu.siacs.conversations.utils.UIHelper;
 33import rocks.xmpp.addr.Jid;
 34
 35public class ListItemAdapter extends ArrayAdapter<ListItem> {
 36
 37	protected XmppActivity activity;
 38	private boolean showDynamicTags = false;
 39	private OnTagClickedListener mOnTagClickedListener = null;
 40	private View.OnClickListener onTagTvClick = view -> {
 41		if (view instanceof TextView && mOnTagClickedListener != null) {
 42			TextView tv = (TextView) view;
 43			final String tag = tv.getText().toString();
 44			mOnTagClickedListener.onTagClicked(tag);
 45		}
 46	};
 47
 48	public ListItemAdapter(XmppActivity activity, List<ListItem> objects) {
 49		super(activity, 0, objects);
 50		this.activity = activity;
 51	}
 52
 53
 54	public void refreshSettings() {
 55		SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
 56		this.showDynamicTags = preferences.getBoolean(SettingsActivity.SHOW_DYNAMIC_TAGS, false);
 57	}
 58
 59	@Override
 60	public View getView(int position, View view, ViewGroup parent) {
 61		LayoutInflater inflater = activity.getLayoutInflater();
 62		ListItem item = getItem(position);
 63		ViewHolder viewHolder;
 64		if (view == null) {
 65			ContactBinding binding = DataBindingUtil.inflate(inflater,R.layout.contact,parent,false);
 66			viewHolder = ViewHolder.get(binding);
 67			view = binding.getRoot();
 68		} else {
 69			viewHolder = (ViewHolder) view.getTag();
 70		}
 71
 72		List<ListItem.Tag> tags = item.getTags(activity);
 73		if (tags.size() == 0 || !this.showDynamicTags) {
 74			viewHolder.tags.setVisibility(View.GONE);
 75		} else {
 76			viewHolder.tags.setVisibility(View.VISIBLE);
 77			viewHolder.tags.removeAllViewsInLayout();
 78			for (ListItem.Tag tag : tags) {
 79				TextView tv = (TextView) inflater.inflate(R.layout.list_item_tag, viewHolder.tags, false);
 80				tv.setText(tag.getName());
 81				tv.setBackgroundColor(tag.getColor());
 82				tv.setOnClickListener(this.onTagTvClick);
 83				viewHolder.tags.addView(tv);
 84			}
 85		}
 86		final Jid jid = item.getJid();
 87		if (jid != null) {
 88			viewHolder.jid.setVisibility(View.VISIBLE);
 89			viewHolder.jid.setText(IrregularUnicodeDetector.style(activity, jid));
 90		} else {
 91			viewHolder.jid.setVisibility(View.GONE);
 92		}
 93		viewHolder.name.setText(EmojiWrapper.transform(item.getDisplayName()));
 94		AvatarWorkerTask.loadAvatar(item, viewHolder.avatar, R.dimen.avatar);
 95		return view;
 96	}
 97
 98	public void setOnTagClickedListener(OnTagClickedListener listener) {
 99		this.mOnTagClickedListener = listener;
100	}
101
102
103	public interface OnTagClickedListener {
104		void onTagClicked(String tag);
105	}
106
107	private static class ViewHolder {
108		private TextView name;
109		private TextView jid;
110		private ImageView avatar;
111		private FlowLayout tags;
112
113		private ViewHolder() {
114
115		}
116
117		public static ViewHolder get(ContactBinding binding) {
118			ViewHolder viewHolder = new ViewHolder();
119			viewHolder.name = binding.contactDisplayName;
120			viewHolder.jid = binding.contactJid;
121			viewHolder.avatar = binding.contactPhoto;
122			viewHolder.tags = binding.tags;
123			binding.getRoot().setTag(viewHolder);
124			return viewHolder;
125		}
126	}
127
128}