From b8dcbf77290a6ebf3b5e755a37fb268d5c28ddd3 Mon Sep 17 00:00:00 2001 From: Daniel Ho Date: Sat, 25 Nov 2023 01:27:38 -0800 Subject: [PATCH 1/6] Add setting for marking posts as read --- .../org/quantumbadger/redreader/common/PrefsUtility.java | 6 ++++++ .../redreader/reddit/prepared/RedditChangeDataManager.java | 5 +++-- src/main/res/values/strings.xml | 3 +++ src/main/res/xml/prefs_behaviour.xml | 4 ++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java b/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java index 87c6e73ae..d319618eb 100644 --- a/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java +++ b/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java @@ -1164,6 +1164,12 @@ public static boolean pref_behaviour_hide_read_posts() { false); } + public static boolean pref_behaviour_mark_posts_as_read() { + return getBoolean( + R.string.pref_behaviour_mark_posts_as_read_key, + true); + } + public enum SharingDomain { STANDARD_REDDIT("reddit.com"), SHORT_REDDIT("redd.it"), diff --git a/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditChangeDataManager.java b/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditChangeDataManager.java index 622a87c4a..fffda756a 100644 --- a/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditChangeDataManager.java +++ b/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditChangeDataManager.java @@ -331,7 +331,8 @@ Entry update( timestamp, Boolean.TRUE.equals(post.getLikes()), Boolean.FALSE.equals(post.getLikes()), - post.getClicked() || mIsRead, + (PrefsUtility.pref_behaviour_mark_posts_as_read() && post.getClicked()) + || mIsRead, post.getSaved(), post.getHidden() ? true : null); } @@ -375,7 +376,7 @@ Entry markRead(final TimestampUTC timestamp, final Boolean read) { timestamp, mIsUpvoted, mIsDownvoted, - read, + PrefsUtility.pref_behaviour_mark_posts_as_read() && read, mIsSaved, mIsHidden); } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 5eb9b01c9..ad25bbbf4 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1911,4 +1911,7 @@ Mark as Read Mark as Unread + pref_behaviour_mark_posts_as_read + Mark posts as read + diff --git a/src/main/res/xml/prefs_behaviour.xml b/src/main/res/xml/prefs_behaviour.xml index ff44f146e..b64412042 100644 --- a/src/main/res/xml/prefs_behaviour.xml +++ b/src/main/res/xml/prefs_behaviour.xml @@ -175,6 +175,10 @@ android:key="@string/pref_behaviour_hide_read_posts_key" android:defaultValue="false"/> + + Date: Sun, 20 Apr 2025 14:49:39 +0100 Subject: [PATCH 2/6] Ensure manually marking as read still works (#1145) --- .../reddit/prepared/RedditChangeDataManager.java | 8 +++++--- .../redreader/reddit/prepared/RedditPreparedPost.java | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditChangeDataManager.java b/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditChangeDataManager.java index fffda756a..6b199869b 100644 --- a/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditChangeDataManager.java +++ b/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditChangeDataManager.java @@ -19,7 +19,9 @@ import android.content.Context; import android.util.Log; + import androidx.annotation.NonNull; + import org.quantumbadger.redreader.account.RedditAccount; import org.quantumbadger.redreader.account.RedditAccountManager; import org.quantumbadger.redreader.common.AndroidCommon; @@ -376,7 +378,7 @@ Entry markRead(final TimestampUTC timestamp, final Boolean read) { timestamp, mIsUpvoted, mIsDownvoted, - PrefsUtility.pref_behaviour_mark_posts_as_read() && read, + read, mIsSaved, mIsHidden); } @@ -563,8 +565,8 @@ public void markHidden( } public void markRead( - final TimestampUTC timestamp, - final RedditIdAndType thing, + final TimestampUTC timestamp, + final RedditIdAndType thing, final Boolean read) { synchronized(mLock) { diff --git a/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditPreparedPost.java b/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditPreparedPost.java index 46e761517..327f2cfeb 100644 --- a/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditPreparedPost.java +++ b/src/main/java/org/quantumbadger/redreader/reddit/prepared/RedditPreparedPost.java @@ -790,7 +790,9 @@ public interface ThumbnailLoadedCallback { } public void markAsRead(final Context context) { - markAsRead(context, true); + if (PrefsUtility.pref_behaviour_mark_posts_as_read()) { + markAsRead(context, true); + } } public void markAsRead( From 161904ed52b17719fd488a45c6b83549e620ec16 Mon Sep 17 00:00:00 2001 From: QuantumBadger Date: Sun, 20 Apr 2025 14:50:43 +0100 Subject: [PATCH 3/6] Updated changelog (#1145) --- src/main/assets/changelog-alpha.txt | 1 + src/main/assets/changelog.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/assets/changelog-alpha.txt b/src/main/assets/changelog-alpha.txt index 103486012..60a9acd34 100644 --- a/src/main/assets/changelog-alpha.txt +++ b/src/main/assets/changelog-alpha.txt @@ -46,6 +46,7 @@ Minimum supported Android version is now 5.0 /Alpha 350 (2024-04-14) Ability to upload an image when submitting a comment (thanks to folkemat) Comments submitted by current user now have username highlighted (thanks to folkemat) +Added preference to prevent posts being marked as read when clicked (thanks to Daniel Ho) /Alpha 349 (2024-03-24) Ability to block users in user profile (thanks to folkemat) diff --git a/src/main/assets/changelog.txt b/src/main/assets/changelog.txt index 79b7a70c6..5860cb11e 100644 --- a/src/main/assets/changelog.txt +++ b/src/main/assets/changelog.txt @@ -2,6 +2,7 @@ Added video playback speed control (thanks to folkemat) Added support for emotes in comment flairs (thanks to bharatknv) Added "Mark as Read/Unread" fling action, and optional context menu item (thanks to JoshAusHessen and codeofdusk) +Added preference to prevent posts being marked as read when clicked (thanks to Daniel Ho) 113/1.24.1 Fix "Malformed URL" error for Imgur images (thanks to Alexey Rochev) From 423c32f2a79c1a4ecf0ebe41a10307db071545e4 Mon Sep 17 00:00:00 2001 From: Daniel Ho Date: Wed, 4 Jun 2025 23:59:39 -0700 Subject: [PATCH 4/6] Improve color attributes and indentation setting description - Add missing format="color" to loading ring color attributes in attrs.xml - Rename indentation setting to "Show colorful comment indent bars" for clarity --- src/main/res/values/attrs.xml | 4 ++-- src/main/res/values/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/res/values/attrs.xml b/src/main/res/values/attrs.xml index cf27036dd..f06a49591 100644 --- a/src/main/res/values/attrs.xml +++ b/src/main/res/values/attrs.xml @@ -32,8 +32,8 @@ - - + + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index eba05baca..25358735d 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -506,7 +506,7 @@ - Show indent lines + Show colorful comment indent bars pref_appearance_indentlines From 776217d7724346399b8163876ed6c11893180b0b Mon Sep 17 00:00:00 2001 From: Daniel Ho Date: Thu, 5 Jun 2025 00:09:24 -0700 Subject: [PATCH 5/6] Add setting for colorful comment indents --- .../redreader/common/RRThemeAttributes.java | 18 +++++++- .../redreader/views/IndentView.java | 42 ++++++++++--------- src/main/res/values/attrs.xml | 7 ++++ 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/quantumbadger/redreader/common/RRThemeAttributes.java b/src/main/java/org/quantumbadger/redreader/common/RRThemeAttributes.java index f0901fc75..07ddfa3fe 100644 --- a/src/main/java/org/quantumbadger/redreader/common/RRThemeAttributes.java +++ b/src/main/java/org/quantumbadger/redreader/common/RRThemeAttributes.java @@ -41,6 +41,12 @@ public class RRThemeAttributes { public final int rrCrosspostBackCol; public final int rrCrosspostTextCol; + public final int rrIndentLineCol1; + public final int rrIndentLineCol2; + public final int rrIndentLineCol3; + public final int rrIndentLineCol4; + public final int rrIndentLineCol5; + private final EnumSet mCommentHeaderItems; public final float rrCommentFontScale; @@ -62,7 +68,12 @@ public RRThemeAttributes(final Context context) { R.attr.rrMainTextCol, com.google.android.material.R.attr.colorAccent, R.attr.rrCrosspostBackCol, - R.attr.rrCrosspostTextCol + R.attr.rrCrosspostTextCol, + R.attr.rrIndentLineCol1, + R.attr.rrIndentLineCol2, + R.attr.rrIndentLineCol3, + R.attr.rrIndentLineCol4, + R.attr.rrIndentLineCol5 }); rrCommentHeaderBoldCol = appearance.getColor(0, 255); @@ -79,6 +90,11 @@ public RRThemeAttributes(final Context context) { colorAccent = appearance.getColor(11, 255); rrCrosspostBackCol = appearance.getColor(12, 255); rrCrosspostTextCol = appearance.getColor(13, 255); + rrIndentLineCol1 = appearance.getColor(14, 0xFF6B8AC7); // Blue fallback + rrIndentLineCol2 = appearance.getColor(15, 0xFF5FA05F); // Green fallback + rrIndentLineCol3 = appearance.getColor(16, 0xFFCD8500); // Orange fallback + rrIndentLineCol4 = appearance.getColor(17, 0xFFB8374A); // Red fallback + rrIndentLineCol5 = appearance.getColor(18, 0xFF8E6FB8); // Purple fallback appearance.recycle(); diff --git a/src/main/java/org/quantumbadger/redreader/views/IndentView.java b/src/main/java/org/quantumbadger/redreader/views/IndentView.java index 1fc02873b..d737e97bd 100644 --- a/src/main/java/org/quantumbadger/redreader/views/IndentView.java +++ b/src/main/java/org/quantumbadger/redreader/views/IndentView.java @@ -27,6 +27,7 @@ import org.quantumbadger.redreader.R; import org.quantumbadger.redreader.common.General; import org.quantumbadger.redreader.common.PrefsUtility; +import org.quantumbadger.redreader.common.RRThemeAttributes; /** * Draws the left margin for comments based on the RedditPreparedComment#indentation number @@ -41,7 +42,8 @@ class IndentView extends View { private final boolean mPrefDrawLines; - private float[] mLineBuffer; + private final int[] mIndentColors; // Array to hold indentation colors + private final int mOriginalIndentLineCol; // Original single line color public IndentView(final Context context) { this(context, null); @@ -63,7 +65,6 @@ public IndentView( mHalfALine = mPixelsPerLine / 2; final int rrIndentBackgroundCol; - final int rrIndentLineCol; { final TypedArray attr = context.obtainStyledAttributes(new int[] { @@ -72,13 +73,20 @@ public IndentView( }); rrIndentBackgroundCol = attr.getColor(0, General.COLOR_INVALID); - rrIndentLineCol = attr.getColor(1, General.COLOR_INVALID); - + mOriginalIndentLineCol = attr.getColor(1, General.COLOR_INVALID); attr.recycle(); } + // Load indentation colors from RRThemeAttributes + final RRThemeAttributes themeAttributes = new RRThemeAttributes(context); + mIndentColors = new int[5]; + mIndentColors[0] = themeAttributes.rrIndentLineCol1; + mIndentColors[1] = themeAttributes.rrIndentLineCol2; + mIndentColors[2] = themeAttributes.rrIndentLineCol3; + mIndentColors[3] = themeAttributes.rrIndentLineCol4; + mIndentColors[4] = themeAttributes.rrIndentLineCol5; + this.setBackgroundColor(rrIndentBackgroundCol); - mPaint.setColor(rrIndentLineCol); mPaint.setStrokeWidth(mPixelsPerLine); mPrefDrawLines = PrefsUtility.pref_appearance_indentlines(); @@ -92,20 +100,18 @@ protected void onDraw(final Canvas canvas) { final int height = getMeasuredHeight(); if(mPrefDrawLines) { - // i keeps track of indentation, and - // l is to populate the float[] with line co-ordinates - int l = 0; - int i = 0; - while(i < mIndent) { - final float x = (mPixelsPerIndent * ++i) - mHalfALine; - mLineBuffer[l++] = x; // start-x - mLineBuffer[l++] = 0; // start-y - mLineBuffer[l++] = x; // stop-x - mLineBuffer[l++] = height; // stop-y + // Draw each line individually with its own color + for(int i = 0; i < mIndent; i++) { + final float x = (mPixelsPerIndent * (i + 1)) - mHalfALine; + // Set color based on indentation level, cycling through the color array + mPaint.setColor(mIndentColors[i % mIndentColors.length]); + // Draw each line individually + canvas.drawLine(x, 0, x, height, mPaint); } - canvas.drawLines(mLineBuffer, mPaint); } else { + // Use the original theme color when colorful bars are disabled + mPaint.setColor(mOriginalIndentLineCol); final float rightLine = getWidth() - mHalfALine; canvas.drawLine(rightLine, 0, rightLine, getHeight(), mPaint); } @@ -120,10 +126,6 @@ public void setIndentation(final int indent) { getLayoutParams().width = (mPixelsPerIndent * indent); mIndent = indent; - if(mPrefDrawLines) { - mLineBuffer = new float[mIndent * 4]; - } - invalidate(); requestLayout(); } diff --git a/src/main/res/values/attrs.xml b/src/main/res/values/attrs.xml index f06a49591..16d31a2d5 100644 --- a/src/main/res/values/attrs.xml +++ b/src/main/res/values/attrs.xml @@ -116,4 +116,11 @@ + + + + + + + From faa7e939ba68914abc6efc49c8d08a476a3ec845 Mon Sep 17 00:00:00 2001 From: Daniel Ho Date: Thu, 5 Jun 2025 01:52:13 -0700 Subject: [PATCH 6/6] Fix bars being too long --- .../quantumbadger/redreader/views/IndentView.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/quantumbadger/redreader/views/IndentView.java b/src/main/java/org/quantumbadger/redreader/views/IndentView.java index d737e97bd..22040b158 100644 --- a/src/main/java/org/quantumbadger/redreader/views/IndentView.java +++ b/src/main/java/org/quantumbadger/redreader/views/IndentView.java @@ -100,20 +100,19 @@ protected void onDraw(final Canvas canvas) { final int height = getMeasuredHeight(); if(mPrefDrawLines) { - // Draw each line individually with its own color - for(int i = 0; i < mIndent; i++) { - final float x = (mPixelsPerIndent * (i + 1)) - mHalfALine; - // Set color based on indentation level, cycling through the color array - mPaint.setColor(mIndentColors[i % mIndentColors.length]); - // Draw each line individually - canvas.drawLine(x, 0, x, height, mPaint); + // Draw only the rightmost line with the appropriate color for this indentation level + if(mIndent > 0) { + final float rightLine = getWidth() - mHalfALine; + // Use color based on the current indentation level + mPaint.setColor(mIndentColors[(mIndent - 1) % mIndentColors.length]); + canvas.drawLine(rightLine, 0, rightLine, height, mPaint); } } else { // Use the original theme color when colorful bars are disabled mPaint.setColor(mOriginalIndentLineCol); final float rightLine = getWidth() - mHalfALine; - canvas.drawLine(rightLine, 0, rightLine, getHeight(), mPaint); + canvas.drawLine(rightLine, 0, rightLine, height, mPaint); } }