package com.vaguehope.onosendai.model; import android.content.Context; import android.database.Cursor; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; import com.vaguehope.onosendai.config.InlineMediaStyle; import com.vaguehope.onosendai.images.ImageLoader; import com.vaguehope.onosendai.storage.TweetCursorReader; public class TweetListCursorAdapter extends CursorAdapter { private final InlineMediaStyle inlineMediaStyle; private final ImageLoader imageLoader; private final LinkedTweetLoader tweetLoader; private final View listView; private final LayoutInflater layoutInflater; private final TweetCursorReader cursorReader = new TweetCursorReader(); private final TweetListViewState tweetListViewState = new TweetListViewState(); public TweetListCursorAdapter (final Context context, final InlineMediaStyle inlineMediaStyle, final ImageLoader imageLoader, final LinkedTweetLoader tweetLoader, final View listView) { super(context, null, false); // Initialise with no cursor. this.inlineMediaStyle = inlineMediaStyle; this.imageLoader = imageLoader; this.tweetLoader = tweetLoader; this.listView = listView; this.layoutInflater = LayoutInflater.from(context); } public void dispose () { changeCursor(null); } public String getItemSid (final int position) { return this.cursorReader.readSid((Cursor) getItem(position)); } public long getItemTime (final int position) { if (getCount() < 1) return -1; return this.cursorReader.readTime((Cursor) getItem(position)); } @Override public int getViewTypeCount () { return TweetLayout.values().length; } @Override public int getItemViewType (final int position) { return tweetLayoutType((Cursor) getItem(position)).getIndex(); } @Override public View newView (final Context context, final Cursor cursor, final ViewGroup parent) { final TweetLayout layoutType = tweetLayoutType(cursor); final View view = this.layoutInflater.inflate(layoutType.getLayout(), null); final TweetRowView rowView = layoutType.makeRowView(view, this.tweetListViewState); view.setTag(rowView); return view; } @Override public void bindView (final View view, final Context context, final Cursor cursor) { final TweetLayout layoutType = tweetLayoutType(cursor); final TweetRowView rowView = (TweetRowView) view.getTag(); layoutType.applyCursorTo(cursor, this.cursorReader, rowView, this.imageLoader, this.listView.getWidth(), this.tweetLoader); } private TweetLayout tweetLayoutType (final Cursor c) { switch (this.inlineMediaStyle) { case NONE: // TODO inline quote without media? return TweetLayout.MAIN; case INLINE: if (this.cursorReader.readQuotedSid(c) != null) return TweetLayout.QUOTED; return this.cursorReader.readInlineMedia(c) != null && !this.cursorReader.readFiltered(c) ? TweetLayout.INLINE_MEDIA : TweetLayout.MAIN; case SEAMLESS: return this.cursorReader.readInlineMedia(c) != null ? TweetLayout.SEAMLESS_MEDIA : TweetLayout.MAIN; default: return TweetLayout.MAIN; } } }