full pipeline for reading saved stories by feed.

This commit is contained in:
dosiecki 2016-03-31 04:45:11 -07:00
parent 58e05a4205
commit 1e4c97384b
19 changed files with 90 additions and 131 deletions

View file

@ -335,6 +335,7 @@ public abstract class Reading extends NbActivity implements OnPageChangeListener
if (story == null ) { return false; }
menu.findItem(R.id.menu_reading_save).setTitle(story.starred ? R.string.menu_unsave_story : R.string.menu_save_story);
menu.findItem(R.id.menu_reading_fullscreen).setVisible(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT);
if (fs.isFilterSaved() || fs.isAllSaved() || (fs.getSingleSavedTag() != null)) menu.findItem(R.id.menu_reading_markunread).setVisible(false);
return true;
}

View file

@ -622,6 +622,8 @@ public class BlurDatabaseHelper {
* Get the unread count for the given feedset based on the totals in the feeds table.
*/
public int getUnreadCount(FeedSet fs, StateFilter stateFilter) {
// if reading in starred-only mode, there are no unreads, since stories vended as starred are never unread
if (fs.isFilterSaved()) return 0;
if (fs.isAllNormal()) {
return getFeedsUnreadCount(stateFilter, null, null);
} else if (fs.isAllSocial()) {
@ -993,6 +995,11 @@ public class BlurDatabaseHelper {
* both to populate a reading session or to count local unreads.
*/
private void getLocalStorySelectionAndArgs(StringBuilder sel, List<String> selArgs, FeedSet fs, StateFilter stateFilter, ReadFilter readFilter) {
// if the user has requested saved stories, ignore the unreads filter, as saveds do not have this state
if (fs.isFilterSaved()) {
readFilter = ReadFilter.ALL;
}
sel.append("SELECT " + DatabaseConstants.STORY_HASH);
if (fs.getSingleFeed() != null) {

View file

@ -365,6 +365,8 @@ public class DatabaseConstants {
return STORY_INTELLIGENCE_TOTAL + " > 0 ";
case NEG:
return STORY_INTELLIGENCE_TOTAL + " < 0 ";
case SAVED:
return STORY_STARRED + " = 1";
default:
return null;
}

View file

@ -19,8 +19,9 @@ public class FeedItemsAdapter extends StoryItemsAdapter {
private final Feed feed;
private int storyTitleUnread, storyTitleRead, storyContentUnread, storyContentRead, storyAuthorUnread, storyAuthorRead, storyDateUnread, storyDateRead;
private boolean ignoreReadStatus;
public FeedItemsAdapter(Context context, Feed feed, int layout, Cursor c, String[] from, int[] to) {
public FeedItemsAdapter(Context context, Feed feed, int layout, Cursor c, String[] from, int[] to, boolean ignoreReadStatus) {
super(context, layout, c, from, to);
this.feed = feed;
@ -32,6 +33,8 @@ public class FeedItemsAdapter extends StoryItemsAdapter {
storyAuthorRead = ThemeUtils.getStoryAuthorReadColor(context);
storyDateUnread = ThemeUtils.getStoryDateUnreadColor(context);
storyDateRead = ThemeUtils.getStoryDateReadColor(context);
this.ignoreReadStatus = ignoreReadStatus;
}
@Override
@ -51,7 +54,7 @@ public class FeedItemsAdapter extends StoryItemsAdapter {
Story story = Story.fromCursor(cursor);
if (! story.read) {
if (this.ignoreReadStatus || (! story.read)) {
((TextView) v.findViewById(R.id.row_item_author)).setTextColor(storyAuthorUnread);
((TextView) v.findViewById(R.id.row_item_date)).setTextColor(storyDateUnread);
((TextView) v.findViewById(R.id.row_item_title)).setTextColor(storyTitleUnread);

View file

@ -332,7 +332,9 @@ public class FolderListAdapter extends BaseExpandableListAdapter {
return FeedSet.singleSavedTag(starredCountsByTag.get(childPosition).tag);
} else {
Feed feed = activeFolderChildren.get(convertGroupPositionToActiveFolderIndex(groupPosition)).get(childPosition);
return FeedSet.singleFeed(feed.feedId);
FeedSet fs = FeedSet.singleFeed(feed.feedId);
if (currentState == StateFilter.SAVED) fs.setFilterSaved(true);
return fs;
}
}

View file

@ -198,8 +198,10 @@ public class Story implements Serializable {
return (score > 0);
case NEG:
return (score < 0);
case SAVED:
return (starred == true);
default:
return false;
return true;
}
}

View file

@ -7,7 +7,7 @@ import android.os.Bundle;
import com.newsblur.R;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.view.SocialItemViewBinder;
import com.newsblur.view.FeedItemViewBinder;
public class AllSharedStoriesItemListFragment extends ItemListFragment {
@ -17,7 +17,7 @@ public class AllSharedStoriesItemListFragment extends ItemListFragment {
String[] groupFrom = new String[] { DatabaseConstants.STORY_TITLE, DatabaseConstants.STORY_SHORT_CONTENT, DatabaseConstants.STORY_AUTHORS, DatabaseConstants.STORY_TIMESTAMP, DatabaseConstants.STORY_INTELLIGENCE_TOTAL, DatabaseConstants.FEED_TITLE };
int[] groupTo = new int[] { R.id.row_item_title, R.id.row_item_content, R.id.row_item_author, R.id.row_item_date, R.id.row_item_sidebar, R.id.row_item_feedtitle };
adapter = new MultipleFeedItemsAdapter(getActivity(), R.layout.row_folderitem, cursor, groupFrom, groupTo);
adapter.setViewBinder(new SocialItemViewBinder(getActivity()));
adapter.setViewBinder(new FeedItemViewBinder(getActivity()));
itemList.setAdapter(adapter);
}
super.onLoadFinished(loader, cursor);

View file

@ -7,7 +7,7 @@ import android.content.Loader;
import com.newsblur.R;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.view.SocialItemViewBinder;
import com.newsblur.view.FeedItemViewBinder;
public class AllStoriesItemListFragment extends ItemListFragment {
@ -17,7 +17,7 @@ public class AllStoriesItemListFragment extends ItemListFragment {
String[] groupFrom = new String[] { DatabaseConstants.STORY_TITLE, DatabaseConstants.STORY_SHORT_CONTENT, DatabaseConstants.STORY_AUTHORS, DatabaseConstants.STORY_TIMESTAMP, DatabaseConstants.STORY_INTELLIGENCE_TOTAL, DatabaseConstants.FEED_TITLE };
int[] groupTo = new int[] { R.id.row_item_title, R.id.row_item_content, R.id.row_item_author, R.id.row_item_date, R.id.row_item_sidebar, R.id.row_item_feedtitle };
adapter = new MultipleFeedItemsAdapter(getActivity(), R.layout.row_folderitem, cursor, groupFrom, groupTo);
adapter.setViewBinder(new SocialItemViewBinder(getActivity()));
adapter.setViewBinder(new FeedItemViewBinder(getActivity()));
itemList.setAdapter(adapter);
}
super.onLoadFinished(loader, cursor);

View file

@ -33,8 +33,8 @@ public class FeedItemListFragment extends ItemListFragment {
if ((adapter == null) && (cursor != null)) {
String[] groupFrom = new String[] { DatabaseConstants.STORY_TITLE, DatabaseConstants.STORY_SHORT_CONTENT, DatabaseConstants.STORY_AUTHORS, DatabaseConstants.STORY_TIMESTAMP, DatabaseConstants.STORY_INTELLIGENCE_TOTAL };
int[] groupTo = new int[] { R.id.row_item_title, R.id.row_item_content, R.id.row_item_author, R.id.row_item_date, R.id.row_item_sidebar };
adapter = new FeedItemsAdapter(getActivity(), feed, R.layout.row_item, cursor, groupFrom, groupTo);
adapter.setViewBinder(new FeedItemViewBinder(getActivity()));
adapter = new FeedItemsAdapter(getActivity(), feed, R.layout.row_item, cursor, groupFrom, groupTo, getFeedSet().isFilterSaved());
adapter.setViewBinder(new FeedItemViewBinder(getActivity(), getFeedSet().isFilterSaved()));
itemList.setAdapter(adapter);
}
super.onLoadFinished(loader, cursor);

View file

@ -10,7 +10,7 @@ import android.view.View;
import com.newsblur.R;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.view.SocialItemViewBinder;
import com.newsblur.view.FeedItemViewBinder;
public class GlobalSharedStoriesItemListFragment extends ItemListFragment {
@ -27,7 +27,7 @@ public class GlobalSharedStoriesItemListFragment extends ItemListFragment {
String[] groupFrom = new String[] { DatabaseConstants.STORY_TITLE, DatabaseConstants.STORY_SHORT_CONTENT, DatabaseConstants.STORY_AUTHORS, DatabaseConstants.STORY_TIMESTAMP, DatabaseConstants.STORY_INTELLIGENCE_TOTAL, DatabaseConstants.FEED_TITLE };
int[] groupTo = new int[] { R.id.row_item_title, R.id.row_item_content, R.id.row_item_author, R.id.row_item_date, R.id.row_item_sidebar, R.id.row_item_feedtitle };
adapter = new MultipleFeedItemsAdapter(getActivity(), R.layout.row_folderitem, cursor, groupFrom, groupTo, true);
adapter.setViewBinder(new SocialItemViewBinder(getActivity(), true));
adapter.setViewBinder(new FeedItemViewBinder(getActivity(), true));
itemList.setAdapter(adapter);
}
super.onLoadFinished(loader, cursor);

View file

@ -39,7 +39,6 @@ import com.newsblur.util.DefaultFeedView;
import com.newsblur.util.FeedSet;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.PrefsUtils;
import com.newsblur.util.StateFilter;
import com.newsblur.util.StoryOrder;
import com.newsblur.util.UIUtils;
import com.newsblur.util.ViewUtils;
@ -53,7 +52,6 @@ public abstract class ItemListFragment extends NbFragment implements OnScrollLis
@FindView(R.id.itemlistfragment_list) ListView itemList;
protected StoryItemsAdapter adapter;
protected DefaultFeedView defaultFeedView;
protected StateFilter intelState;
private boolean cursorSeenYet = false;
private boolean stopLoading = false;
@ -67,7 +65,6 @@ public abstract class ItemListFragment extends NbFragment implements OnScrollLis
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
intelState = PrefsUtils.getStateFilter(getActivity());
defaultFeedView = (DefaultFeedView)getArguments().getSerializable("defaultFeedView");
activity = (ItemsList) getActivity();
}
@ -205,9 +202,13 @@ public abstract class ItemListFragment extends NbFragment implements OnScrollLis
// the framework likes to trigger this on init before we even known counts, so disregard those
if (!cursorSeenYet) return;
// there are two fake rows for header/footer that don't count
int storiesSeen = totalCount - 2;
if (storiesSeen < 0) storiesSeen = 0;
// load an extra page or two worth of stories past the viewport
int desiredStoryCount = firstVisible + (visibleCount*2) + 1;
triggerRefresh(desiredStoryCount, totalCount);
triggerRefresh(desiredStoryCount, storiesSeen);
}
@Override
@ -268,7 +269,10 @@ public abstract class ItemListFragment extends NbFragment implements OnScrollLis
int truePosition = ((AdapterView.AdapterContextMenuInfo) menuInfo).position - 1;
Story story = adapter.getStory(truePosition);
if (story.read) {
if (getFeedSet().isFilterSaved()) {
menu.removeItem(R.id.menu_mark_story_as_read);
menu.removeItem(R.id.menu_mark_story_as_unread);
} else if (story.read) {
menu.removeItem(R.id.menu_mark_story_as_read);
} else {
menu.removeItem(R.id.menu_mark_story_as_unread);

View file

@ -10,7 +10,7 @@ import android.view.View;
import com.newsblur.R;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.view.SocialItemViewBinder;
import com.newsblur.view.FeedItemViewBinder;
public class ReadStoriesItemListFragment extends ItemListFragment {
@ -32,7 +32,7 @@ public class ReadStoriesItemListFragment extends ItemListFragment {
String[] groupFrom = new String[] { DatabaseConstants.STORY_TITLE, DatabaseConstants.STORY_SHORT_CONTENT, DatabaseConstants.STORY_AUTHORS, DatabaseConstants.STORY_TIMESTAMP, DatabaseConstants.STORY_INTELLIGENCE_TOTAL, DatabaseConstants.FEED_TITLE };
int[] groupTo = new int[] { R.id.row_item_title, R.id.row_item_content, R.id.row_item_author, R.id.row_item_date, R.id.row_item_sidebar, R.id.row_item_feedtitle };
adapter = new MultipleFeedItemsAdapter(getActivity(), R.layout.row_folderitem, cursor, groupFrom, groupTo);
adapter.setViewBinder(new SocialItemViewBinder(getActivity(), true));
adapter.setViewBinder(new FeedItemViewBinder(getActivity(), true));
itemList.setAdapter(adapter);
}
super.onLoadFinished(loader, cursor);

View file

@ -11,7 +11,7 @@ import com.newsblur.R;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.util.FeedUtils;
import com.newsblur.view.SocialItemViewBinder;
import com.newsblur.view.FeedItemViewBinder;
public class SavedStoriesItemListFragment extends ItemListFragment {
@ -33,7 +33,7 @@ public class SavedStoriesItemListFragment extends ItemListFragment {
String[] groupFrom = new String[] { DatabaseConstants.STORY_TITLE, DatabaseConstants.STORY_SHORT_CONTENT, DatabaseConstants.STORY_AUTHORS, DatabaseConstants.STORY_TIMESTAMP, DatabaseConstants.STORY_INTELLIGENCE_TOTAL, DatabaseConstants.FEED_TITLE };
int[] groupTo = new int[] { R.id.row_item_title, R.id.row_item_content, R.id.row_item_author, R.id.row_item_date, R.id.row_item_sidebar, R.id.row_item_feedtitle };
adapter = new MultipleFeedItemsAdapter(getActivity(), R.layout.row_folderitem, cursor, groupFrom, groupTo, true);
adapter.setViewBinder(new SocialItemViewBinder(getActivity(), true));
adapter.setViewBinder(new FeedItemViewBinder(getActivity(), true));
itemList.setAdapter(adapter);
}
super.onLoadFinished(loader, cursor);

View file

@ -7,7 +7,7 @@ import android.os.Bundle;
import com.newsblur.R;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.database.MultipleFeedItemsAdapter;
import com.newsblur.view.SocialItemViewBinder;
import com.newsblur.view.FeedItemViewBinder;
public class SocialFeedItemListFragment extends ItemListFragment {
@ -24,7 +24,7 @@ public class SocialFeedItemListFragment extends ItemListFragment {
String[] groupFroms = new String[] { DatabaseConstants.STORY_TITLE, DatabaseConstants.FEED_FAVICON_URL, DatabaseConstants.FEED_TITLE, DatabaseConstants.STORY_SHORT_CONTENT, DatabaseConstants.STORY_TIMESTAMP, DatabaseConstants.STORY_AUTHORS, DatabaseConstants.STORY_INTELLIGENCE_TOTAL};
int[] groupTos = new int[] { R.id.row_item_title, R.id.row_item_feedicon, R.id.row_item_feedtitle, R.id.row_item_content, R.id.row_item_date, R.id.row_item_author, R.id.row_item_sidebar};
adapter = new MultipleFeedItemsAdapter(getActivity(), R.layout.row_folderitem, cursor, groupFroms, groupTos);
adapter.setViewBinder(new SocialItemViewBinder(getActivity()));
adapter.setViewBinder(new FeedItemViewBinder(getActivity()));
itemList.setAdapter(adapter);
}
super.onLoadFinished(loader, cursor);

View file

@ -90,6 +90,7 @@ public class APIConstants {
public static final String VALUE_OLDER = "older";
public static final String VALUE_NEWER = "newer";
public static final String VALUE_TRUE = "true";
public static final String VALUE_STARRED = "starred";
public static final String URL_CONNECT_FACEBOOK = NEWSBLUR_URL + "/oauth/facebook_connect/";
public static final String URL_CONNECT_TWITTER = NEWSBLUR_URL + "/oauth/twitter_connect/";

View file

@ -301,6 +301,9 @@ public class APIManager {
uri = Uri.parse(APIConstants.URL_FEED_STORIES).buildUpon().appendPath(fs.getSingleFeed()).build();
values.put(APIConstants.PARAMETER_FEEDS, fs.getSingleFeed());
values.put(APIConstants.PARAMETER_INCLUDE_HIDDEN, APIConstants.VALUE_TRUE);
if (fs.isFilterSaved()) {
values.put(APIConstants.PARAMETER_READ_FILTER, APIConstants.VALUE_STARRED);
}
} else if (fs.getMultipleFeeds() != null) {
uri = Uri.parse(APIConstants.URL_RIVER_STORIES);
for (String feedId : fs.getMultipleFeeds()) values.put(APIConstants.PARAMETER_FEEDS, feedId);
@ -337,7 +340,7 @@ public class APIManager {
// request params common to most story sets
values.put(APIConstants.PARAMETER_PAGE_NUMBER, Integer.toString(pageNumber));
if (!(fs.isAllRead() || fs.isAllSaved())) {
if (!(fs.isAllRead() || fs.isAllSaved() || fs.isFilterSaved())) {
values.put(APIConstants.PARAMETER_READ_FILTER, filter.getParameterValue());
}
if (!fs.isAllRead()) {

View file

@ -26,13 +26,13 @@ public class FeedSet implements Serializable {
private Set<String> feeds;
/** Mapping of social feed IDs to usernames. */
private Map<String,String> socialFeeds;
private Set<String> savedFeeds;
private Set<String> savedTags;
private boolean isAllRead;
private boolean isGlobalShared;
private String folderName;
private String searchQuery;
private boolean isFilterSaved = false;
private FeedSet() {
// must use factory methods
@ -95,7 +95,7 @@ public class FeedSet implements Serializable {
*/
public static FeedSet allSaved() {
FeedSet fs = new FeedSet();
fs.savedFeeds = Collections.EMPTY_SET;
fs.savedTags = Collections.EMPTY_SET;
return fs;
}
@ -180,7 +180,7 @@ public class FeedSet implements Serializable {
}
public boolean isAllSaved() {
return (((savedFeeds != null) && (savedFeeds.size() < 1)) || ((savedTags != null) && (savedTags.size() < 1)));
return ((savedTags != null) && (savedTags.size() < 1));
}
/**
@ -219,6 +219,14 @@ public class FeedSet implements Serializable {
return this.searchQuery;
}
public void setFilterSaved(boolean isFilterSaved) {
this.isFilterSaved = isFilterSaved;
}
public boolean isFilterSaved() {
return this.isFilterSaved;
}
/**
* Gets a flat set of feed IDs that can be passed to API calls that take raw numeric IDs or
* social IDs prefixed with "social:". Returns an empty set for feed sets that don't track
@ -254,9 +262,9 @@ public class FeedSet implements Serializable {
if ( !TextUtils.equals(searchQuery, s.searchQuery)) return false;
if ( !TextUtils.equals(folderName, s.folderName)) return false;
if ( isFilterSaved != s.isFilterSaved ) return false;
if ( (feeds != null) && (s.feeds != null) && s.feeds.equals(feeds) ) return true;
if ( (socialFeeds != null) && (s.socialFeeds != null) && s.socialFeeds.equals(socialFeeds) ) return true;
if ( (savedFeeds != null) && (s.savedFeeds != null) && s.savedFeeds.equals(savedFeeds) ) return true;
if ( (savedTags != null) && (s.savedTags != null) && s.savedTags.equals(savedTags) ) return true;
if ( isAllRead && s.isAllRead ) return true;
if ( isGlobalShared && s.isGlobalShared ) return true;
@ -275,8 +283,8 @@ public class FeedSet implements Serializable {
if (socialFeeds != null) result = 37 * result + socialFeeds.hashCode();
if (folderName != null) result = 41 * result + folderName.hashCode();
if (searchQuery != null) result = 43 * result + searchQuery.hashCode();
if (savedFeeds != null) result = 47 * result + savedFeeds.hashCode();
if (savedTags != null) result = 53 * result + savedTags.hashCode();
if (isFilterSaved) result = 59 * result;
return result;
}

View file

@ -8,10 +8,12 @@ import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.newsblur.R;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.StoryUtils;
import java.util.Date;
@ -19,26 +21,23 @@ import java.util.Date;
public class FeedItemViewBinder implements ViewBinder {
private final Context context;
private int darkGray;
private int lightGray;
private boolean ignoreIntel;
public FeedItemViewBinder(final Context context) {
public FeedItemViewBinder(Context context, boolean ignoreIntel) {
this.context = context;
darkGray = context.getResources().getColor(R.color.darkgray);
lightGray = context.getResources().getColor(R.color.lightgray);
this.ignoreIntel = ignoreIntel;
}
public FeedItemViewBinder(Context context) {
this(context, false);
}
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
final String columnName = cursor.getColumnName(columnIndex);
int hasBeenRead = cursor.getInt(cursor.getColumnIndex(DatabaseConstants.STORY_READ));
if (TextUtils.equals(columnName, DatabaseConstants.STORY_READ)) {
if (hasBeenRead == 0) {
((TextView) view).setTextColor(darkGray);
} else {
((TextView) view).setTextColor(lightGray);
}
if (TextUtils.equals(cursor.getColumnName(columnIndex), DatabaseConstants.FEED_FAVICON_URL)) {
String faviconUrl = cursor.getString(columnIndex);
FeedUtils.imageLoader.displayImage(faviconUrl, ((ImageView) view), true);
return true;
} else if (TextUtils.equals(columnName, DatabaseConstants.STORY_AUTHORS)) {
if (TextUtils.isEmpty(cursor.getString(columnIndex))) {
@ -49,17 +48,22 @@ public class FeedItemViewBinder implements ViewBinder {
}
return true;
} else if (TextUtils.equals(columnName, DatabaseConstants.STORY_INTELLIGENCE_TOTAL)) {
int score = cursor.getInt(columnIndex);
Drawable icon;
if (score > 0) {
icon = view.getResources().getDrawable(R.drawable.g_icn_focus);
} else if (score == 0) {
icon = view.getResources().getDrawable(R.drawable.g_icn_unread);
} else {
icon = view.getResources().getDrawable(R.drawable.g_icn_hidden);
}
icon.mutate().setAlpha(hasBeenRead == 0 ? 255 : 127);
view.setBackgroundDrawable(icon);
if (! this.ignoreIntel) {
int hasBeenRead = cursor.getInt(cursor.getColumnIndex(DatabaseConstants.STORY_READ));
int score = cursor.getInt(columnIndex);
Drawable icon;
if (score > 0) {
icon = view.getResources().getDrawable(R.drawable.g_icn_focus);
} else if (score == 0) {
icon = view.getResources().getDrawable(R.drawable.g_icn_unread);
} else {
icon = view.getResources().getDrawable(R.drawable.g_icn_hidden);
}
icon.mutate().setAlpha(hasBeenRead == 0 ? 255 : 127);
view.setBackgroundDrawable(icon);
} else {
view.setBackgroundDrawable(null);
}
return true;
} else if (TextUtils.equals(columnName, DatabaseConstants.STORY_TITLE)) {
((TextView) view).setText(Html.fromHtml(cursor.getString(columnIndex)));

View file

@ -1,78 +0,0 @@
package com.newsblur.view;
import android.content.Context;
import android.database.Cursor;
import android.widget.SimpleCursorAdapter.ViewBinder;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.newsblur.R;
import com.newsblur.database.DatabaseConstants;
import com.newsblur.util.FeedUtils;
import com.newsblur.util.StoryUtils;
import java.util.Date;
public class SocialItemViewBinder implements ViewBinder {
private final Context context;
private boolean ignoreIntel;
public SocialItemViewBinder(final Context context, boolean ignoreIntel) {
this.context = context;
this.ignoreIntel = ignoreIntel;
}
public SocialItemViewBinder(final Context context) {
this(context, false);
}
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
final String columnName = cursor.getColumnName(columnIndex);
final int hasBeenRead = cursor.getInt(cursor.getColumnIndex(DatabaseConstants.STORY_READ));
if (TextUtils.equals(cursor.getColumnName(columnIndex), DatabaseConstants.FEED_FAVICON_URL)) {
String faviconUrl = cursor.getString(columnIndex);
FeedUtils.imageLoader.displayImage(faviconUrl, ((ImageView) view), true);
return true;
} else if (TextUtils.equals(columnName, DatabaseConstants.STORY_INTELLIGENCE_TOTAL)) {
if (! this.ignoreIntel) {
int score = cursor.getInt(columnIndex);
Drawable icon;
if (score > 0) {
icon = view.getResources().getDrawable(R.drawable.g_icn_focus);
} else if (score == 0) {
icon = view.getResources().getDrawable(R.drawable.g_icn_unread);
} else {
icon = view.getResources().getDrawable(R.drawable.g_icn_hidden);
}
icon.mutate().setAlpha(hasBeenRead == 0 ? 255 : 127);
view.setBackgroundDrawable(icon);
} else {
view.setBackgroundDrawable(null);
}
return true;
} else if (TextUtils.equals(columnName, DatabaseConstants.STORY_AUTHORS)) {
String authors = cursor.getString(columnIndex);
if (TextUtils.isEmpty(authors)) {
view.setVisibility(View.GONE);
} else {
((TextView) view).setText(authors.toUpperCase());
view.setVisibility(View.VISIBLE);
}
return true;
} else if (TextUtils.equals(columnName, DatabaseConstants.STORY_TITLE)) {
((TextView) view).setText(Html.fromHtml(cursor.getString(columnIndex)));
return true;
} else if (TextUtils.equals(columnName, DatabaseConstants.STORY_TIMESTAMP)) {
((TextView) view).setText(StoryUtils.formatShortDate(context, new Date(cursor.getLong(columnIndex))));
return true;
}
return false;
}
}