package com.echo5bravo.govre.ADAPTERS;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.TimeZone;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.echo5bravo.govre.INFO.Tweet;
import com.echo5bravo.govre.UTILS.ImageDownloader;
import com.echo5bravo.govre.R;
import android.content.Context;
import android.text.util.Linkify;
import android.text.util.Linkify.TransformFilter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class TwitterAdapter extends ArrayAdapter<Tweet>{
private static final String TAG = "TwitterAdapter";
private ArrayList<Tweet> tweets;
private final ImageDownloader imgDownloader = new ImageDownloader();
public TwitterAdapter(Context context, int textViewResourceId, ArrayList<Tweet> tweets) {
super(context, textViewResourceId, tweets);
this.tweets = tweets;
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.twitter_listitem, null);
}
Tweet tweet = tweets.get(position);
if (tweet != null) {
TextView username = (TextView) v.findViewById(R.id.username);
TextView message = (TextView) v.findViewById(R.id.message);
ImageView image = (ImageView) v.findViewById(R.id.avatar);
TextView dt_tweeted = (TextView) v.findViewById(R.id.dt_tweeted);
if (username != null) {
username.setText("@" + tweet.username);
// Match @mentions and capture just the username portion of the text.
Pattern pattern = Pattern.compile("@([A-Za-z0-9_-]+)");
String scheme = "http://twitter.com/";
Linkify.addLinks(username, pattern, scheme, null, mentionFilter);
}
if(message != null) {
message.setText(tweet.message);
Linkify.addLinks(message, Linkify.ALL);
}
if(image != null) {
try{
this.imgDownloader.download(tweet.image_url, image);
}
catch (Exception e)
{
//Log.e(TAG, "Error: " + e.toString());
}
}
if(dt_tweeted != null) {
dt_tweeted.setText(twitterHumanFriendlyDate(tweet.dt_tweeted));
}
}
return v;
}
/* Used to format the DateTime returned from Twitter JSON */
private static String twitterHumanFriendlyDate(String dateStr) {
// parse Twitter date
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZZZ yyyy", Locale.ENGLISH);
dateFormat.setLenient(false);
//dateFormat.setTimeZone(TimeZone.getTimeZone("gmt"));
Date created = null;
try {
created = dateFormat.parse(dateStr);
} catch (Exception e) {
return null;
}
// today
Date today = new Date();
// how much time since (ms)
Long duration = today.getTime() - created.getTime();
int second = 1000;
int minute = second * 60;
int hour = minute * 60;
int day = hour * 24;
if (duration < second * 7) {
return "right now";
}
if (duration < minute) {
int n = (int) Math.floor(duration / second);
return n + " seconds ago";
}
if (duration < minute * 2) {
return "about 1 minute ago";
}
if (duration < hour) {
int n = (int) Math.floor(duration / minute);
return n + " minutes ago";
}
if (duration < hour * 2) {
return "about 1 hour ago";
}
if (duration < day) {
int n = (int) Math.floor(duration / hour);
return n + " hours ago";
}
if (duration > day && duration < day * 2) {
return "yesterday";
}
if (duration < day * 365) {
int n = (int) Math.floor(duration / day);
return n + " days ago";
} else {
return "over a year ago";
}
}
// A transform filter that simply returns just the text captured by the
// first regular expression group.
TransformFilter mentionFilter = new TransformFilter() {
public final String transformUrl(final Matcher match, String url) {
return match.group(1);
}
};
}