ListItemAdapter.java

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