package com.vaguehope.onosendai.payload; import java.util.Comparator; import android.content.Context; import android.content.Intent; import android.view.View; import android.widget.TextView; import com.vaguehope.onosendai.R; import com.vaguehope.onosendai.images.ImageLoader; import com.vaguehope.onosendai.model.Meta; import com.vaguehope.onosendai.model.Tweet; public abstract class Payload { private final Tweet ownerTweet; private final Meta meta; private final PayloadType type; public Payload (final Tweet ownerTweet, final Meta meta, final PayloadType type) { this.ownerTweet = ownerTweet; this.meta = meta; this.type = type; } public Tweet getOwnerTweet () { return this.ownerTweet; } public Meta getMeta () { return this.meta; } public PayloadType getType () { return this.type; } public abstract CharSequence getTitle (); /** * This method may be overridden. */ public boolean intentable () { return false; } /** * This method may be overridden. * @param context */ public Intent toIntent (final Context context) { throw new UnsupportedOperationException("This payload type '" + this.type + "' can not be expressed as an intent."); } public PayloadLayout getLayout () { return PayloadLayout.TEXT_ONLY; } public PayloadRowView makeRowView (final View view) { return new PayloadRowView((TextView) view.findViewById(R.id.txtMain)); } /** * This method may be overridden. * @param imageLoader * @param clickListener */ public void applyTo (final PayloadRowView rowView, final ImageLoader imageLoader, final int reqWidth, final PayloadClickListener clickListener) { rowView.setText(getTitle()); } @Override public String toString () { return new StringBuilder("Payload{") .append(getType()) .append(",").append(getTitle()) .append("}").toString(); } public static final Comparator<Payload> TYPE_COMP = new Comparator<Payload>() { @Override public int compare (final Payload lhs, final Payload rhs) { final int lo = lhs.getType().ordinal(); final int ro = rhs.getType().ordinal(); if (lo != ro) return lo - ro; return 0; } }; }