aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/github/daneren2005/dsub/adapter/ChatAdapter.java
blob: 0c116d39e1d9a14fc023903ec63fe3bb2cba06ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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;
	}
}