diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java index d9186634..73c998f5 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java @@ -46,7 +46,7 @@ import ml.docilealligator.infinityforreddit.user.UserData; @Database(entities = {Account.class, SubredditData.class, SubscribedSubredditData.class, UserData.class, SubscribedUserData.class, MultiReddit.class, CustomTheme.class, RecentSearchQuery.class, ReadPost.class, PostFilter.class, PostFilterUsage.class, AnonymousMultiredditSubreddit.class, - CommentFilter.class, CommentFilterUsage.class, CommentDraft.class}, version = 29, exportSchema = false) + CommentFilter.class, CommentFilterUsage.class, CommentDraft.class}, version = 30, exportSchema = false) @TypeConverters(Converters.class) public abstract class RedditDataRoomDatabase extends RoomDatabase { @@ -59,7 +59,8 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase { MIGRATION_13_14, MIGRATION_14_15, MIGRATION_15_16, MIGRATION_16_17, MIGRATION_17_18, MIGRATION_18_19, MIGRATION_19_20, MIGRATION_20_21, MIGRATION_21_22, MIGRATION_22_23, MIGRATION_23_24, MIGRATION_24_25, - MIGRATION_25_26, MIGRATION_26_27, MIGRATION_27_28, MIGRATION_28_29) + MIGRATION_25_26, MIGRATION_26_27, MIGRATION_27_28, MIGRATION_28_29, + MIGRATION_29_30) .build(); } @@ -456,4 +457,14 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase { "PRIMARY KEY (full_name, draft_type))"); } }; + + private static final Migration MIGRATION_29_30 = new Migration(29, 30) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE post_filter ADD COLUMN contain_users TEXT"); + database.execSQL("ALTER TABLE post_filter ADD COLUMN contain_subreddits TEXT"); + } + }; + } + diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizePostFilterActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizePostFilterActivity.java index 191669e4..532d674e 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizePostFilterActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizePostFilterActivity.java @@ -49,7 +49,9 @@ public class CustomizePostFilterActivity extends BaseActivity { public static final String EXTRA_POST_FILTER = "EPF"; public static final String EXTRA_FROM_SETTINGS = "EFS"; public static final String EXTRA_EXCLUDE_SUBREDDIT = "EES"; + public static final String EXTRA_CONTAIN_SUBREDDIT = "ECS"; public static final String EXTRA_EXCLUDE_USER = "EEU"; + public static final String EXTRA_CONTAIN_USER = "ECU"; public static final String EXTRA_EXCLUDE_FLAIR = "EEF"; public static final String EXTRA_CONTAIN_FLAIR = "ECF"; public static final String EXTRA_EXCLUDE_DOMAIN = "EED"; @@ -58,8 +60,10 @@ public class CustomizePostFilterActivity extends BaseActivity { public static final String RETURN_EXTRA_POST_FILTER = "REPF"; private static final String POST_FILTER_STATE = "PFS"; private static final String ORIGINAL_NAME_STATE = "ONS"; - private static final int ADD_SUBREDDITS_REQUEST_CODE = 1; - private static final int ADD_USERS_REQUEST_CODE = 3; + private static final int ADD_EXCLUDE_SUBREDDITS_REQUEST_CODE = 1; + private static final int ADD_CONTAIN_SUBREDDITS_REQUEST_CODE = 11; + private static final int ADD_EXCLUDE_USERS_REQUEST_CODE = 3; + private static final int ADD_CONTAIN_USERS_REQUEST_CODE = 33; @Inject RedditDataRoomDatabase mRedditDataRoomDatabase; @@ -167,16 +171,25 @@ public class CustomizePostFilterActivity extends BaseActivity { binding.onlySpoilerSwitchCustomizePostFilterActivity.performClick(); }); - binding.addSubredditsImageViewCustomizePostFilterActivity.setOnClickListener(view -> { + binding.excludeAddSubredditsImageViewCustomizePostFilterActivity.setOnClickListener(view -> { Intent intent = new Intent(this, SubredditMultiselectionActivity.class); - startActivityForResult(intent, ADD_SUBREDDITS_REQUEST_CODE); + startActivityForResult(intent, ADD_EXCLUDE_SUBREDDITS_REQUEST_CODE); }); - - binding.addUsersImageViewCustomizePostFilterActivity.setOnClickListener(view -> { + binding.containAddSubredditsImageViewCustomizePostFilterActivity.setOnClickListener(view -> { + Intent intent = new Intent(this, SubredditMultiselectionActivity.class); + startActivityForResult(intent, ADD_CONTAIN_SUBREDDITS_REQUEST_CODE); + }); + binding.excludeAddUsersImageViewCustomizePostFilterActivity.setOnClickListener(view -> { Intent intent = new Intent(this, SearchActivity.class); intent.putExtra(SearchActivity.EXTRA_SEARCH_ONLY_USERS, true); intent.putExtra(SearchActivity.EXTRA_IS_MULTI_SELECTION, true); - startActivityForResult(intent, ADD_USERS_REQUEST_CODE); + startActivityForResult(intent, ADD_EXCLUDE_USERS_REQUEST_CODE); + }); + binding.containAddUsersImageViewCustomizePostFilterActivity.setOnClickListener(view -> { + Intent intent = new Intent(this, SearchActivity.class); + intent.putExtra(SearchActivity.EXTRA_SEARCH_ONLY_USERS, true); + intent.putExtra(SearchActivity.EXTRA_IS_MULTI_SELECTION, true); + startActivityForResult(intent, ADD_CONTAIN_USERS_REQUEST_CODE); }); if (savedInstanceState != null) { @@ -213,7 +226,9 @@ public class CustomizePostFilterActivity extends BaseActivity { binding.titleExcludesRegexTextInputEditTextCustomizePostFilterActivity.setText(postFilter.postTitleExcludesRegex); binding.titleContainsRegexTextInputEditTextCustomizePostFilterActivity.setText(postFilter.postTitleContainsRegex); binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity.setText(postFilter.excludeSubreddits); + binding.containsSubredditsTextInputEditTextCustomizePostFilterActivity.setText(postFilter.containSubreddits); binding.excludesUsersTextInputEditTextCustomizePostFilterActivity.setText(postFilter.excludeUsers); + binding.containsUsersTextInputEditTextCustomizePostFilterActivity.setText(postFilter.containUsers); binding.excludesFlairsTextInputEditTextCustomizePostFilterActivity.setText(postFilter.excludeFlairs); binding.containsFlairsTextInputEditTextCustomizePostFilterActivity.setText(postFilter.containFlairs); binding.excludeDomainsTextInputEditTextCustomizePostFilterActivity.setText(postFilter.excludeDomains); @@ -230,6 +245,8 @@ public class CustomizePostFilterActivity extends BaseActivity { String containFlair = intent.getStringExtra(EXTRA_CONTAIN_FLAIR); String excludeDomain = intent.getStringExtra(EXTRA_EXCLUDE_DOMAIN); String containDomain = intent.getStringExtra(EXTRA_CONTAIN_DOMAIN); + String containSubreddit = intent.getStringExtra(EXTRA_CONTAIN_SUBREDDIT); + String containUser = intent.getStringExtra(EXTRA_CONTAIN_USER); if (excludeSubreddit != null && !excludeSubreddit.equals("")) { if (!binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity.getText().toString().equals("")) { @@ -237,6 +254,18 @@ public class CustomizePostFilterActivity extends BaseActivity { } binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity.append(excludeSubreddit); } + if (containSubreddit != null && !containSubreddit.equals("")) { + if (!binding.containsSubredditsTextInputEditTextCustomizePostFilterActivity.getText().toString().equals("")) { + binding.containsSubredditsTextInputEditTextCustomizePostFilterActivity.append(","); + } + binding.containsSubredditsTextInputEditTextCustomizePostFilterActivity.append(containSubreddit); + } + if (containUser != null && !containUser.equals("")) { + if (!binding.containsUsersTextInputEditTextCustomizePostFilterActivity.getText().toString().equals("")) { + binding.containsUsersTextInputEditTextCustomizePostFilterActivity.append(","); + } + binding.containsUsersTextInputEditTextCustomizePostFilterActivity.append(containUser); + } if (excludeUser != null && !excludeUser.equals("")) { if (!binding.excludesUsersTextInputEditTextCustomizePostFilterActivity.getText().toString().equals("")) { binding.excludesUsersTextInputEditTextCustomizePostFilterActivity.append(","); @@ -343,18 +372,31 @@ public class CustomizePostFilterActivity extends BaseActivity { binding.titleContainsRegexTextInputLayoutCustomizePostFilterActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor)); binding.titleContainsRegexTextInputEditTextCustomizePostFilterActivity.setTextColor(primaryTextColor); - binding.subredditsUsersCardViewCustomizePostFilterActivity.setCardBackgroundColor(filledCardViewBackgroundColor); + binding.subredditsCardViewCustomizePostFilterActivity.setCardBackgroundColor(filledCardViewBackgroundColor); binding.excludeSubredditsExplanationTextViewCustomizePostFilterActivity.setTextColor(primaryTextColor); binding.excludesSubredditsTextInputLayoutCustomizePostFilterActivity.setBoxStrokeColor(primaryTextColor); binding.excludesSubredditsTextInputLayoutCustomizePostFilterActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor)); binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity.setTextColor(primaryTextColor); - binding.addSubredditsImageViewCustomizePostFilterActivity.setImageDrawable(Utils.getTintedDrawable(this, R.drawable.ic_add_24dp, primaryIconColor)); + binding.excludeAddSubredditsImageViewCustomizePostFilterActivity.setImageDrawable(Utils.getTintedDrawable(this, R.drawable.ic_add_24dp, primaryIconColor)); + binding.containSubredditsExplanationTextViewCustomizePostFilterActivity.setTextColor(primaryTextColor); + binding.containsSubredditsTextInputLayoutCustomizePostFilterActivity.setBoxStrokeColor(primaryTextColor); + binding.containsSubredditsTextInputLayoutCustomizePostFilterActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor)); + binding.containsSubredditsTextInputEditTextCustomizePostFilterActivity.setTextColor(primaryTextColor); + binding.containAddSubredditsImageViewCustomizePostFilterActivity.setImageDrawable(Utils.getTintedDrawable(this, R.drawable.ic_add_24dp, primaryIconColor)); + + binding.usersCardViewCustomizePostFilterActivity.setCardBackgroundColor(filledCardViewBackgroundColor); binding.excludeUsersExplanationTextViewCustomizePostFilterActivity.setTextColor(primaryTextColor); binding.excludesUsersTextInputLayoutCustomizePostFilterActivity.setBoxStrokeColor(primaryTextColor); binding.excludesUsersTextInputLayoutCustomizePostFilterActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor)); binding.excludesUsersTextInputEditTextCustomizePostFilterActivity.setTextColor(primaryTextColor); - binding.addUsersImageViewCustomizePostFilterActivity.setImageDrawable(Utils.getTintedDrawable(this, R.drawable.ic_add_24dp, primaryIconColor)); + binding.excludeAddUsersImageViewCustomizePostFilterActivity.setImageDrawable(Utils.getTintedDrawable(this, R.drawable.ic_add_24dp, primaryIconColor)); + + binding.containUsersExplanationTextViewCustomizePostFilterActivity.setTextColor(primaryTextColor); + binding.containsUsersTextInputLayoutCustomizePostFilterActivity.setBoxStrokeColor(primaryTextColor); + binding.containsUsersTextInputLayoutCustomizePostFilterActivity.setDefaultHintTextColor(ColorStateList.valueOf(primaryTextColor)); + binding.containsUsersTextInputEditTextCustomizePostFilterActivity.setTextColor(primaryTextColor); + binding.containAddUsersImageViewCustomizePostFilterActivity.setImageDrawable(Utils.getTintedDrawable(this, R.drawable.ic_add_24dp, primaryIconColor)); binding.flairsCardViewCustomizePostFilterActivity.setCardBackgroundColor(filledCardViewBackgroundColor); binding.excludeFlairsExplanationTextViewCustomizePostFilterActivity.setTextColor(primaryTextColor); @@ -407,7 +449,9 @@ public class CustomizePostFilterActivity extends BaseActivity { binding.titleExcludesRegexTextInputLayoutCustomizePostFilterActivity.setCursorColor(ColorStateList.valueOf(primaryTextColor)); binding.titleContainsRegexTextInputLayoutCustomizePostFilterActivity.setCursorColor(ColorStateList.valueOf(primaryTextColor)); binding.excludesSubredditsTextInputLayoutCustomizePostFilterActivity.setCursorColor(ColorStateList.valueOf(primaryTextColor)); + binding.containsSubredditsTextInputLayoutCustomizePostFilterActivity.setCursorColor(ColorStateList.valueOf(primaryTextColor)); binding.excludesUsersTextInputLayoutCustomizePostFilterActivity.setCursorColor(ColorStateList.valueOf(primaryTextColor)); + binding.containsUsersTextInputLayoutCustomizePostFilterActivity.setCursorColor(ColorStateList.valueOf(primaryTextColor)); binding.excludesFlairsTextInputLayoutCustomizePostFilterActivity.setCursorColor(ColorStateList.valueOf(primaryTextColor)); binding.containsFlairsTextInputLayoutCustomizePostFilterActivity.setCursorColor(ColorStateList.valueOf(primaryTextColor)); binding.excludeDomainsTextInputLayoutCustomizePostFilterActivity.setCursorColor(ColorStateList.valueOf(primaryTextColor)); @@ -423,8 +467,10 @@ public class CustomizePostFilterActivity extends BaseActivity { setCursorDrawableColor(binding.titleExcludesRegexTextInputEditTextCustomizePostFilterActivity, primaryTextColor); setCursorDrawableColor(binding.titleContainsRegexTextInputEditTextCustomizePostFilterActivity, primaryTextColor); setCursorDrawableColor(binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity, primaryTextColor); + setCursorDrawableColor(binding.containsSubredditsTextInputEditTextCustomizePostFilterActivity, primaryTextColor); setCursorDrawableColor(binding.excludesUsersTextInputEditTextCustomizePostFilterActivity, primaryTextColor); setCursorDrawableColor(binding.excludesFlairsTextInputEditTextCustomizePostFilterActivity, primaryTextColor); + setCursorDrawableColor(binding.containsUsersTextInputEditTextCustomizePostFilterActivity, primaryTextColor); setCursorDrawableColor(binding.containsFlairsTextInputEditTextCustomizePostFilterActivity, primaryTextColor); setCursorDrawableColor(binding.excludeDomainsTextInputEditTextCustomizePostFilterActivity, primaryTextColor); setCursorDrawableColor(binding.containDomainsTextInputEditTextCustomizePostFilterActivity, primaryTextColor); @@ -543,44 +589,42 @@ public class CustomizePostFilterActivity extends BaseActivity { protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && data != null) { - if (requestCode == ADD_SUBREDDITS_REQUEST_CODE) { - ArrayList subredditNames = data.getStringArrayListExtra(SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS); - updateExcludeSubredditNames(subredditNames); - } else if (requestCode == ADD_USERS_REQUEST_CODE) { + if (requestCode == ADD_EXCLUDE_SUBREDDITS_REQUEST_CODE) { + ArrayList subredditNames = data.getStringArrayListExtra( + SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS); + updateSubredditsUsersNames(subredditNames, binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity); + } else if (requestCode == ADD_CONTAIN_SUBREDDITS_REQUEST_CODE) { + ArrayList subredditNames = data.getStringArrayListExtra( + SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS); + updateSubredditsUsersNames(subredditNames, binding.containsSubredditsTextInputEditTextCustomizePostFilterActivity); + } else if (requestCode == ADD_EXCLUDE_USERS_REQUEST_CODE) { ArrayList usernames = data.getStringArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_USERNAMES); - String currentUsers = binding.excludesUsersTextInputEditTextCustomizePostFilterActivity.getText().toString().trim(); - if (usernames != null && !usernames.isEmpty()) { - if (!currentUsers.isEmpty() && currentUsers.charAt(currentUsers.length() - 1) != ',') { - String newString = currentUsers + ","; - binding.excludesUsersTextInputEditTextCustomizePostFilterActivity.setText(newString); - } - StringBuilder stringBuilder = new StringBuilder(); - for (String s : usernames) { - stringBuilder.append(s).append(","); - } - stringBuilder.deleteCharAt(stringBuilder.length() - 1); - binding.excludesUsersTextInputEditTextCustomizePostFilterActivity.append(stringBuilder.toString()); - } + updateSubredditsUsersNames(usernames, binding.excludesUsersTextInputEditTextCustomizePostFilterActivity); + } else if (requestCode == ADD_CONTAIN_USERS_REQUEST_CODE) { + ArrayList usernames = data.getStringArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_USERNAMES); + updateSubredditsUsersNames(usernames, binding.containsUsersTextInputEditTextCustomizePostFilterActivity); } } } - private void updateExcludeSubredditNames(ArrayList subredditNames) { - String currentSubreddits = binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity.getText().toString().trim(); - if (subredditNames != null && !subredditNames.isEmpty()) { - if (!currentSubreddits.isEmpty() && currentSubreddits.charAt(currentSubreddits.length() - 1) != ',') { - String newString = currentSubreddits + ","; - binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity.setText(newString); - } - StringBuilder stringBuilder = new StringBuilder(); - for (String s : subredditNames) { - stringBuilder.append(s).append(","); - } - stringBuilder.deleteCharAt(stringBuilder.length() - 1); - binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity.append(stringBuilder.toString()); + private void updateSubredditsUsersNames(@Nullable ArrayList subredditNames, + com.google.android.material.textfield.TextInputEditText targetEditText) { + if (subredditNames == null || subredditNames.isEmpty() || targetEditText == null) return; + + String current = targetEditText.getText().toString().trim(); + if (!current.isEmpty() && current.charAt(current.length() - 1) != ',') { + targetEditText.setText(current + ","); } + + StringBuilder sb = new StringBuilder(); + for (String s : subredditNames) { + sb.append(s).append(","); + } + if (sb.length() > 0) sb.deleteCharAt(sb.length() - 1); + targetEditText.append(sb.toString()); } + private void constructPostFilter() throws PatternSyntaxException { postFilter.name = binding.nameTextInputEditTextCustomizePostFilterActivity.getText().toString(); postFilter.maxVote = binding.maxVoteTextInputEditTextCustomizePostFilterActivity.getText() == null || binding.maxVoteTextInputEditTextCustomizePostFilterActivity.getText().toString().equals("") ? -1 : Integer.parseInt(binding.maxVoteTextInputEditTextCustomizePostFilterActivity.getText().toString()); @@ -596,7 +640,9 @@ public class CustomizePostFilterActivity extends BaseActivity { postFilter.postTitleExcludesStrings = binding.titleExcludesStringsTextInputEditTextCustomizePostFilterActivity.getText().toString(); postFilter.postTitleContainsStrings = binding.titleContainsStringsTextInputEditTextCustomizePostFilterActivity.getText().toString(); postFilter.excludeSubreddits = binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity.getText().toString(); + postFilter.containSubreddits = binding.containsSubredditsTextInputEditTextCustomizePostFilterActivity.getText().toString(); postFilter.excludeUsers = binding.excludesUsersTextInputEditTextCustomizePostFilterActivity.getText().toString(); + postFilter.containUsers = binding.containsUsersTextInputEditTextCustomizePostFilterActivity.getText().toString(); postFilter.excludeFlairs = binding.excludesFlairsTextInputEditTextCustomizePostFilterActivity.getText().toString(); postFilter.containFlairs = binding.containsFlairsTextInputEditTextCustomizePostFilterActivity.getText().toString(); postFilter.excludeDomains = binding.excludeDomainsTextInputEditTextCustomizePostFilterActivity.getText().toString(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostFilterPreferenceActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostFilterPreferenceActivity.java index b4ba4e55..b1f31006 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostFilterPreferenceActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostFilterPreferenceActivity.java @@ -162,7 +162,7 @@ public class PostFilterPreferenceActivity extends BaseActivity { public void showPostFilterOptions(Post post, @Nullable PostFilter postFilter) { String[] options = getResources().getStringArray(R.array.add_to_post_filter_options); - boolean[] selectedOptions = new boolean[]{false, false, false, false, false, false}; + boolean[] selectedOptions = new boolean[]{false, false, false, false, false, false, false, false}; new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme) .setTitle(R.string.select) .setMultiChoiceItems(options, selectedOptions, (dialogInterface, i, b) -> selectedOptions[i] = b) @@ -193,6 +193,12 @@ public class PostFilterPreferenceActivity extends BaseActivity { case 5: intent.putExtra(CustomizePostFilterActivity.EXTRA_CONTAIN_DOMAIN, post.getUrl()); break; + case 6: + intent.putExtra(CustomizePostFilterActivity.EXTRA_CONTAIN_SUBREDDIT, post.getSubredditName()); + break; + case 7: + intent.putExtra(CustomizePostFilterActivity.EXTRA_CONTAIN_USER, post.getAuthor()); + break; } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/postfilter/PostFilter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/postfilter/PostFilter.java index 13b8a679..26e1406d 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/postfilter/PostFilter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/postfilter/PostFilter.java @@ -50,8 +50,12 @@ public class PostFilter implements Parcelable { public String postTitleContainsStrings; @ColumnInfo(name = "exclude_subreddits") public String excludeSubreddits; + @ColumnInfo(name = "contain_subreddits") + public String containSubreddits; @ColumnInfo(name = "exclude_users") public String excludeUsers; + @ColumnInfo(name = "contain_users") + public String containUsers; @ColumnInfo(name = "contain_flairs") public String containFlairs; @ColumnInfo(name = "exclude_flairs") @@ -93,7 +97,9 @@ public class PostFilter implements Parcelable { postTitleExcludesStrings = in.readString(); postTitleContainsStrings = in.readString(); excludeSubreddits = in.readString(); + containSubreddits = in.readString(); excludeUsers = in.readString(); + containUsers = in.readString(); containFlairs = in.readString(); excludeFlairs = in.readString(); excludeDomains = in.readString(); @@ -216,6 +222,20 @@ public class PostFilter implements Parcelable { } } } + if (postFilter.containSubreddits != null && !postFilter.containSubreddits.equals("")) { + String[] subreddits = postFilter.containSubreddits.split(",", 0); + boolean hasRequiredSubreddit = false; + String subreddit = post.getSubredditName(); + for (String s : subreddits) { + if (!s.trim().equals("") && subreddit.equalsIgnoreCase(s.trim())) { + hasRequiredSubreddit = true; + break; + } + } + if (!hasRequiredSubreddit) { + return false; + } + } if (postFilter.excludeUsers != null && !postFilter.excludeUsers.equals("")) { String[] users = postFilter.excludeUsers.split(",", 0); for (String u : users) { @@ -224,6 +244,20 @@ public class PostFilter implements Parcelable { } } } + if (postFilter.containUsers != null && !postFilter.containUsers.equals("")) { + String[] users = postFilter.containUsers.split(",", 0); + boolean hasRequiredUser = false; + String user = post.getAuthor(); + for (String s : users) { + if (!s.trim().equals("") && user.equalsIgnoreCase(s.trim())) { + hasRequiredUser = true; + break; + } + } + if (!hasRequiredUser) { + return false; + } + } if (postFilter.excludeFlairs != null && !postFilter.excludeFlairs.equals("")) { String[] flairs = postFilter.excludeFlairs.split(",", 0); for (String f : flairs) { @@ -321,12 +355,24 @@ public class PostFilter implements Parcelable { postFilter.excludeSubreddits = stringBuilder.toString(); } + if (p.containSubreddits != null && !p.containSubreddits.equals("")) { + stringBuilder = new StringBuilder(postFilter.containSubreddits == null ? "" : postFilter.containSubreddits); + stringBuilder.append(",").append(p.containSubreddits); + postFilter.containSubreddits = stringBuilder.toString(); + } + if (p.excludeUsers != null && !p.excludeUsers.equals("")) { stringBuilder = new StringBuilder(postFilter.excludeUsers == null ? "" : postFilter.excludeUsers); stringBuilder.append(",").append(p.excludeUsers); postFilter.excludeUsers = stringBuilder.toString(); } + if (p.containUsers != null && !p.containUsers.equals("")) { + stringBuilder = new StringBuilder(postFilter.containUsers == null ? "" : postFilter.containUsers); + stringBuilder.append(",").append(p.containUsers); + postFilter.containUsers = stringBuilder.toString(); + } + if (p.containFlairs != null && !p.containFlairs.equals("")) { stringBuilder = new StringBuilder(postFilter.containFlairs == null ? "" : postFilter.containFlairs); stringBuilder.append(",").append(p.containFlairs); @@ -384,7 +430,9 @@ public class PostFilter implements Parcelable { parcel.writeString(postTitleExcludesStrings); parcel.writeString(postTitleContainsStrings); parcel.writeString(excludeSubreddits); + parcel.writeString(containSubreddits); parcel.writeString(excludeUsers); + parcel.writeString(containUsers); parcel.writeString(containFlairs); parcel.writeString(excludeFlairs); parcel.writeString(excludeDomains); diff --git a/app/src/main/res/layout-land/activity_customize_post_filter.xml b/app/src/main/res/layout-land/activity_customize_post_filter.xml index 86abb747..d2e310fb 100644 --- a/app/src/main/res/layout-land/activity_customize_post_filter.xml +++ b/app/src/main/res/layout-land/activity_customize_post_filter.xml @@ -602,7 +602,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:contentDescription="@string/content_description_post_filter_add_user" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index e9aa454b..c6e78153 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -576,6 +576,8 @@ @string/contain_flair @string/exclude_domain @string/contain_domain + @string/contain_subreddit + @string/contain_user diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 672b26ab..735a2553 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1146,7 +1146,9 @@ Title: excludes regex Title: contains regex Exclude subreddits (e.g. funny,AskReddit) + Contain subreddits (e.g. funny,AskReddit) Exclude users (e.g. Hostilenemy,random) + Contain users (e.g. Hostilenemy,random) Exclude flairs (e.g. flair1,flair2) Contain flairs (e.g. flair1,flair2) Exclude domains @@ -1186,7 +1188,9 @@ Posts will be filtered out if their title matches the following regular expression. Posts will be filtered out if their title does not match the following regular expression. Posts from the following subreddits will be filtered out. + Posts will be filtered out if they are not from the following subreddits. Posts submitted by the following users will be filtered out. + Posts will be filtered out if they are not from the following users. Posts that have the following flairs will be filtered out. Posts that do not have the following flairs will be filtered out. Link posts that have the following urls will be filtered out. @@ -1253,7 +1257,9 @@ Select Exclude this subreddit + Contain this subreddit Exclude this user + Contain this user Exclude this flair Contain this flair Exclude this domain