package com.vaguehope.onosendai.model; import android.database.Cursor; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.vaguehope.onosendai.R; import com.vaguehope.onosendai.images.ImageLoadRequest; import com.vaguehope.onosendai.images.ImageLoader; import com.vaguehope.onosendai.model.LinkedTweetLoader.TweetLoadRequest; import com.vaguehope.onosendai.model.TweetRowView.QuotingTweetRowView; import com.vaguehope.onosendai.storage.TweetCursorReader; import com.vaguehope.onosendai.widget.ClickToExpand; import com.vaguehope.onosendai.widget.PendingImage; public enum TweetLayout { MAIN(0, R.layout.tweetlistrow) { @Override public TweetRowView makeRowView (final View view, final TweetListViewState tweetListViewState) { return new TweetRowView( (ImageView) view.findViewById(R.id.imgMain), (TextView) view.findViewById(R.id.txtTweet), (TextView) view.findViewById(R.id.txtName) ); } @Override public void applyTweetTo (final Tweet item, final TweetRowView rowView, final ImageLoader imageLoader, final int reqWidth, final LinkedTweetLoader tweetLoader) { if (item.isFiltered()) { rowView.getTweet().setText(R.string.tweet_filtered); } else { rowView.getTweet().setText(item.getBody()); } final String usernameWithSubtitle = item.getUsernameWithSubtitle(); rowView.getName().setText(usernameWithSubtitle != null ? usernameWithSubtitle : item.getFullnameWithSubtitle()); final String avatarUrl = item.getAvatarUrl(); if (avatarUrl != null) { imageLoader.loadImage(new ImageLoadRequest(avatarUrl, rowView.getAvatar())); } else { rowView.getAvatar().setImageResource(R.drawable.question_blue); } } @Override public void applyCursorTo (final Cursor c, final TweetCursorReader cursorReader, final TweetRowView rowView, final ImageLoader imageLoader, final int reqWidth, final LinkedTweetLoader tweetLoader) { final String name; final String username = cursorReader.readUsernameWithSubtitle(c); if (username != null) { name = username; } else { name = cursorReader.readFullnameWithSubtitle(c); } rowView.getName().setText(name); if (cursorReader.readFiltered(c)) { rowView.getTweet().setText(R.string.tweet_filtered); } else { rowView.getTweet().setText(cursorReader.readBody(c)); } final String avatarUrl = cursorReader.readAvatar(c); if (avatarUrl != null) { imageLoader.loadImage(new ImageLoadRequest(avatarUrl, rowView.getAvatar())); } else { rowView.getAvatar().setImageResource(R.drawable.question_blue); } } }, INLINE_MEDIA(1, R.layout.tweetlistinlinemediarow) { @Override public TweetRowView makeRowView (final View view, final TweetListViewState tweetListViewState) { final PendingImage pendingImage = (PendingImage) view.findViewById(R.id.imgMedia); pendingImage.setExpandedTracker(tweetListViewState.getExpandedImagesTracker()); return new TweetRowView( (ImageView) view.findViewById(R.id.imgMain), (TextView) view.findViewById(R.id.txtTweet), (TextView) view.findViewById(R.id.txtName), pendingImage ); } @Override public void applyTweetTo (final Tweet item, final TweetRowView rowView, final ImageLoader imageLoader, final int reqWidth, final LinkedTweetLoader tweetLoader) { MAIN.applyTweetTo(item, rowView, imageLoader, reqWidth, tweetLoader); setImage(item.getInlineMediaUrl(), rowView, imageLoader, reqWidth); } @Override public void applyCursorTo (final Cursor c, final TweetCursorReader cursorReader, final TweetRowView rowView, final ImageLoader imageLoader, final int reqWidth, final LinkedTweetLoader tweetLoader) { MAIN.applyCursorTo(c, cursorReader, rowView, imageLoader, reqWidth, tweetLoader); setImage(cursorReader.readInlineMedia(c), rowView, imageLoader, reqWidth); } }, QUOTED(2, R.layout.tweetlistquoterow) { @Override public TweetRowView makeRowView (final View view, final TweetListViewState tweetListViewState) { final View t = view.findViewById(R.id.tweet); final View qt = view.findViewById(R.id.quotedTweet); final PendingImage pendingImage = (PendingImage) t.findViewById(R.id.imgMedia); pendingImage.setExpandedTracker(tweetListViewState.getExpandedImagesTracker()); final PendingImage qPendingImage = (PendingImage) qt.findViewById(R.id.imgMedia); qPendingImage.setExpandedTracker(tweetListViewState.getExpandedImagesTracker()); return new QuotingTweetRowView( (ImageView) t.findViewById(R.id.imgMain), (TextView) t.findViewById(R.id.txtTweet), (TextView) t.findViewById(R.id.txtName), pendingImage, (ClickToExpand) view.findViewById(R.id.quotedClickToExpand), (ImageView) qt.findViewById(R.id.imgMain), (TextView) qt.findViewById(R.id.txtTweet), (TextView) qt.findViewById(R.id.txtName), qPendingImage ); } @Override public void applyTweetTo (final Tweet item, final TweetRowView rowView, final ImageLoader imageLoader, final int reqWidth, final LinkedTweetLoader tweetLoader) { MAIN.applyTweetTo(item, rowView, imageLoader, reqWidth, tweetLoader); final String inlineMediaUrl = item.getInlineMediaUrl(); if (inlineMediaUrl != null) { setImage(inlineMediaUrl, rowView, imageLoader, reqWidth); } else { rowView.showInlineMedia(false); } tweetLoader.loadTweet(new TweetLoadRequest(item.getSid(), item.getQuotedSid(), (QuotingTweetRowView) rowView, imageLoader, reqWidth)); } @Override public void applyCursorTo (final Cursor c, final TweetCursorReader cursorReader, final TweetRowView rowView, final ImageLoader imageLoader, final int reqWidth, final LinkedTweetLoader tweetLoader) { MAIN.applyCursorTo(c, cursorReader, rowView, imageLoader, reqWidth, tweetLoader); final String inlineMediaUrl = cursorReader.readInlineMedia(c); if (inlineMediaUrl != null) { setImage(inlineMediaUrl, rowView, imageLoader, reqWidth); } else { rowView.showInlineMedia(false); } tweetLoader.loadTweet(new TweetLoadRequest(cursorReader.readSid(c), cursorReader.readQuotedSid(c), (QuotingTweetRowView) rowView, imageLoader, reqWidth)); } }, SEAMLESS_MEDIA(3, R.layout.tweetlistseamlessmediarow) { @Override public TweetRowView makeRowView (final View view, final TweetListViewState tweetListViewState) { final PendingImage pendingImage = (PendingImage) view.findViewById(R.id.imgMedia); pendingImage.setExpandedTracker(tweetListViewState.getExpandedImagesTracker()); return new TweetRowView(pendingImage); } @Override public void applyTweetTo (final Tweet item, final TweetRowView rowView, final ImageLoader imageLoader, final int reqWidth, final LinkedTweetLoader tweetLoader) { setImage(item.getInlineMediaUrl(), rowView, imageLoader, reqWidth); } @Override public void applyCursorTo (final Cursor c, final TweetCursorReader cursorReader, final TweetRowView rowView, final ImageLoader imageLoader, final int reqWidth, final LinkedTweetLoader tweetLoader) { setImage(cursorReader.readInlineMedia(c), rowView, imageLoader, reqWidth); } }; protected static void setImage (final String inlineMediaUrl, final TweetRowView rowView, final ImageLoader imageLoader, final int reqWidth) { final ImageView imageView = rowView.getInlineMedia(); rowView.showInlineMedia(true); if (inlineMediaUrl != null) { imageLoader.loadImage(new ImageLoadRequest(inlineMediaUrl, imageView, reqWidth, rowView.getInlineMediaLoadListener())); } else { imageView.setImageResource(R.drawable.question_blue); } } private final int index; private final int layout; private TweetLayout (final int index, final int layout) { this.index = index; this.layout = layout; } public int getIndex () { return this.index; } public int getLayout () { return this.layout; } public abstract TweetRowView makeRowView (final View view, final TweetListViewState tweetListViewState); public abstract void applyTweetTo (Tweet item, TweetRowView rowView, ImageLoader imageLoader, int reqWidth, LinkedTweetLoader tweetLoader); public abstract void applyCursorTo (Cursor c, TweetCursorReader cursorReader, TweetRowView rowView, ImageLoader imageLoader, int reqWidth, LinkedTweetLoader tweetLoader); }