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.ui.util.StyledAttributes;
 31import eu.siacs.conversations.utils.EmojiWrapper;
 32import eu.siacs.conversations.utils.IrregularUnicodeDetector;
 33import eu.siacs.conversations.utils.ThemeHelper;
 34import eu.siacs.conversations.utils.UIHelper;
 35import rocks.xmpp.addr.Jid;
 36
 37public class ListItemAdapter extends ArrayAdapter<ListItem> {
 38
 39	protected XmppActivity activity;
 40	private boolean showDynamicTags = false;
 41	private OnTagClickedListener mOnTagClickedListener = null;
 42	private View.OnClickListener onTagTvClick = view -> {
 43		if (view instanceof TextView && mOnTagClickedListener != null) {
 44			TextView tv = (TextView) view;
 45			final String tag = tv.getText().toString();
 46			mOnTagClickedListener.onTagClicked(tag);
 47		}
 48	};
 49
 50	public ListItemAdapter(XmppActivity activity, List<ListItem> objects) {
 51		super(activity, 0, objects);
 52		this.activity = activity;
 53	}
 54
 55
 56	public void refreshSettings() {
 57		SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
 58		this.showDynamicTags = preferences.getBoolean(SettingsActivity.SHOW_DYNAMIC_TAGS, false);
 59	}
 60
 61	@Override
 62	public View getView(int position, View view, ViewGroup parent) {
 63		LayoutInflater inflater = activity.getLayoutInflater();
 64		ListItem item = getItem(position);
 65		ViewHolder viewHolder;
 66		if (view == null) {
 67			ContactBinding binding = DataBindingUtil.inflate(inflater,R.layout.contact,parent,false);
 68			viewHolder = ViewHolder.get(binding);
 69			view = binding.getRoot();
 70		} else {
 71			viewHolder = (ViewHolder) view.getTag();
 72		}
 73		view.setBackground(StyledAttributes.getDrawable(view.getContext(),R.attr.list_item_background));
 74
 75		List<ListItem.Tag> tags = item.getTags(activity);
 76		if (tags.size() == 0 || !this.showDynamicTags) {
 77			viewHolder.tags.setVisibility(View.GONE);
 78		} else {
 79			viewHolder.tags.setVisibility(View.VISIBLE);
 80			viewHolder.tags.removeAllViewsInLayout();
 81			for (ListItem.Tag tag : tags) {
 82				TextView tv = (TextView) inflater.inflate(R.layout.list_item_tag, viewHolder.tags, false);
 83				tv.setText(tag.getName());
 84				tv.setBackgroundColor(tag.getColor());
 85				tv.setOnClickListener(this.onTagTvClick);
 86				viewHolder.tags.addView(tv);
 87			}
 88		}
 89		final Jid jid = item.getJid();
 90		if (jid != null) {
 91			viewHolder.jid.setVisibility(View.VISIBLE);
 92			viewHolder.jid.setText(IrregularUnicodeDetector.style(activity, jid));
 93		} else {
 94			viewHolder.jid.setVisibility(View.GONE);
 95		}
 96		viewHolder.name.setText(EmojiWrapper.transform(item.getDisplayName()));
 97		AvatarWorkerTask.loadAvatar(item, viewHolder.avatar, R.dimen.avatar);
 98		return view;
 99	}
100
101	public void setOnTagClickedListener(OnTagClickedListener listener) {
102		this.mOnTagClickedListener = listener;
103	}
104
105
106	public interface OnTagClickedListener {
107		void onTagClicked(String tag);
108	}
109
110	private static class ViewHolder {
111		private TextView name;
112		private TextView jid;
113		private ImageView avatar;
114		private FlowLayout tags;
115
116		private ViewHolder() {
117
118		}
119
120		public static ViewHolder get(ContactBinding binding) {
121			ViewHolder viewHolder = new ViewHolder();
122			viewHolder.name = binding.contactDisplayName;
123			viewHolder.jid = binding.contactJid;
124			viewHolder.avatar = binding.contactPhoto;
125			viewHolder.tags = binding.tags;
126			binding.getRoot().setTag(viewHolder);
127			return viewHolder;
128		}
129	}
130
131}