Compare commits

...

3 Commits

Author SHA1 Message Date
Docile-Alligator
22db534c1d Don't hide read posts automatically in subreddit, user and search posts. 2025-09-23 17:31:11 -04:00
Docile-Alligator
f896c974a0 Fix issues in downloading redgifs and streamable videos. 2025-09-23 16:29:45 -04:00
Turhvjbufv
c58c9ea406
Add contain subreddits/users in postFilter (#1834)
Co-authored-by: Oriya-osmine <189751975+Oriya-osmine@users.noreply.github.com>
2025-09-24 01:51:31 +07:00
11 changed files with 565 additions and 85 deletions

View File

@ -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");
}
};
}

View File

@ -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<String> 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<String> subredditNames = data.getStringArrayListExtra(
SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
updateSubredditsUsersNames(subredditNames, binding.excludesSubredditsTextInputEditTextCustomizePostFilterActivity);
} else if (requestCode == ADD_CONTAIN_SUBREDDITS_REQUEST_CODE) {
ArrayList<String> subredditNames = data.getStringArrayListExtra(
SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
updateSubredditsUsersNames(subredditNames, binding.containsSubredditsTextInputEditTextCustomizePostFilterActivity);
} else if (requestCode == ADD_EXCLUDE_USERS_REQUEST_CODE) {
ArrayList<String> 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<String> usernames = data.getStringArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_USERNAMES);
updateSubredditsUsersNames(usernames, binding.containsUsersTextInputEditTextCustomizePostFilterActivity);
}
}
}
private void updateExcludeSubredditNames(ArrayList<String> 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<String> 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();

View File

@ -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;
}
}
}

View File

@ -51,7 +51,7 @@ public class PostViewModel extends ViewModel {
private PostFilter postFilter;
private String userWhere;
private ReadPostsListInterface readPostsList;
private final MutableLiveData<Boolean> currentlyReadPostIdsLiveData = new MutableLiveData<>();
private final MutableLiveData<Boolean> hideReadPostsValue = new MutableLiveData<>();
private final LiveData<PagingData<Post>> posts;
private final LiveData<PagingData<Post>> postsWithReadPostsHidden;
@ -91,14 +91,14 @@ public class PostViewModel extends ViewModel {
return PagingLiveData.cachedIn(PagingLiveData.getLiveData(pager), ViewModelKt.getViewModelScope(this));
});
postsWithReadPostsHidden = PagingLiveData.cachedIn(Transformations.switchMap(currentlyReadPostIdsLiveData,
postsWithReadPostsHidden = PagingLiveData.cachedIn(Transformations.switchMap(hideReadPostsValue,
currentlyReadPostIds -> Transformations.map(
posts,
postPagingData -> PagingDataTransforms.filter(
postPagingData, executor,
post -> !post.isRead() || !currentlyReadPostIdsLiveData.getValue()))), ViewModelKt.getViewModelScope(this));
post -> !post.isRead() || !hideReadPostsValue.getValue()))), ViewModelKt.getViewModelScope(this));
currentlyReadPostIdsLiveData.setValue(postHistorySharedPreferences != null
hideReadPostsValue.setValue(postHistorySharedPreferences != null
&& postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
}
@ -132,15 +132,16 @@ public class PostViewModel extends ViewModel {
return PagingLiveData.cachedIn(PagingLiveData.getLiveData(pager), ViewModelKt.getViewModelScope(this));
});
postsWithReadPostsHidden = PagingLiveData.cachedIn(Transformations.switchMap(currentlyReadPostIdsLiveData,
postsWithReadPostsHidden = PagingLiveData.cachedIn(Transformations.switchMap(hideReadPostsValue,
currentlyReadPostIds -> Transformations.map(
posts,
postPagingData -> PagingDataTransforms.filter(
postPagingData, executor,
post -> !post.isRead() || !currentlyReadPostIdsLiveData.getValue()))), ViewModelKt.getViewModelScope(this));
post -> !post.isRead() || !hideReadPostsValue.getValue()))), ViewModelKt.getViewModelScope(this));
currentlyReadPostIdsLiveData.setValue(postHistorySharedPreferences != null
&& postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
hideReadPostsValue.setValue(postHistorySharedPreferences != null
&& postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false)
&& (postType != PostPagingSource.TYPE_SUBREDDIT || subredditName.equals("all") || subredditName.equals("popular")));
}
// PostPagingSource.TYPE_MULTI_REDDIT
@ -174,17 +175,18 @@ public class PostViewModel extends ViewModel {
return PagingLiveData.cachedIn(PagingLiveData.getLiveData(pager), ViewModelKt.getViewModelScope(this));
});
postsWithReadPostsHidden = PagingLiveData.cachedIn(Transformations.switchMap(currentlyReadPostIdsLiveData,
postsWithReadPostsHidden = PagingLiveData.cachedIn(Transformations.switchMap(hideReadPostsValue,
currentlyReadPostIds -> Transformations.map(
posts,
postPagingData -> PagingDataTransforms.filter(
postPagingData, executor,
post -> !post.isRead() || !currentlyReadPostIdsLiveData.getValue()))), ViewModelKt.getViewModelScope(this));
post -> !post.isRead() || !hideReadPostsValue.getValue()))), ViewModelKt.getViewModelScope(this));
currentlyReadPostIdsLiveData.setValue(postHistorySharedPreferences != null
hideReadPostsValue.setValue(postHistorySharedPreferences != null
&& postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
}
// PostPagingSource.TYPE_USER
public PostViewModel(Executor executor, Retrofit retrofit, @Nullable String accessToken, @NonNull String accountName,
SharedPreferences sharedPreferences,
SharedPreferences postFeedScrolledPositionSharedPreferences,
@ -217,15 +219,16 @@ public class PostViewModel extends ViewModel {
return PagingLiveData.cachedIn(PagingLiveData.getLiveData(pager), ViewModelKt.getViewModelScope(this));
});
postsWithReadPostsHidden = PagingLiveData.cachedIn(Transformations.switchMap(currentlyReadPostIdsLiveData,
postsWithReadPostsHidden = PagingLiveData.cachedIn(Transformations.switchMap(hideReadPostsValue,
currentlyReadPostIds -> Transformations.map(
posts,
postPagingData -> PagingDataTransforms.filter(
postPagingData, executor,
post -> !post.isRead() || !currentlyReadPostIdsLiveData.getValue()))), ViewModelKt.getViewModelScope(this));
post -> !post.isRead() || !hideReadPostsValue.getValue()))), ViewModelKt.getViewModelScope(this));
currentlyReadPostIdsLiveData.setValue(postHistorySharedPreferences != null
&& postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
hideReadPostsValue.setValue(false);
/*hideReadPostsValue.setValue(postHistorySharedPreferences != null
&& postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));*/
}
// postType == PostPagingSource.TYPE_SEARCH
@ -261,15 +264,16 @@ public class PostViewModel extends ViewModel {
return PagingLiveData.cachedIn(PagingLiveData.getLiveData(pager), ViewModelKt.getViewModelScope(this));
});
postsWithReadPostsHidden = PagingLiveData.cachedIn(Transformations.switchMap(currentlyReadPostIdsLiveData,
postsWithReadPostsHidden = PagingLiveData.cachedIn(Transformations.switchMap(hideReadPostsValue,
currentlyReadPostIds -> Transformations.map(
posts,
postPagingData -> PagingDataTransforms.filter(
postPagingData, executor,
post -> !post.isRead() || !currentlyReadPostIdsLiveData.getValue()))), ViewModelKt.getViewModelScope(this));
post -> !post.isRead() || !hideReadPostsValue.getValue()))), ViewModelKt.getViewModelScope(this));
currentlyReadPostIdsLiveData.setValue(postHistorySharedPreferences != null
&& postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));
hideReadPostsValue.setValue(false);
/*hideReadPostsValue.setValue(postHistorySharedPreferences != null
&& postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.HIDE_READ_POSTS_AUTOMATICALLY_BASE, false));*/
}
public LiveData<PagingData<Post>> getPosts() {
@ -277,7 +281,7 @@ public class PostViewModel extends ViewModel {
}
public void hideReadPosts() {
currentlyReadPostIdsLiveData.setValue(true);
hideReadPostsValue.setValue(true);
}
public PostPagingSource returnPagingSoruce() {

View File

@ -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);

View File

@ -139,16 +139,13 @@ public class DownloadMediaService extends JobService {
if (post.isLoadedStreamableVideoAlready()) {
extras.putString(EXTRA_URL, post.getVideoUrl());
} else {
extras.putString(EXTRA_REDGIFS_ID, post.getRedgifsId());
extras.putString(EXTRA_STREAMABLE_SHORT_CODE, post.getStreamableShortCode());
}
extras.putString(EXTRA_FILE_NAME, "Streamable-" + post.getStreamableShortCode() + ".mp4");
} else if (post.isRedgifs()) {
if (post.isLoadedStreamableVideoAlready()) {
extras.putString(EXTRA_URL, post.getVideoUrl());
} else {
extras.putString(EXTRA_STREAMABLE_SHORT_CODE, post.getStreamableShortCode());
}
extras.putString(EXTRA_URL, post.getVideoUrl());
extras.putString(EXTRA_REDGIFS_ID, post.getRedgifsId());
String redgifsId = post.getRedgifsId();
if (redgifsId != null && redgifsId.contains("-")) {

View File

@ -602,7 +602,7 @@
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/subreddits_users_card_view_customize_post_filter_activity"
android:id="@+id/subreddits_card_view_customize_post_filter_activity"
style="?attr/materialCardViewFilledStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -646,7 +646,6 @@
android:id="@+id/excludes_subreddits_text_input_edit_text_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:fontFamily="?attr/font_family"
android:textSize="?attr/font_default"
android:hint="@string/exclude_subreddits_hint"
@ -655,7 +654,7 @@
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/add_subreddits_image_view_customize_post_filter_activity"
android:id="@+id/exclude_add_subreddits_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@ -668,13 +667,83 @@
</LinearLayout>
<TextView
android:id="@+id/exclude_users_explanation_text_view_customize_post_filter_activity"
android:id="@+id/contain_subreddits_explanation_text_view_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/post_filter_contain_subreddits_explanation"
android:textSize="?attr/font_default"
android:textColor="?attr/primaryTextColor"
android:fontFamily="?attr/font_family" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/contains_subreddits_text_input_layout_customize_post_filter_activity"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="8dp"
android:paddingBottom="16dp"
android:layout_marginStart="16dp"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/contains_subreddits_text_input_edit_text_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="?attr/font_family"
android:textSize="?attr/font_default"
android:hint="@string/contain_subreddits_hint"
android:maxLines="10" />
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/contain_add_subreddits_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="16dp"
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
android:contentDescription="@string/content_description_post_filter_add_subreddit" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/users_card_view_customize_post_filter_activity"
style="?attr/materialCardViewFilledStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
app:cardCornerRadius="12dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/exclude_users_explanation_text_view_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/post_filter_exclude_users_explanation"
android:textSize="?attr/font_default"
android:textColor="?attr/primaryTextColor"
@ -706,7 +775,58 @@
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/add_users_image_view_customize_post_filter_activity"
android:id="@+id/exclude_add_users_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="16dp"
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
android:contentDescription="@string/content_description_post_filter_add_user" />
</LinearLayout>
<TextView
android:id="@+id/contain_users_explanation_text_view_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/post_filter_contain_users_explanation"
android:textSize="?attr/font_default"
android:textColor="?attr/primaryTextColor"
android:fontFamily="?attr/font_family" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/contains_users_text_input_layout_customize_post_filter_activity"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="8dp"
android:paddingBottom="16dp"
android:layout_marginStart="16dp"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/contains_users_text_input_edit_text_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="?attr/font_family"
android:textSize="?attr/font_default"
android:hint="@string/contain_users_hint"
android:maxLines="10" />
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/contain_add_users_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"

View File

@ -602,7 +602,7 @@
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/subreddits_users_card_view_customize_post_filter_activity"
android:id="@+id/subreddits_card_view_customize_post_filter_activity"
style="?attr/materialCardViewFilledStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -646,7 +646,6 @@
android:id="@+id/excludes_subreddits_text_input_edit_text_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:fontFamily="?attr/font_family"
android:textSize="?attr/font_default"
android:hint="@string/exclude_subreddits_hint"
@ -655,7 +654,7 @@
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/add_subreddits_image_view_customize_post_filter_activity"
android:id="@+id/exclude_add_subreddits_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@ -668,13 +667,81 @@
</LinearLayout>
<TextView
android:id="@+id/exclude_users_explanation_text_view_customize_post_filter_activity"
android:id="@+id/contain_subreddits_explanation_text_view_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/post_filter_contain_subreddits_explanation"
android:textSize="?attr/font_default"
android:textColor="?attr/primaryTextColor"
android:fontFamily="?attr/font_family" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/contains_subreddits_text_input_layout_customize_post_filter_activity"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="8dp"
android:paddingBottom="16dp"
android:layout_marginStart="16dp"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/contains_subreddits_text_input_edit_text_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="?attr/font_family"
android:textSize="?attr/font_default"
android:hint="@string/contain_subreddits_hint"
android:maxLines="10" />
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/contain_add_subreddits_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="16dp"
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
android:contentDescription="@string/content_description_post_filter_add_subreddit" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/users_card_view_customize_post_filter_activity"
style="?attr/materialCardViewFilledStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:cardCornerRadius="12dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/exclude_users_explanation_text_view_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/post_filter_exclude_users_explanation"
android:textSize="?attr/font_default"
android:textColor="?attr/primaryTextColor"
@ -706,7 +773,58 @@
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/add_users_image_view_customize_post_filter_activity"
android:id="@+id/exclude_add_users_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="16dp"
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
android:contentDescription="@string/content_description_post_filter_add_user" />
</LinearLayout>
<TextView
android:id="@+id/contain_users_explanation_text_view_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/post_filter_contain_users_explanation"
android:textSize="?attr/font_default"
android:textColor="?attr/primaryTextColor"
android:fontFamily="?attr/font_family" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/contains_users_text_input_layout_customize_post_filter_activity"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="8dp"
android:paddingBottom="16dp"
android:layout_marginStart="16dp"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/contains_users_text_input_edit_text_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="?attr/font_family"
android:textSize="?attr/font_default"
android:hint="@string/contain_users_hint"
android:maxLines="10" />
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/contain_add_users_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"

View File

@ -590,7 +590,7 @@
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/subreddits_users_card_view_customize_post_filter_activity"
android:id="@+id/subreddits_card_view_customize_post_filter_activity"
style="?attr/materialCardViewFilledStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -645,7 +645,7 @@
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/add_subreddits_image_view_customize_post_filter_activity"
android:id="@+id/exclude_add_subreddits_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@ -653,15 +653,85 @@
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
android:contentDescription="@string/content_description_post_filter_add_subreddit" />
android:contentDescription="@string/content_description_post_filter_add_user" />
</LinearLayout>
<TextView
android:id="@+id/contain_subreddits_explanation_text_view_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/post_filter_contain_subreddits_explanation"
android:textSize="?attr/font_default"
android:textColor="?attr/primaryTextColor"
android:fontFamily="?attr/font_family" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/contains_subreddits_text_input_layout_customize_post_filter_activity"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="8dp"
android:paddingBottom="16dp"
android:layout_marginStart="16dp"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/contains_subreddits_text_input_edit_text_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="?attr/font_family"
android:textSize="?attr/font_default"
android:hint="@string/contain_subreddits_hint"
android:maxLines="10" />
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/contain_add_subreddits_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="16dp"
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
android:contentDescription="@string/content_description_post_filter_add_user" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/users_card_view_customize_post_filter_activity"
style="?attr/materialCardViewFilledStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
app:cardCornerRadius="12dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/exclude_users_explanation_text_view_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingTop="16dp"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
@ -688,6 +758,7 @@
android:id="@+id/excludes_users_text_input_edit_text_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:fontFamily="?attr/font_family"
android:textSize="?attr/font_default"
android:hint="@string/exclude_users_hint"
@ -696,7 +767,58 @@
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/add_users_image_view_customize_post_filter_activity"
android:id="@+id/exclude_add_users_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="16dp"
android:background="?actionBarItemBackground"
android:clickable="true"
android:focusable="true"
android:contentDescription="@string/content_description_post_filter_add_user" />
</LinearLayout>
<TextView
android:id="@+id/contain_users_explanation_text_view_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/post_filter_contain_users_explanation"
android:textSize="?attr/font_default"
android:textColor="?attr/primaryTextColor"
android:fontFamily="?attr/font_family" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/contains_users_text_input_layout_customize_post_filter_activity"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingTop="8dp"
android:paddingBottom="16dp"
android:layout_marginStart="16dp"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/contains_users_text_input_edit_text_customize_post_filter_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="?attr/font_family"
android:textSize="?attr/font_default"
android:hint="@string/contain_users_hint"
android:maxLines="10" />
</com.google.android.material.textfield.TextInputLayout>
<ImageView
android:id="@+id/contain_add_users_image_view_customize_post_filter_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@ -1069,7 +1191,7 @@
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -576,6 +576,8 @@
<item>@string/contain_flair</item>
<item>@string/exclude_domain</item>
<item>@string/contain_domain</item>
<item>@string/contain_subreddit</item>
<item>@string/contain_user</item>
</string-array>
<string-array name="add_to_comment_filter_options">

View File

@ -1146,7 +1146,9 @@
<string name="title_excludes_regex_hint">Title: excludes regex</string>
<string name="title_contains_regex_hint">Title: contains regex</string>
<string name="exclude_subreddits_hint">Exclude subreddits (e.g. funny,AskReddit)</string>
<string name="contain_subreddits_hint">Contain subreddits (e.g. funny,AskReddit)</string>
<string name="exclude_users_hint">Exclude users (e.g. Hostilenemy,random)</string>
<string name="contain_users_hint">Contain users (e.g. Hostilenemy,random)</string>
<string name="exclude_flairs_hint">Exclude flairs (e.g. flair1,flair2)</string>
<string name="contain_flairs_hint">Contain flairs (e.g. flair1,flair2)</string>
<string name="exclude_domains_hint">Exclude domains</string>
@ -1186,7 +1188,9 @@
<string name="post_filter_title_excludes_regex_explanation">Posts will be filtered out if their title matches the following regular expression.</string>
<string name="post_filter_title_contains_regex_explanation">Posts will be filtered out if their title does not match the following regular expression.</string>
<string name="post_filter_exclude_subreddits_explanation">Posts from the following subreddits will be filtered out.</string>
<string name="post_filter_contain_subreddits_explanation">Posts will be filtered out if they are not from the following subreddits.</string>
<string name="post_filter_exclude_users_explanation">Posts submitted by the following users will be filtered out.</string>
<string name="post_filter_contain_users_explanation">Posts will be filtered out if they are not from the following users.</string>
<string name="post_filter_exclude_flairs_explanation">Posts that have the following flairs will be filtered out.</string>
<string name="post_filter_contain_flairs_explanation">Posts that do not have the following flairs will be filtered out.</string>
<string name="post_filter_exclude_domains_explanation">Link posts that have the following urls will be filtered out.</string>
@ -1253,7 +1257,9 @@
<string name="select">Select</string>
<string name="exclude_subreddit">Exclude this subreddit</string>
<string name="contain_subreddit">Contain this subreddit</string>
<string name="exclude_user">Exclude this user</string>
<string name="contain_user">Contain this user</string>
<string name="exclude_flair">Exclude this flair</string>
<string name="contain_flair">Contain this flair</string>
<string name="exclude_domain">Exclude this domain</string>