diff --git a/clients/android/NewsBlur/app/src/main/java/com/newsblur/database/StoryViewAdapter.java b/clients/android/NewsBlur/app/src/main/java/com/newsblur/database/StoryViewAdapter.java index b7e679bb0..4075a0eaf 100644 --- a/clients/android/NewsBlur/app/src/main/java/com/newsblur/database/StoryViewAdapter.java +++ b/clients/android/NewsBlur/app/src/main/java/com/newsblur/database/StoryViewAdapter.java @@ -24,9 +24,12 @@ import android.widget.RelativeLayout; import android.widget.TextView; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.stream.Collectors; import com.newsblur.R; import com.newsblur.activity.FeedItemsList; @@ -195,12 +198,12 @@ public class StoryViewAdapter extends RecyclerView.Adapter= getStoryCount()) { return (footerViews.get(position - getStoryCount()).hashCode()); } - + if (position >= stories.size() || position < 0) return 0; return stories.get(position).storyHash.hashCode(); } - public void swapCursor(final Cursor c, final RecyclerView rv, Parcelable oldScrollState) { + public void swapCursor(final Cursor c, final RecyclerView rv, Parcelable oldScrollState, final boolean ignoreCursorNewStories) { // cache the identity of the most recent cursor so async batches can check to // see if they are stale cursor = c; @@ -213,7 +216,7 @@ public class StoryViewAdapter extends RecyclerView.Adapter(0); + newStories = new ArrayList<>(); } else { if (c.isClosed()) return; - newStories = new ArrayList(c.getCount()); + newStories = new ArrayList<>(c.getCount()); c.moveToPosition(-1); + + Set currentStoryHashes = ignoreCursorNewStories ? stories.stream() + .map(story -> story.storyHash) + .collect(Collectors.toSet()) : Collections.emptySet(); + while (c.moveToNext()) { if (c.isClosed()) return; Story s = Story.fromCursor(c); + if (ignoreCursorNewStories && !currentStoryHashes.contains(s.storyHash)) return; + s.bindExternValues(c); newStories.add(s); if (! s.read) indexOfLastUnread = c.getPosition(); @@ -336,8 +346,8 @@ public class StoryViewAdapter extends RecyclerView.Adapter 0)) {