package com.zulip.android.viewholders;
import android.app.Activity;
import android.support.v7.widget.RecyclerView;
import android.text.method.LinkMovementMethod;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TableLayout;
import android.widget.TextView;
import com.zulip.android.R;
import com.zulip.android.ZulipApp;
import com.zulip.android.models.Message;
import com.zulip.android.models.MessageType;
import com.zulip.android.util.OnItemClickListener;
public class MessageHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener {
public ImageView gravatar;
public TextView senderName;
public TextView timestamp,leftTimestamp;
public TextView edited, leftEdited;
public TextView contentView;
public View leftBar;
public RelativeLayout messageTile;
public ImageView contentImage;
public ImageView starImage, leftStarImage;
public View contentImageContainer;
public TableLayout reactionsTable;
public OnItemClickListener onItemClickListener;
public MessageHolder(final View itemView) {
super(itemView);
gravatar = (ImageView) itemView.findViewById(R.id.gravatar);
senderName = (TextView) itemView.findViewById(R.id.senderName);
timestamp = (TextView) itemView.findViewById(R.id.timestamp);
leftTimestamp = (TextView) itemView.findViewById(R.id.left_timestamp);
edited = (TextView) itemView.findViewById(R.id.message_edit_tag);
leftEdited = (TextView) itemView.findViewById(R.id.left_message_edit_tag);
contentView = (TextView) itemView.findViewById(R.id.contentView);
contentView.setMovementMethod(LinkMovementMethod.getInstance());
leftBar = itemView.findViewById(R.id.leftBar);
messageTile = (RelativeLayout) itemView.findViewById(R.id.messageTile);
contentImage = (ImageView) itemView.findViewById(R.id.load_image);
starImage = (ImageView) itemView.findViewById(R.id.star_image);
leftStarImage = (ImageView) itemView.findViewById(R.id.left_star_image);
contentImageContainer = itemView.findViewById(R.id.load_image_container);
reactionsTable = (TableLayout) itemView.findViewById(R.id.reactions_table);
contentView.setOnClickListener(this);
contentView.setLongClickable(true);
itemView.setOnCreateContextMenuListener(this);
// Add click listener to sender view
View senderView = itemView.findViewById(R.id.senderTile);
if (senderView != null) senderView.setOnClickListener(this);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
Message msg = onItemClickListener.getMessageAtPosition(getAdapterPosition());
onItemClickListener.setContextItemSelectedPosition(getAdapterPosition());
if (msg == null) {
return;
}
if (msg.getType().equals(MessageType.STREAM_MESSAGE)) {
MenuInflater inflater = ((Activity) v.getContext()).getMenuInflater();
inflater.inflate(R.menu.context_stream, menu);
if (msg.getSender().getId() != ZulipApp.get().getYou().getId()) {
menu.findItem(R.id.edit_message).setVisible(false);
}
if (msg.getMessageStar()) {
menu.findItem(R.id.star_message).setVisible(false);
} else {
menu.findItem(R.id.un_star_message).setVisible(false);
}
} else if (msg.getPersonalReplyTo(ZulipApp.get()).length > 1) {
MenuInflater inflater = ((Activity) v.getContext()).getMenuInflater();
inflater.inflate(R.menu.context_private, menu);
if (msg.getSender().getId() != ZulipApp.get().getYou().getId()) {
menu.findItem(R.id.edit_message).setVisible(false);
}
if (msg.getMessageStar()) {
menu.findItem(R.id.star_message).setVisible(false);
} else {
menu.findItem(R.id.un_star_message).setVisible(false);
}
} else {
MenuInflater inflater = ((Activity) v.getContext()).getMenuInflater();
inflater.inflate(R.menu.context_single_private, menu);
if (msg.getSender().getId() != ZulipApp.get().getYou().getId()) {
menu.findItem(R.id.edit_message).setVisible(false);
}
if (msg.getMessageStar()) {
menu.findItem(R.id.star_message).setVisible(false);
} else {
menu.findItem(R.id.un_star_message).setVisible(false);
}
}
}
@Override
public void onClick(View view) {
onItemClickListener.onItemClick(view.getId(), getAdapterPosition());
}
public void setItemClickListener(OnItemClickListener itemClickListener) {
this.onItemClickListener = itemClickListener;
}
}