package com.badoo.chateau.example.ui.conversations.list;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.view.View;
import android.widget.TextView;
import com.badoo.chateau.example.R;
import com.badoo.chateau.data.models.payloads.ImagePayload;
import com.badoo.chateau.data.models.payloads.TextPayload;
import com.badoo.chateau.example.data.model.ExampleConversation;
import com.badoo.chateau.example.data.model.ExampleMessage;
import com.badoo.chateau.extras.recycle.BindableViewHolder;
import com.badoo.chateau.extras.MultiSelectionHelper;
import com.badoo.chateau.extras.ViewFinder;
import java.text.DateFormat;
import java.util.Date;
class ConversationViewHolder extends BindableViewHolder<ExampleConversation> implements View.OnClickListener, View.OnLongClickListener {
public static final String CAMERA_EMOJI = "\uD83D\uDCF7";
private final View mRoot;
@NonNull
private final OnConversationClickedListener mClickListener;
@NonNull
private final MultiSelectionHelper mSelectionHelper;
private final TextView mName;
private final TextView mLastMessageTime;
private final TextView mLastMessage;
private final TextView mUnreadCount;
private final DateFormat mTimeFormat;
private final DateFormat mDateFormat;
public ConversationViewHolder(@NonNull View view, @NonNull OnConversationClickedListener clickListener, @NonNull MultiSelectionHelper selectionHelper) {
super(view);
mRoot = view;
mClickListener = clickListener;
mSelectionHelper = selectionHelper;
final ViewFinder finder = ViewFinder.from(view);
mTimeFormat = android.text.format.DateFormat.getTimeFormat(itemView.getContext());
mDateFormat = android.text.format.DateFormat.getMediumDateFormat(itemView.getContext());
mName = finder.findViewById(R.id.conversation_name);
mLastMessageTime = finder.findViewById(R.id.conversation_last_message_time);
mLastMessage = finder.findViewById(R.id.conversation_last_message);
mUnreadCount = finder.findViewById(R.id.conversation_unread_count);
view.setOnClickListener(this);
view.setOnLongClickListener(this);
}
@Override
public void bind(ExampleConversation conversation) {
super.bind(conversation);
mRoot.setSelected(mSelectionHelper.isPositionSelected(getAdapterPosition()));
mName.setText(conversation.getName());
final ExampleMessage lastMessage = conversation.getLastMessage();
if (lastMessage != null) {
handlePayloadRendering(lastMessage);
handleTimestampRendering(lastMessage);
}
else {
mLastMessage.setText("");
mLastMessageTime.setText("");
}
final int unreadCount = conversation.getUnreadCount();
if (unreadCount != 0) {
mUnreadCount.setText(String.valueOf(unreadCount));
mUnreadCount.setVisibility(View.VISIBLE);
}
else {
mUnreadCount.setVisibility(View.INVISIBLE);
}
}
private void handleTimestampRendering(ExampleMessage lastMessage) {
final boolean isToday = DateUtils.isToday(lastMessage.getTimestamp());
final Date date = new Date(lastMessage.getTimestamp());
if (isToday) {
mLastMessageTime.setText(mTimeFormat.format(date));
}
else {
mLastMessageTime.setText(mDateFormat.format(date));
}
}
private void handlePayloadRendering(ExampleMessage lastMessage) {
if (lastMessage.getPayload() instanceof TextPayload) {
mLastMessage.setText(((TextPayload) lastMessage.getPayload()).getMessage());
}
else if (lastMessage.getPayload() instanceof ImagePayload) {
final ImagePayload payload = (ImagePayload) lastMessage.getPayload();
if (TextUtils.isEmpty(payload.getMessage())) {
// Add the camera emoji since it's only supported in xml on Android 6+
mLastMessage.setText(mLastMessage.getResources().getString(R.string.info_last_message_image, CAMERA_EMOJI));
}
else {
mLastMessage.setText(payload.getMessage());
}
}
else {
throw new IllegalArgumentException("Message not supported: " + lastMessage);
}
}
@Override
public void onClick(View v) {
if (!mSelectionHelper.onClick(getAdapterPosition())) {
mClickListener.onConversationClicked(getBoundItem());
}
}
@Override
public boolean onLongClick(View v) {
return mSelectionHelper.onLongClick(getAdapterPosition());
}
public interface OnConversationClickedListener {
void onConversationClicked(@NonNull ExampleConversation conversation);
}
}