diff --git a/app/src/main/java/me/ccrama/redditslide/Activities/SettingsComments.java b/app/src/main/java/me/ccrama/redditslide/Activities/SettingsComments.java index a6de7de95c..2c46939db8 100644 --- a/app/src/main/java/me/ccrama/redditslide/Activities/SettingsComments.java +++ b/app/src/main/java/me/ccrama/redditslide/Activities/SettingsComments.java @@ -119,6 +119,17 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { } }); } + { + SwitchCompat single = (SwitchCompat) findViewById(R.id.collapse_parents); + single.setChecked(SettingValues.collapseParents); + single.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SettingValues.collapseParents = isChecked; + SettingValues.prefs.edit().putBoolean(SettingValues.PREF_COLLAPSE_PARENTS, isChecked).apply(); + } + }); + } { SwitchCompat single = (SwitchCompat) findViewById(R.id.collapse_comments_default); single.setChecked(SettingValues.collapseCommentsDefault); diff --git a/app/src/main/java/me/ccrama/redditslide/Adapters/CommentAdapter.java b/app/src/main/java/me/ccrama/redditslide/Adapters/CommentAdapter.java index 0fd5c43c08..23c8bf6261 100644 --- a/app/src/main/java/me/ccrama/redditslide/Adapters/CommentAdapter.java +++ b/app/src/main/java/me/ccrama/redditslide/Adapters/CommentAdapter.java @@ -126,6 +126,7 @@ public class CommentAdapter extends RecyclerView.Adapter approved = new ArrayList<>(); public ArrayList removed = new ArrayList<>(); + private Map topLevels = new HashMap<>(); public CommentAdapter(CommentPage mContext, SubmissionComments dataSet, RecyclerView listView, Submission submission, FragmentManager fm) { @@ -301,6 +302,9 @@ public void onBindViewHolder(final RecyclerView.ViewHolder firstHolder, int old) final CommentNode baseNode = currentComments.get(datasetPosition).comment; final Comment comment = baseNode.getComment(); + if (baseNode.isTopLevel()) { + topLevels.put(comment.getFullName(), holder); + } if (pos == getItemCount() - 1) { holder.itemView.setPadding(0, 0, 0, (int) mContext.getResources() @@ -1728,38 +1732,11 @@ public void doOnClick(CommentViewHolder holder, Comment comment, CommentNode bas public void doOnClick(final CommentViewHolder holder, final CommentNode baseNode, final Comment comment) { + if (currentlyEditing != null && !currentlyEditing.getText().toString().isEmpty() && holder.getAdapterPosition() <= editingPosition) { - new AlertDialogWrapper.Builder(mContext).setTitle(R.string.discard_comment_title) - .setMessage(R.string.comment_discard_msg) - .setPositiveButton(R.string.btn_yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - currentlyEditing = null; - editingPosition = -1; - if (SettingValues.fastscroll) { - mPage.fastScroll.setVisibility(View.VISIBLE); - } - if (mPage.fab != null) mPage.fab.setVisibility(View.VISIBLE); - mPage.overrideFab = false; - currentlyEditingId = ""; - backedText = ""; - View view = ((Activity) mContext).getCurrentFocus(); - if (view != null) { - InputMethodManager imm = - (InputMethodManager) mContext.getSystemService( - Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(view.getWindowToken(), 0); - } - - doOnClick(holder, baseNode, comment); - - } - }) - .setNegativeButton(R.string.btn_no, null) - .show(); + collapseEditingComment(holder, baseNode, comment); } else { if (isClicking) { @@ -1768,56 +1745,106 @@ public void onClick(DialogInterface dialog, int which) { isHolder.itemView.findViewById(R.id.menu).setVisibility(View.GONE); } else { if (hiddenPersons.contains(comment.getFullName())) { - hiddenPersons.remove(comment.getFullName()); - unhideAll(baseNode, holder.getAdapterPosition() + 1); + unhideComments(holder, baseNode, comment); - if (toCollapse.contains(comment.getFullName()) - && SettingValues.collapseComments) { - setViews(comment.getDataNode().get("body_html").asText(), - submission.getSubredditName(), holder); - } + } else { + hideComments(holder, baseNode, comment); + } + clickpos = holder.getAdapterPosition() + 1; + } + } + } - CommentAdapterHelper.hideChildrenObject(holder.childrenNumber); - if (!holder.firstTextView.getText().toString().isEmpty()) { - holder.firstTextView.setVisibility(View.VISIBLE); - } else { - holder.firstTextView.setVisibility(View.GONE); - } - holder.commentOverflow.setVisibility(View.VISIBLE); + private void hideComments(CommentViewHolder cvh, CommentNode cn, Comment c) { + final CommentNode node = (SettingValues.collapseParents + ? getTopParent(cn) + : cn); + final Comment comment = (SettingValues.collapseParents + ? node.getComment() + : c); + final CommentViewHolder holder = (SettingValues.collapseParents + ? topLevels.get(comment.getFullName()) + : cvh); + int childNumber = getChildNumber(node); + if (childNumber > 0) { + hideAll(node, holder.getAdapterPosition() + 1); + if (!hiddenPersons.contains(comment.getFullName())) { + hiddenPersons.add(comment.getFullName()); + } + if (childNumber > 0) { + CommentAdapterHelper.showChildrenObject(holder.childrenNumber); + holder.childrenNumber.setText("+" + childNumber); + } + } + toCollapse.add(comment.getFullName()); + if ((holder.firstTextView.getVisibility() == View.VISIBLE + || holder.commentOverflow.getVisibility() == View.VISIBLE) + && SettingValues.collapseComments) { + holder.firstTextView.setVisibility(View.GONE); + holder.commentOverflow.setVisibility(View.GONE); + } else if (SettingValues.collapseComments) { + if (!holder.firstTextView.getText().toString().isEmpty()) { + holder.firstTextView.setVisibility(View.VISIBLE); + } else { + holder.firstTextView.setVisibility(View.GONE); + } + holder.commentOverflow.setVisibility(View.VISIBLE); + } + } + private void unhideComments(CommentViewHolder holder, CommentNode baseNode, Comment comment) { + hiddenPersons.remove(comment.getFullName()); + unhideAll(baseNode, holder.getAdapterPosition() + 1); - toCollapse.remove(comment.getFullName()); + if (toCollapse.contains(comment.getFullName()) + && SettingValues.collapseComments) { + setViews(comment.getDataNode().get("body_html").asText(), + submission.getSubredditName(), holder); + } - } else { - int childNumber = getChildNumber(baseNode); - if (childNumber > 0) { - hideAll(baseNode, holder.getAdapterPosition() + 1); - if (!hiddenPersons.contains(comment.getFullName())) { - hiddenPersons.add(comment.getFullName()); - } - if (childNumber > 0) { - CommentAdapterHelper.showChildrenObject(holder.childrenNumber); - holder.childrenNumber.setText("+" + childNumber); + CommentAdapterHelper.hideChildrenObject(holder.childrenNumber); + if (!holder.firstTextView.getText().toString().isEmpty()) { + holder.firstTextView.setVisibility(View.VISIBLE); + } else { + holder.firstTextView.setVisibility(View.GONE); + } + holder.commentOverflow.setVisibility(View.VISIBLE); + + + toCollapse.remove(comment.getFullName()); + } + + private void collapseEditingComment(final CommentViewHolder holder, final CommentNode baseNode, + final Comment comment) { + new AlertDialogWrapper.Builder(mContext).setTitle(R.string.discard_comment_title) + .setMessage(R.string.comment_discard_msg) + .setPositiveButton(R.string.btn_yes, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + currentlyEditing = null; + editingPosition = -1; + if (SettingValues.fastscroll) { + mPage.fastScroll.setVisibility(View.VISIBLE); } - } - toCollapse.add(comment.getFullName()); - if ((holder.firstTextView.getVisibility() == View.VISIBLE - || holder.commentOverflow.getVisibility() == View.VISIBLE) - && SettingValues.collapseComments) { - holder.firstTextView.setVisibility(View.GONE); - holder.commentOverflow.setVisibility(View.GONE); - } else if (SettingValues.collapseComments) { - if (!holder.firstTextView.getText().toString().isEmpty()) { - holder.firstTextView.setVisibility(View.VISIBLE); - } else { - holder.firstTextView.setVisibility(View.GONE); + if (mPage.fab != null) mPage.fab.setVisibility(View.VISIBLE); + mPage.overrideFab = false; + currentlyEditingId = ""; + backedText = ""; + View view = ((Activity) mContext).getCurrentFocus(); + if (view != null) { + InputMethodManager imm = + (InputMethodManager) mContext.getSystemService( + Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } - holder.commentOverflow.setVisibility(View.VISIBLE); + + doOnClick(holder, baseNode, comment); + } - } - clickpos = holder.getAdapterPosition() + 1; - } - } + }) + .setNegativeButton(R.string.btn_no, null) + .show(); } private int getChildNumber(CommentNode user) { @@ -2435,4 +2462,11 @@ private RedditClient getAuthenticatedClient(String profileName) { Authentication.doVerify(token, reddit, true, mContext); return reddit; } + + private CommentNode getTopParent(CommentNode comment) { + if (comment.isTopLevel()) { + return comment; + } + return getTopParent(comment.getParent()); + } } \ No newline at end of file diff --git a/app/src/main/java/me/ccrama/redditslide/SettingValues.java b/app/src/main/java/me/ccrama/redditslide/SettingValues.java index a3af168b29..0c41e299c6 100644 --- a/app/src/main/java/me/ccrama/redditslide/SettingValues.java +++ b/app/src/main/java/me/ccrama/redditslide/SettingValues.java @@ -58,6 +58,7 @@ public class SettingValues { public static final String PREF_COMMENT_PAGER = "commentPager"; public static final String PREF_COLLAPSE_COMMENTS = "collapseCOmments"; public static final String PREF_COLLAPSE_COMMENTS_DEFAULT = "collapseCommentsDefault"; + public static final String PREF_COLLAPSE_PARENTS = "collapseParents"; public static final String PREF_RIGHT_HANDED_COMMENT_MENU = "rightHandedCommentMenu"; public static final String PREF_DUAL_PORTRAIT = "dualPortrait"; public static final String PREF_CROP_IMAGE = "cropImage"; @@ -215,6 +216,7 @@ public class SettingValues { public static boolean colorIcon; public static boolean peek; public static boolean largeLinks; + public static boolean collapseParents; public static void setAllValues(SharedPreferences settings) { prefs = settings; @@ -270,6 +272,7 @@ public static void setAllValues(SharedPreferences settings) { alwaysZoom = prefs.getBoolean(PREF_ZOOM_DEFAULT, true); collapseComments = prefs.getBoolean(PREF_COLLAPSE_COMMENTS, false); collapseCommentsDefault = prefs.getBoolean(PREF_COLLAPSE_COMMENTS_DEFAULT, false); + collapseParents = prefs.getBoolean(PREF_COLLAPSE_PARENTS, false); rightHandedCommentMenu = prefs.getBoolean(PREF_RIGHT_HANDED_COMMENT_MENU, false); commentAutoHide = prefs.getBoolean(PREF_AUTOHIDE_COMMENTS, false); diff --git a/app/src/main/res/layout/activity_settings_comments.xml b/app/src/main/res/layout/activity_settings_comments.xml index d98a77ff3d..7040d24e70 100644 --- a/app/src/main/res/layout/activity_settings_comments.xml +++ b/app/src/main/res/layout/activity_settings_comments.xml @@ -597,6 +597,50 @@ android:hapticFeedbackEnabled="true" android:textColor="?attr/font" android:textColorHint="?attr/font" /> + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 09661e35c9..23ab11e93f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1161,5 +1161,6 @@ Pixel Save images to subreddit-specific subfolders Works in submission and comment views + Collapse parents