mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-09-18 21:50:56 +00:00
full pipeline for reading saved stories by feed.
This commit is contained in:
parent
58e05a4205
commit
1e4c97384b
19 changed files with 90 additions and 131 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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/";
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)));
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue