package com.vaguehope.onosendai.model; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.vaguehope.onosendai.R; import com.vaguehope.onosendai.config.Account; import com.vaguehope.onosendai.config.Config; import com.vaguehope.onosendai.util.StringHelper; import com.vaguehope.onosendai.util.DateHelper.FriendlyDateTimeFormat; public class OutboxAdapter extends BaseAdapter { private final LayoutInflater layoutInflater; private final FriendlyDateTimeFormat friendlyDateTimeFormat; private final Config conf; private List<OutboxTweet> listData; public OutboxAdapter (final Context context, final Config config) { this.conf = config; this.layoutInflater = LayoutInflater.from(context); this.friendlyDateTimeFormat = new FriendlyDateTimeFormat(context); } public void setInputData (final List<OutboxTweet> data) { this.listData = data; notifyDataSetChanged(); } public List<OutboxTweet> getInputData () { return this.listData; } @Override public int getCount () { return this.listData == null ? 0 : this.listData.size(); } @Override public Object getItem (final int position) { return getTweet(position); } @Override public long getItemId (final int position) { final OutboxTweet tweet = getTweet(position); if (tweet == null) return -1; return tweet.getUid(); } public OutboxTweet getTweet (final int position) { if (this.listData == null) return null; if (position >= this.listData.size()) return null; return this.listData.get(position); } @Override public View getView (final int position, final View convertView, final ViewGroup parent) { View view = convertView; RowView rowView; if (view == null) { view = this.layoutInflater.inflate(R.layout.outboxrow, null); rowView = new RowView(view); view.setTag(rowView); } else { rowView = (RowView) view.getTag(); } rowView.setItem(this.listData.get(position), this.conf, this.friendlyDateTimeFormat); return view; } private static class RowView { private static final int MAX_ERROR_MSG_CHARS = 150; private final TextView body; private final TextView account; private final TextView status; public RowView (final View view) { this((TextView) view.findViewById(R.id.txtBody), (TextView) view.findViewById(R.id.txtAccount), (TextView) view.findViewById(R.id.txtStatus)); } public RowView (final TextView body, final TextView account, final TextView status) { this.body = body; this.account = account; this.status = status; } public void setItem (final OutboxTweet item, final Config conf, final FriendlyDateTimeFormat friendlyDateTimeFormat) { this.body.setText(item.getBody()); this.account.setText(summariseAccount(item, conf)); this.status.setText(summariseStatus(item, friendlyDateTimeFormat)); } private static String summariseAccount (final OutboxTweet item, final Config conf) { final StringBuilder s = new StringBuilder(); final Account account = conf.getAccount(item.getAccountId()); if (account != null) { s.append(account.getUiTitle()); } else { s.append(item.getAccountId()); } if (item.getAttachment() != null) s.append(", with picture."); return s.toString(); } private static String summariseStatus (final OutboxTweet item, final FriendlyDateTimeFormat friendlyDateTimeFormat) { final StringBuilder s = new StringBuilder(String.valueOf(item.getStatus())); if (item.getAttemptCount() > 0) s.append(", ").append(item.getAttemptCount()).append(" failures."); //ES if (item.getStatusTime() != null) s.append("\n").append(friendlyDateTimeFormat.format(System.currentTimeMillis(), item.getStatusTime())); if (item.getLastError() != null) s.append("\n").append(StringHelper.maxLength(item.getLastError(), MAX_ERROR_MSG_CHARS)); return s.toString(); } } }