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"/> + +