cheogram/src/main/java/eu/siacs/conversations/ui/adapter/ListItemAdapter.java
Stephen Paul Weber 5e149cfcd1
Merge remote-tracking branch 'upstream/master'
* upstream/master: (27 commits)
  show 'using account …' in incoming call screen
  show contact jid in call screen
  bump copyright year
  Add handling of status code 333
  increase default pw length
  do not build emoji flavors
  pulled translations from transifex
  add changelog
  fix ice candidate sending when different credentials are used
  remove security check that ensures rtp connection was properly finished
  code clean up
  bump agp
  store encrypted pgp files in private cache dir
  do not restart wakelock if activity is finishing
  delete pre lolipop weOwnFile()
  use try with resources. remove unused methods
  rename version suffix to playstore/free
  bump appcompat, migrate to emoji2 and get rid of emoji flavor
  fix rare npe
  store recordings and documents in their respective folders
  ...
2022-03-08 15:38:48 -05:00

123 lines
3.8 KiB
Java

package eu.siacs.conversations.ui.adapter;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.databinding.DataBindingUtil;
import com.wefika.flowlayout.FlowLayout;
import java.util.List;
import eu.siacs.conversations.R;
import eu.siacs.conversations.databinding.ContactBinding;
import eu.siacs.conversations.entities.ListItem;
import eu.siacs.conversations.ui.SettingsActivity;
import eu.siacs.conversations.ui.XmppActivity;
import eu.siacs.conversations.ui.util.AvatarWorkerTask;
import eu.siacs.conversations.ui.util.StyledAttributes;
import eu.siacs.conversations.utils.IrregularUnicodeDetector;
import eu.siacs.conversations.xmpp.Jid;
public class ListItemAdapter extends ArrayAdapter<ListItem> {
protected XmppActivity activity;
private boolean showDynamicTags = false;
private OnTagClickedListener mOnTagClickedListener = null;
private final View.OnClickListener onTagTvClick = view -> {
if (view instanceof TextView && mOnTagClickedListener != null) {
TextView tv = (TextView) view;
final String tag = tv.getText().toString();
mOnTagClickedListener.onTagClicked(tag);
}
};
public ListItemAdapter(XmppActivity activity, List<ListItem> objects) {
super(activity, 0, objects);
this.activity = activity;
}
public void refreshSettings() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
this.showDynamicTags = preferences.getBoolean(SettingsActivity.SHOW_DYNAMIC_TAGS, activity.getResources().getBoolean(R.bool.show_dynamic_tags));
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = activity.getLayoutInflater();
ListItem item = getItem(position);
ViewHolder viewHolder;
if (view == null) {
ContactBinding binding = DataBindingUtil.inflate(inflater,R.layout.contact,parent,false);
viewHolder = ViewHolder.get(binding);
view = binding.getRoot();
} else {
viewHolder = (ViewHolder) view.getTag();
}
view.setBackground(StyledAttributes.getDrawable(view.getContext(),R.attr.list_item_background));
List<ListItem.Tag> tags = item.getTags(activity);
if (tags.size() == 0 || !this.showDynamicTags) {
viewHolder.tags.setVisibility(View.GONE);
} else {
viewHolder.tags.setVisibility(View.VISIBLE);
viewHolder.tags.removeAllViewsInLayout();
for (ListItem.Tag tag : tags) {
TextView tv = (TextView) inflater.inflate(R.layout.list_item_tag, viewHolder.tags, false);
tv.setText(tag.getName());
tv.setBackgroundColor(tag.getColor());
tv.setOnClickListener(this.onTagTvClick);
viewHolder.tags.addView(tv);
}
}
final Jid jid = item.getJid();
if (jid != null) {
viewHolder.jid.setVisibility(View.VISIBLE);
viewHolder.jid.setText(IrregularUnicodeDetector.style(activity, jid));
} else {
viewHolder.jid.setVisibility(View.GONE);
}
viewHolder.name.setText(item.getDisplayName());
AvatarWorkerTask.loadAvatar(item, viewHolder.avatar, R.dimen.avatar);
return view;
}
public void setOnTagClickedListener(OnTagClickedListener listener) {
this.mOnTagClickedListener = listener;
}
public interface OnTagClickedListener {
void onTagClicked(String tag);
}
private static class ViewHolder {
private TextView name;
private TextView jid;
private ImageView avatar;
private FlowLayout tags;
private ViewHolder() {
}
public static ViewHolder get(ContactBinding binding) {
ViewHolder viewHolder = new ViewHolder();
viewHolder.name = binding.contactDisplayName;
viewHolder.jid = binding.contactJid;
viewHolder.avatar = binding.contactPhoto;
viewHolder.tags = binding.tags;
binding.getRoot().setTag(viewHolder);
return viewHolder;
}
}
}