diff --git a/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java b/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java
index 1262439fb..cf671bae0 100644
--- a/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java
+++ b/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java
@@ -113,6 +113,7 @@ public static boolean isRefreshRequired(final Context context, final String key)
|| key.equals(context.getString(R.string.pref_behaviour_fling_post_right_key))
|| key.equals(context.getString(R.string.pref_behaviour_nsfw_key))
|| key.equals(context.getString(R.string.pref_behaviour_postcount_key))
+ || key.equals(context.getString(R.string.pref_behaviour_mark_read_on_scroll_key))
|| key.equals(context.getString(R.string.pref_behaviour_comment_min_key))
|| key.equals(context.getString(R.string.pref_behaviour_pinned_subredditsort_key))
|| key.equals(context.getString(
@@ -1772,6 +1773,12 @@ public static boolean pref_behaviour_keep_screen_awake() {
false);
}
+ public static boolean pref_mark_read_on_scroll() {
+ return getBoolean(
+ R.string.pref_behaviour_mark_read_on_scroll_key,
+ false);
+ }
+
@Nullable
public static String pref_reddit_client_id_override() {
final String value = getString(R.string.pref_reddit_client_id_override_key, null);
diff --git a/src/main/java/org/quantumbadger/redreader/fragments/PostListingFragment.java b/src/main/java/org/quantumbadger/redreader/fragments/PostListingFragment.java
index 573aebabd..937536e00 100644
--- a/src/main/java/org/quantumbadger/redreader/fragments/PostListingFragment.java
+++ b/src/main/java/org/quantumbadger/redreader/fragments/PostListingFragment.java
@@ -526,6 +526,43 @@ private void onLoadMoreItemsCheck() {
General.checkThisIsUIThread();
+ if(PrefsUtility.pref_mark_read_on_scroll()) {
+
+ final LinearLayoutManager layoutManager
+ = (LinearLayoutManager)mRecyclerView.getLayoutManager();
+
+ if(layoutManager != null) {
+
+ final int firstVisibleItemPosition
+ = layoutManager.findFirstVisibleItemPosition();
+
+ final int firstCompletelyVisibleItemPosition
+ = layoutManager.findFirstCompletelyVisibleItemPosition();
+
+ if(firstVisibleItemPosition >= 1
+ && firstCompletelyVisibleItemPosition != 0) {
+
+ final RedditPostView view = (RedditPostView) layoutManager.getChildAt(0);
+
+ final int position =
+ (view != null) ? layoutManager.getPosition(view) : RecyclerView.NO_POSITION;
+
+ final RedditPreparedPost post
+ = (position == firstVisibleItemPosition) ? view.getPost() : null;
+
+ // Mark the first visible post read if it is unread
+ if((post != null) && !post.isRead()) {
+ new Thread() {
+ @Override
+ public void run() {
+ post.markAsRead(getActivity());
+ }
+ }.start();
+ }
+ }
+ }
+ }
+
if(mReadyToDownloadMore && mAfter != null && !mAfter.equals(mLastAfter)) {
final LinearLayoutManager layoutManager
diff --git a/src/main/java/org/quantumbadger/redreader/views/RedditPostView.java b/src/main/java/org/quantumbadger/redreader/views/RedditPostView.java
index 6bce3e40d..c43697c7d 100644
--- a/src/main/java/org/quantumbadger/redreader/views/RedditPostView.java
+++ b/src/main/java/org/quantumbadger/redreader/views/RedditPostView.java
@@ -667,4 +667,8 @@ private void showPrefPrompt() {
.apply();
});
}
+
+ @Nullable public RedditPreparedPost getPost() {
+ return mPost;
+ }
}
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 89b7aa7e2..2e4e14641 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -1907,4 +1907,8 @@
Change video speed
Choose playback speed
Speed
+
+
+ pref_behaviour_mark_read_on_scroll
+ Mark posts as read on scroll
diff --git a/src/main/res/xml/prefs_behaviour.xml b/src/main/res/xml/prefs_behaviour.xml
index ff44f146e..a5d63882f 100644
--- a/src/main/res/xml/prefs_behaviour.xml
+++ b/src/main/res/xml/prefs_behaviour.xml
@@ -181,6 +181,10 @@
android:entryValues="@array/pref_behaviour_postcount_items_return"
android:defaultValue="ALL"/>
+
+