aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java12
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java6
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/comment/Comment.java11
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/comment/ParseComment.java24
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/commentfilter/CommentFilter.java18
5 files changed, 58 insertions, 13 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java
index ffbbb703..3891e495 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditDataRoomDatabase.java
@@ -43,7 +43,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}, version = 25)
+ CommentFilter.class, CommentFilterUsage.class}, version = 26)
public abstract class RedditDataRoomDatabase extends RoomDatabase {
public static RedditDataRoomDatabase create(final Context context) {
@@ -54,7 +54,8 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
MIGRATION_9_10, MIGRATION_10_11, MIGRATION_11_12, MIGRATION_12_13,
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_21_22, MIGRATION_22_23, MIGRATION_23_24, MIGRATION_24_25,
+ MIGRATION_25_26)
.build();
}
@@ -410,4 +411,11 @@ public abstract class RedditDataRoomDatabase extends RoomDatabase {
"name_of_usage TEXT NOT NULL, PRIMARY KEY(name, usage, name_of_usage), FOREIGN KEY(name) REFERENCES comment_filter(name) ON DELETE CASCADE)");
}
};
+
+ private static final Migration MIGRATION_25_26 = new Migration(25, 26) {
+ @Override
+ public void migrate(@NonNull SupportSQLiteDatabase database) {
+ database.execSQL("ALTER TABLE comment_filter ADD COLUMN display_mode INTEGER DEFAULT 0 NOT NULL");
+ }
+ };
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java
index 65628bea..d2a46775 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java
@@ -358,7 +358,8 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
Comment comment = mVisibleComments.get(position - 1);
if (comment.getPlaceholderType() == Comment.NOT_PLACEHOLDER) {
- if (mFullyCollapseComment && !comment.isExpanded() && comment.hasExpandedBefore()) {
+ if ((mFullyCollapseComment && !comment.isExpanded() && comment.hasExpandedBefore())
+ || (comment.isFilteredOut() && !comment.hasExpandedBefore())) {
return VIEW_TYPE_COMMENT_FULLY_COLLAPSED;
}
return VIEW_TYPE_COMMENT;
@@ -376,7 +377,8 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
Comment comment = mVisibleComments.get(position);
if (comment.getPlaceholderType() == Comment.NOT_PLACEHOLDER) {
- if (mFullyCollapseComment && !comment.isExpanded() && comment.hasExpandedBefore()) {
+ if ((mFullyCollapseComment && !comment.isExpanded() && comment.hasExpandedBefore())
+ || (comment.isFilteredOut() && !comment.hasExpandedBefore())) {
return VIEW_TYPE_COMMENT_FULLY_COLLAPSED;
}
return VIEW_TYPE_COMMENT;
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/Comment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/Comment.java
index 3d46c2f2..c838e32e 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/Comment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/Comment.java
@@ -54,6 +54,7 @@ public class Comment implements Parcelable {
private boolean saved;
private boolean isExpanded;
private boolean hasExpandedBefore;
+ private boolean isFilteredOut;
private ArrayList<Comment> children;
private ArrayList<String> moreChildrenIds;
private int placeholderType;
@@ -141,6 +142,7 @@ public class Comment implements Parcelable {
scoreHidden = in.readByte() != 0;
isExpanded = in.readByte() != 0;
hasExpandedBefore = in.readByte() != 0;
+ isFilteredOut = in.readByte() != 0;
children = new ArrayList<>();
in.readTypedList(children, Comment.CREATOR);
moreChildrenIds = new ArrayList<>();
@@ -306,6 +308,14 @@ public class Comment implements Parcelable {
return hasExpandedBefore;
}
+ public boolean isFilteredOut() {
+ return isFilteredOut;
+ }
+
+ public void setIsFilteredOut(boolean isFilteredOut) {
+ this.isExpanded = isFilteredOut;
+ }
+
public int getVoteType() {
return voteType;
}
@@ -436,6 +446,7 @@ public class Comment implements Parcelable {
parcel.writeByte((byte) (scoreHidden ? 1 : 0));
parcel.writeByte((byte) (isExpanded ? 1 : 0));
parcel.writeByte((byte) (hasExpandedBefore ? 1 : 0));
+ parcel.writeByte((byte) (isFilteredOut ? 1 : 0));
parcel.writeTypedList(children);
parcel.writeStringList(moreChildrenIds);
parcel.writeInt(placeholderType);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/ParseComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/ParseComment.java
index 8a80f1a4..1593d29d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/ParseComment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/ParseComment.java
@@ -191,8 +191,13 @@ public class ParseComment {
for (int i = 0; i < actualCommentLength; i++) {
JSONObject data = comments.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
Comment singleComment = parseSingleComment(data, depth);
+ boolean isFilteredOut = false;
if (!CommentFilter.isCommentAllowed(singleComment, commentFilter)) {
- continue;
+ if (commentFilter.displayMode == CommentFilter.DisplayMode.REMOVE_COMMENT) {
+ continue;
+ }
+
+ isFilteredOut = true;
}
if (data.get(JSONUtils.REPLIES_KEY) instanceof JSONObject) {
@@ -205,6 +210,7 @@ public class ParseComment {
singleComment.addChildren(children);
singleComment.setMoreChildrenIds(nextMoreChildrenIds);
singleComment.setChildCount(getChildCount(singleComment));
+ singleComment.setIsFilteredOut(isFilteredOut);
}
newCommentData.add(singleComment);
@@ -226,18 +232,22 @@ public class ParseComment {
boolean setExpanded) {
for (Comment c : comments) {
visibleComments.add(c);
- if (c.hasReply()) {
- if (setExpanded) {
+ if (!c.isFilteredOut()) {
+ if (c.hasReply()) {
+ if (setExpanded) {
+ c.setExpanded(true);
+ }
+ expandChildren(c.getChildren(), visibleComments, setExpanded);
+ } else {
c.setExpanded(true);
}
- expandChildren(c.getChildren(), visibleComments, setExpanded);
- } else {
- c.setExpanded(true);
}
if (c.hasMoreChildrenIds() && !c.getMoreChildrenIds().isEmpty()) {
//Add a load more placeholder
Comment placeholder = new Comment(c.getFullName(), c.getDepth() + 1, Comment.PLACEHOLDER_LOAD_MORE_COMMENTS);
- visibleComments.add(placeholder);
+ if (!c.isFilteredOut()) {
+ visibleComments.add(placeholder);
+ }
c.addChild(placeholder, c.getChildren().size());
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/commentfilter/CommentFilter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/commentfilter/CommentFilter.java
index 93b65365..796fd68d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/commentfilter/CommentFilter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/commentfilter/CommentFilter.java
@@ -3,11 +3,14 @@ package ml.docilealligator.infinityforreddit.commentfilter;
import android.os.Parcel;
import android.os.Parcelable;
+import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.List;
import ml.docilealligator.infinityforreddit.comment.Comment;
@@ -17,6 +20,9 @@ public class CommentFilter implements Parcelable {
@PrimaryKey
@NonNull
public String name = "New Filter";
+ @DisplayMode
+ @ColumnInfo(name = "display_mode")
+ public int displayMode;
@ColumnInfo(name = "max_vote")
public int maxVote = -1;
@ColumnInfo(name = "min_vote")
@@ -86,16 +92,17 @@ public class CommentFilter implements Parcelable {
commentFilter.name = "Merged";
for (CommentFilter c : commentFilterList) {
+ commentFilter.displayMode = Math.max(c.displayMode, commentFilter.displayMode);
commentFilter.maxVote = Math.min(c.maxVote, commentFilter.maxVote);
commentFilter.minVote = Math.max(c.minVote, commentFilter.minVote);
- if (c.excludeStrings != null && !c.excludeStrings.equals("")) {
+ if (c.excludeStrings != null && !c.excludeStrings.isEmpty()) {
stringBuilder = new StringBuilder(commentFilter.excludeStrings == null ? "" : commentFilter.excludeStrings);
stringBuilder.append(",").append(c.excludeStrings);
commentFilter.excludeStrings = stringBuilder.toString();
}
- if (c.excludeUsers != null && !c.excludeUsers.equals("")) {
+ if (c.excludeUsers != null && !c.excludeUsers.isEmpty()) {
stringBuilder = new StringBuilder(commentFilter.excludeUsers == null ? "" : commentFilter.excludeUsers);
stringBuilder.append(",").append(c.excludeUsers);
commentFilter.excludeUsers = stringBuilder.toString();
@@ -118,4 +125,11 @@ public class CommentFilter implements Parcelable {
dest.writeString(excludeStrings);
dest.writeString(excludeUsers);
}
+
+ @IntDef({DisplayMode.REMOVE_COMMENT, DisplayMode.COLLAPSE_COMMENT})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface DisplayMode {
+ int REMOVE_COMMENT = 0;
+ int COLLAPSE_COMMENT = 10;
+ }
}