package com.wamod.activity.conversation;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.wamod.MessagesManager;
import com.wamod.Resources;
import com.wamod.Utils;
import com.wamod.activity.conversation.bubble.Stock;
import java.util.List;
/**
* Created by brianvalente on 9/27/16.
*/
public class MessagesAdapter extends RecyclerView.Adapter<MessagesAdapter.ViewHolder> {
private List<MessagesManager.Message> messageList;
private Context context;
private int incomingBubbleTextColor;
private int outgoingBubbleTextColor;
private int incomingBubbleSenderTextColor;
private Drawable defaultProfilePicture;
private Drawable dummyDrawable;
private int bubbleStyle;
public MessagesAdapter(Context context, List<MessagesManager.Message> messageList) {
this.context = context;
this.messageList = messageList;
incomingBubbleTextColor = Color.parseColor("#" + Utils.prefs.getString("conversation_leftbubbletextcolor", "FFFFFF"));
outgoingBubbleTextColor = Color.parseColor("#" + Utils.prefs.getString("conversation_rightbubbletextcolor", "FFFFFF"));
incomingBubbleSenderTextColor = Color.parseColor("#" + Utils.prefs.getString("conversation_customparticipantcolor", "FFFFFF"));
defaultProfilePicture = context.getResources().getDrawable(Resources.getDrawable("wamod_drawer_account"));
dummyDrawable = context.getResources().getDrawable(Resources.getDrawable("dummy"));
bubbleStyle = Utils.getBubbleStyle();
}
private Drawable getOutgoingBubble() {
Drawable outgoingBubble = context.getResources().getDrawable(Resources.getDrawable("wamod_style_bubble_newhangouts_balloon_outgoing_normal"));
outgoingBubble = Utils.tintToColor(outgoingBubble, Color.parseColor("#" + Utils.prefs.getString("conversation_rightbubblecolor", "FFFFFF")));
return outgoingBubble;
}
private Drawable getOutgoingExtensionBubble() {
Drawable outgoingBubble = context.getResources().getDrawable(Resources.getDrawable("wamod_style_bubble_newhangouts_balloon_outgoing_normal_ext"));
outgoingBubble = Utils.tintToColor(outgoingBubble, Color.parseColor("#" + Utils.prefs.getString("conversation_rightbubblecolor", "FFFFFF")));
return outgoingBubble;
}
private Drawable getIncomingBubble() {
Drawable incomingBubble = context.getResources().getDrawable(Resources.getDrawable("wamod_style_bubble_newhangouts_balloon_incoming_normal"));
incomingBubble = Utils.tintToColor(incomingBubble, Color.parseColor("#" + Utils.prefs.getString("conversation_leftbubblecolor", "FFFFFF")));
return incomingBubble;
}
private Drawable getIncomingExtensionBubble() {
Drawable incomingBubble = context.getResources().getDrawable(Resources.getDrawable("wamod_style_bubble_newhangouts_balloon_incoming_normal_ext"));
incomingBubble = Utils.tintToColor(incomingBubble, Color.parseColor("#" + Utils.prefs.getString("conversation_leftbubblecolor", "FFFFFF")));
return incomingBubble;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView senderNameTV;
public TextView messageTextTV;
public TextView pushNameTV;
public TextView debugInfoTV;
public ViewGroup senderIdentityVG;
public ViewGroup bubbleVG;
public ImageView profilePictureIV;
public ViewHolder(View v) {
super(v);
senderNameTV = (TextView) v.findViewById(Resources.getID("sender_name"));
messageTextTV = (TextView) v.findViewById(Resources.getID("message_text"));
pushNameTV = (TextView) v.findViewById(Resources.getID("push_name"));
debugInfoTV = (TextView) v.findViewById(Resources.getID("debug_info"));
senderIdentityVG = (ViewGroup) v.findViewById(Resources.getID("sender_identity"));
bubbleVG = (ViewGroup) v.findViewById(Resources.getID("bubble"));
profilePictureIV = (ImageView) v.findViewById(Resources.getID("profile_picture"));
}
}
public void add(int position, MessagesManager.Message item) {
messageList.add(position, item);
notifyItemInserted(position);
}
public void remove(MessagesManager.Message item) {
int position = messageList.indexOf(item);
messageList.remove(position);
notifyItemRemoved(position);
}
@Override
public int getItemCount() {
return messageList.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public MessagesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
switch (bubbleStyle) {
case Utils.BUBBLE_STOCK:
default:
v = LayoutInflater.from(parent.getContext()).inflate(Resources.getLayout("wamod_activity_conversation_bubble"), parent, false);
}
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
switch (bubbleStyle) {
case Utils.BUBBLE_STOCK:
Stock.load(holder, position, messageList);
}
}
/*@Override
public void onBindViewHolder(ViewHolder holder, int position) {
int messageIndex = (int)getItemId(position); // To avoid repeated messages
MessagesManager.Message message = messageList.get(messageIndex);
MessagesManager.Message previousMessage = getPreviousMessage(messageIndex);
boolean isExtension = false;
if (previousMessage != null && message.senderJabberId != null && previousMessage.senderJabberId != null && message.senderJabberId.contentEquals(previousMessage.senderJabberId))
isExtension = true;
RelativeLayout.LayoutParams bubbleLayoutParams = (RelativeLayout.LayoutParams) holder.bubbleVG.getLayoutParams();
if (message.sentByMe) {
bubbleLayoutParams .addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
holder.bubbleVG .setBackground(isExtension? getOutgoingExtensionBubble() : getOutgoingBubble());
holder.messageTextTV .setTextColor(outgoingBubbleTextColor);
holder.debugInfoTV .setTextColor(outgoingBubbleTextColor);
holder.profilePictureIV.setVisibility(View.GONE);
} else {
bubbleLayoutParams .removeRule(RelativeLayout.ALIGN_PARENT_RIGHT);
holder.bubbleVG .setBackground(isExtension? getIncomingExtensionBubble() : getIncomingBubble());
holder.senderNameTV .setTextColor(incomingBubbleSenderTextColor);
holder.messageTextTV .setTextColor(incomingBubbleTextColor);
holder.debugInfoTV .setTextColor(incomingBubbleTextColor);
holder.profilePictureIV.setVisibility(View.VISIBLE);
}
holder.bubbleVG.setLayoutParams(bubbleLayoutParams);
if (message.isGroup) {
if (message.sentByMe) {
holder.senderIdentityVG.setVisibility(View.GONE);
holder.pushNameTV .setVisibility(View.GONE);
holder.senderNameTV .setText("Me lol");
} else if (message.sender.fullName != null) {
holder.senderIdentityVG.setVisibility(View.VISIBLE);
holder.pushNameTV .setVisibility(View.GONE);
holder.senderNameTV .setText(message.sender.fullName);
} else {
holder.senderIdentityVG.setVisibility(View.VISIBLE);
holder.pushNameTV .setVisibility(View.VISIBLE);
holder.pushNameTV .setText(message.sender.pushName);
holder.senderNameTV .setText(message.sender.jabberId);
}
}
else
holder.senderIdentityVG.setVisibility(View.GONE);
if (isExtension && !message.sentByMe) {
holder.profilePictureIV.setImageDrawable(dummyDrawable);
holder.senderIdentityVG.setVisibility(View.GONE);
} else if (!message.sentByMe) {
Drawable profilePicture = message.getProfilePicture();
holder.profilePictureIV.setImageDrawable(profilePicture != null ? profilePicture : defaultProfilePicture);
}
holder.messageTextTV.setText(message.message);
holder.bubbleVG.setTag(message);
holder.bubbleVG.setOnClickListener(new OnItemClick());
String messageDebugInfo = "";
messageDebugInfo += "ID: " + message.dbRowId + "\n";
messageDebugInfo += "Key: " + message.key + "\n";
if (message.isQuote)
messageDebugInfo += "Type: " + getMessageTypeString(message) + ", quote" + "\n" + "Quoted message type: " + getMessageTypeString(message.quotedMessage) + "\n";
else
messageDebugInfo += "Type: " + getMessageTypeString(message) + "\n";
switch (message.messageType) {
case MessagesManager.Message.MESSAGE_TYPE_IMAGE:
messageDebugInfo += "Mime: " + message.mediaMimeType + "\n";
messageDebugInfo += "Size: " + message.mediaSize + " bytes" + "\n";
messageDebugInfo += "Caption: " + message.mediaCaption + "\n";
messageDebugInfo += "URL: " + message.mediaUrl;
break;
}
holder.debugInfoTV.setText(messageDebugInfo);
}*/
private class OnItemClick implements View.OnClickListener {
@Override
public void onClick(View view) {
MessagesManager.Message message = (MessagesManager.Message) view.getTag();
Log.i("MessagesAdapter", message.allData);
Toast.makeText(context, "Message data logged. Check Logcat!" + "\n\n" + message.allData, Toast.LENGTH_LONG).show();
}
}
private String getMessageTypeString(MessagesManager.Message message) {
switch (message.messageType) {
case MessagesManager.Message.MESSAGE_TYPE_TEXT:
return "Text";
case MessagesManager.Message.MESSAGE_TYPE_IMAGE:
return "Image";
case MessagesManager.Message.MESSAGE_TYPE_VIDEO:
return "Video";
case MessagesManager.Message.MESSAGE_TYPE_AUDIO:
return "Audio";
case MessagesManager.Message.MESSAGE_TYPE_CONTACT:
return "Contact";
case MessagesManager.Message.MESSAGE_TYPE_LOCATION:
return "Location";
case MessagesManager.Message.MESSAGE_TYPE_VOICENOTE:
return "Voice note";
case MessagesManager.Message.MESSAGE_TYPE_DOCUMENT:
return "Document";
case MessagesManager.Message.MESSAGE_TYPE_UNDEFINED:
return "Undefined";
default:
return "Unknown";
}
}
private MessagesManager.Message getPreviousMessage(int position) {
position--;
return position > 0? messageList.get(position) : null;
}
}