diff --git a/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java b/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java index 1262439fb..e521e4528 100644 --- a/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java +++ b/src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java @@ -144,6 +144,7 @@ public static boolean isRefreshRequired(final Context context, final String key) R.string.pref_accessibility_say_comment_indent_level_key)) || key.equals(context.getString( R.string.pref_behaviour_collapse_sticky_comments_key)) + || key.equals(R.string.pref_filter_posts_key) || key.equals(context.getString( R.string.pref_accessibility_concise_mode_key)) || key.equals(context.getString( @@ -1223,6 +1224,12 @@ public static boolean behaviour_block_screenshots() { false); } + public static String pref_filter_posts() { + return getString( + R.string.pref_filter_posts_key, + ""); + } + /////////////////////////////// // pref_cache /////////////////////////////// diff --git a/src/main/java/org/quantumbadger/redreader/fragments/PostListingFragment.java b/src/main/java/org/quantumbadger/redreader/fragments/PostListingFragment.java index 573aebabd..ef6af681d 100644 --- a/src/main/java/org/quantumbadger/redreader/fragments/PostListingFragment.java +++ b/src/main/java/org/quantumbadger/redreader/fragments/PostListingFragment.java @@ -100,6 +100,7 @@ import java.io.IOException; import java.text.NumberFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashSet; import java.util.Locale; import java.util.UUID; @@ -812,6 +813,11 @@ public void onDataStreamComplete( && mPostListingURL.asSubredditPostListURL().type == SubredditPostListURL.Type.SUBREDDIT); + final String keywordFilter = PrefsUtility.pref_filter_posts(); + + final String[] keywordFilterArray = keywordFilter.toLowerCase(Locale.US) + .split(","); + final ArrayList downloadedPosts = new ArrayList<>(25); @@ -838,6 +844,19 @@ public void onDataStreamComplete( && blockedSubreddits.contains( new SubredditCanonicalId(post.getSubreddit().getDecoded())); + if (!keywordFilter.isEmpty()) { + final String postTitle = post.getTitle().toString() + .toLowerCase(Locale.US); + final String[] titleWords = postTitle.split("\\W+"); + final boolean keywordMatched = Arrays.stream(keywordFilterArray) + .anyMatch(keyword -> Arrays.asList(titleWords) + .contains(keyword.trim())); + if (keywordMatched) { + continue; // Continue the outer loop + } + } + + if(!isPostBlocked && (!post.getOver_18() || isNsfwAllowed) && mPostIds.add(post.getIdAlone())) { diff --git a/src/main/java/org/quantumbadger/redreader/settings/SettingsFragment.java b/src/main/java/org/quantumbadger/redreader/settings/SettingsFragment.java index 2d2cd3f58..e060b1eba 100644 --- a/src/main/java/org/quantumbadger/redreader/settings/SettingsFragment.java +++ b/src/main/java/org/quantumbadger/redreader/settings/SettingsFragment.java @@ -186,7 +186,8 @@ public void onCreatePreferences( final int[] editTextPrefsToUpdate = { R.string.pref_behaviour_comment_min_key, - R.string.pref_reddit_client_id_override_key + R.string.pref_reddit_client_id_override_key, + R.string.pref_filter_posts_key }; for(final int pref : listPrefsToUpdate) { diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 4d1f752c7..a74663502 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1902,4 +1902,16 @@ Horizontal padding Compact title + + + Filtering + prefs_category_filtering + Posts + @string/pref_filter_posts_header + + pref_filter_posts + + Filtering By Keyword + Remove posts containing keywords (comma-separated list) + diff --git a/src/main/res/xml/prefs_behaviour.xml b/src/main/res/xml/prefs_behaviour.xml index ff44f146e..3db784bf7 100644 --- a/src/main/res/xml/prefs_behaviour.xml +++ b/src/main/res/xml/prefs_behaviour.xml @@ -180,9 +180,9 @@ android:entries="@array/pref_behaviour_postcount_items" android:entryValues="@array/pref_behaviour_postcount_items_return" android:defaultValue="ALL"/> - + + + + + + + + + + + diff --git a/src/main/res/xml/prefs_root.xml b/src/main/res/xml/prefs_root.xml index 69e89d180..b231d5520 100644 --- a/src/main/res/xml/prefs_root.xml +++ b/src/main/res/xml/prefs_root.xml @@ -31,6 +31,10 @@ android:key="@string/prefs_category_behaviour_key" android:title="@string/prefs_category_behaviour"/> + +