package github.daneren2005.dsub.adapter;
import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
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 github.daneren2005.dsub.R;
import github.daneren2005.dsub.activity.SubsonicActivity;
import github.daneren2005.dsub.domain.ChatMessage;
import github.daneren2005.dsub.util.ImageLoader;
import github.daneren2005.dsub.util.UserUtil;
import github.daneren2005.dsub.util.Util;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.regex.Pattern;
public class ChatAdapter extends ArrayAdapter<ChatMessage> {
private final SubsonicActivity activity;
private ArrayList<ChatMessage> messages;
private final ImageLoader imageLoader;
private static final String phoneRegex = "1?\\W*([2-9][0-8][0-9])\\W*([2-9][0-9]{2})\\W*([0-9]{4})"; //you can just place your support phone here
private static final Pattern phoneMatcher = Pattern.compile(phoneRegex);
public ChatAdapter(SubsonicActivity activity, ArrayList<ChatMessage> messages, ImageLoader imageLoader) {
super(activity, R.layout.chat_item, messages);
this.activity = activity;
this.messages = messages;
this.imageLoader = imageLoader;
}
@Override
public int getCount() {
return messages.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ChatMessage message = this.getItem(position);
ViewHolder holder;
int layout;
String messageUser = message.getUsername();
Date messageTime = new java.util.Date(message.getTime());
String messageText = message.getMessage();
String me = UserUtil.getCurrentUsername(activity);
if (messageUser.equals(me)) {
layout = R.layout.chat_item_reverse;
} else {
layout = R.layout.chat_item;
}
if (convertView == null)
{
holder = new ViewHolder();
convertView = LayoutInflater.from(activity).inflate(layout, parent, false);
TextView usernameView = (TextView) convertView.findViewById(R.id.chat_username);
TextView timeView = (TextView) convertView.findViewById(R.id.chat_time);
TextView messageView = (TextView) convertView.findViewById(R.id.chat_message);
messageView.setMovementMethod(LinkMovementMethod.getInstance());
Linkify.addLinks(messageView, Linkify.EMAIL_ADDRESSES);
Linkify.addLinks(messageView, Linkify.WEB_URLS);
Linkify.addLinks(messageView, phoneMatcher, "tel:");
holder.message = messageView;
holder.username = usernameView;
holder.time = timeView;
holder.avatar = (ImageView) convertView.findViewById(R.id.chat_avatar);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
DateFormat timeFormat = android.text.format.DateFormat.getTimeFormat(activity);
String messageTimeFormatted = String.format("[%s]", timeFormat.format(messageTime));
holder.username.setText(messageUser);
holder.message.setText(messageText);
holder.time.setText(messageTimeFormatted);
imageLoader.loadAvatar(activity, holder.avatar, messageUser);
return convertView;
}
private static class ViewHolder
{
TextView message;
TextView username;
TextView time;
ImageView avatar;
}
}