package de.stephanlindauer.criticalmaps.adapter; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import de.stephanlindauer.criticalmaps.App; import de.stephanlindauer.criticalmaps.R; import de.stephanlindauer.criticalmaps.vo.twitter.Tweet; public class TweetAdapter extends ArrayAdapter<Tweet> { private final List<Tweet> tweets; private final Context context; final Picasso picasso = App.components().picasso(); public TweetAdapter(Context context, int layoutResourceId, List<Tweet> tweets) { super(context, layoutResourceId, tweets); this.tweets = tweets; this.context = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.view_tweet, parent, false); viewHolder = new ViewHolder(convertView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Tweet currentTweet = tweets.get(position); return buildTweetView(currentTweet, convertView, viewHolder); } private View buildTweetView(final Tweet tweet, View rowView, final ViewHolder viewHolder) { viewHolder.userImageProgress.setVisibility(View.VISIBLE); picasso.load(tweet.getProfileImageUrl()) .fit() .centerInside() .error(R.drawable.chat_avatar) .into(viewHolder.userImageView, new Callback() { @Override public void onSuccess() { hideProgressBar(); } @Override public void onError() { hideProgressBar(); } private void hideProgressBar() { final ProgressBar progressBar = viewHolder.userImageProgress; if (progressBar != null) { progressBar.setVisibility(View.GONE); } } }); viewHolder.nameTextView.setText(tweet.getUserName()); viewHolder.textTextView.setText(Html.fromHtml(tweet.getText()).toString()); viewHolder.dateTextView.setText(new SimpleDateFormat("HH:mm").format(tweet.getTimestamp())); viewHolder.timeTextView.setText(new SimpleDateFormat("dd.MM.yyyy").format(tweet.getTimestamp())); viewHolder.handleTextView.setText("@" + tweet.getUserScreenName()); rowView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/aasif/status/" + tweet.getTweetId()))); } }); return rowView; } static class ViewHolder { @Bind(R.id.tweet_user_name) TextView nameTextView; @Bind(R.id.tweet_text) TextView textTextView; @Bind(R.id.tweet_creation_date) TextView dateTextView; @Bind(R.id.tweet_creation_time) TextView timeTextView; @Bind(R.id.tweet_user_handle) TextView handleTextView; @Bind(R.id.tweet_user_image) ImageView userImageView; @Bind(R.id.tweet_user_image_progress) ProgressBar userImageProgress; public ViewHolder(View view) { ButterKnife.bind(this, view); } } }