ListItemAdapter.java

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