mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-12-24 18:08:23 +01:00
Calculate the comment placeholder position if the position was changed.
This commit is contained in:
parent
9ddf15b8fb
commit
e9cec91a5b
@ -50,7 +50,8 @@ class CommentData implements Parcelable {
|
||||
isPlaceHolder = false;
|
||||
}
|
||||
|
||||
CommentData(int depth) {
|
||||
CommentData(String parentFullName, int depth) {
|
||||
this.fullName = parentFullName;
|
||||
this.depth = depth;
|
||||
isPlaceHolder = true;
|
||||
isLoadingMoreChildren = false;
|
||||
|
@ -9,7 +9,6 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
@ -309,27 +308,54 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||
&& parentComment.getFullName().equals(mVisibleComments.get(parentPosition).getFullName())) {
|
||||
if(mVisibleComments.get(parentPosition).isExpanded()) {
|
||||
if(mVisibleComments.get(parentPosition).getChildren().size() > childrenStartingIndex) {
|
||||
mVisibleComments.get(position).setLoadingMoreChildren(false);
|
||||
mVisibleComments.get(position).setLoadMoreChildrenFailed(false);
|
||||
notifyItemChanged(position);
|
||||
|
||||
mVisibleComments.get(parentPosition).setMoreChildrenStartingIndex(childrenStartingIndex);
|
||||
mVisibleComments.get(parentPosition).getChildren().get(mVisibleComments.get(parentPosition).getChildren().size() - 1)
|
||||
.setLoadingMoreChildren(false);
|
||||
mVisibleComments.get(parentPosition).getChildren().get(mVisibleComments.get(parentPosition).getChildren().size() - 1)
|
||||
.setLoadMoreChildrenFailed(false);
|
||||
|
||||
mVisibleComments.addAll(position, expandedComments);
|
||||
notifyItemRangeInserted(position, expandedComments.size());
|
||||
int placeholderPosition = position;
|
||||
if(mVisibleComments.get(position).getFullName().equals(parentComment.getFullName())) {
|
||||
for(int i = parentPosition + 1; i < mVisibleComments.size(); i++) {
|
||||
if(mVisibleComments.get(i).getFullName().equals(parentComment.getFullName())) {
|
||||
placeholderPosition = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mVisibleComments.get(placeholderPosition).setLoadingMoreChildren(false);
|
||||
mVisibleComments.get(placeholderPosition).setLoadMoreChildrenFailed(false);
|
||||
notifyItemChanged(placeholderPosition);
|
||||
|
||||
mVisibleComments.addAll(placeholderPosition, expandedComments);
|
||||
notifyItemRangeInserted(placeholderPosition, expandedComments.size());
|
||||
} else {
|
||||
mVisibleComments.get(parentPosition).getChildren()
|
||||
.remove(mVisibleComments.get(parentPosition).getChildren().size() - 1);
|
||||
mVisibleComments.remove(position);
|
||||
notifyItemRemoved(position);
|
||||
mVisibleComments.get(parentPosition).removeMoreChildrenFullnames();
|
||||
|
||||
mVisibleComments.addAll(position, expandedComments);
|
||||
notifyItemRangeInserted(position, expandedComments.size());
|
||||
int placeholderPosition = position;
|
||||
if(mVisibleComments.get(position).getFullName().equals(parentComment.getFullName())) {
|
||||
for(int i = parentPosition + 1; i < mVisibleComments.size(); i++) {
|
||||
if(mVisibleComments.get(i).getFullName().equals(parentComment.getFullName())) {
|
||||
placeholderPosition = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mVisibleComments.remove(placeholderPosition);
|
||||
notifyItemRemoved(placeholderPosition);
|
||||
|
||||
mVisibleComments.addAll(placeholderPosition, expandedComments);
|
||||
notifyItemRangeInserted(placeholderPosition, expandedComments.size());
|
||||
}
|
||||
} else {
|
||||
if(mVisibleComments.get(parentPosition).hasReply() && mVisibleComments.get(parentPosition).getChildren().size() <= childrenStartingIndex) {
|
||||
mVisibleComments.get(parentPosition).getChildren()
|
||||
.remove(mVisibleComments.get(parentPosition).getChildren().size() - 1);
|
||||
mVisibleComments.get(parentPosition).removeMoreChildrenFullnames();
|
||||
}
|
||||
}
|
||||
|
||||
@ -337,17 +363,24 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||
} else {
|
||||
for(int i = 0; i < mVisibleComments.size(); i++) {
|
||||
if(mVisibleComments.get(i).getFullName().equals(parentComment.getFullName())) {
|
||||
mVisibleComments.get(i).setMoreChildrenStartingIndex(childrenStartingIndex);
|
||||
|
||||
if(mVisibleComments.get(i).isExpanded()) {
|
||||
mVisibleComments.get(i + mVisibleComments.get(i).getChildren().size()).setLoadingMoreChildren(false);
|
||||
mVisibleComments.get(i + mVisibleComments.get(i).getChildren().size()).setLoadMoreChildrenFailed(false);
|
||||
notifyItemChanged(i + mVisibleComments.get(i).getChildren().size());
|
||||
int placeholderPosition = i + mVisibleComments.get(i).getChildren().size();
|
||||
|
||||
mVisibleComments.addAll(i + mVisibleComments.get(i).getChildren().size(),
|
||||
expandedComments);
|
||||
notifyItemRangeInserted(i + mVisibleComments.get(i).getChildren().size(),
|
||||
expandedComments.size());
|
||||
if(!mVisibleComments.get(i).getFullName()
|
||||
.equals(mVisibleComments.get(placeholderPosition).getFullName())) {
|
||||
for(int j = i + 1; j < mVisibleComments.size(); j++) {
|
||||
if(mVisibleComments.get(j).getFullName().equals(mVisibleComments.get(i).getFullName())) {
|
||||
placeholderPosition = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mVisibleComments.get(placeholderPosition).setLoadingMoreChildren(false);
|
||||
mVisibleComments.get(placeholderPosition).setLoadMoreChildrenFailed(false);
|
||||
notifyItemChanged(placeholderPosition);
|
||||
|
||||
mVisibleComments.addAll(placeholderPosition, expandedComments);
|
||||
notifyItemRangeInserted(placeholderPosition, expandedComments.size());
|
||||
}
|
||||
|
||||
mVisibleComments.get(i).getChildren().get(mVisibleComments.get(i).getChildren().size() - 1)
|
||||
@ -367,9 +400,19 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||
if(parentPosition < mVisibleComments.size()
|
||||
&& parentComment.getFullName().equals(mVisibleComments.get(parentPosition).getFullName())) {
|
||||
if(mVisibleComments.get(parentPosition).isExpanded()) {
|
||||
mVisibleComments.get(position).setLoadingMoreChildren(false);
|
||||
mVisibleComments.get(position).setLoadMoreChildrenFailed(true);
|
||||
notifyItemChanged(position);
|
||||
int placeholderPosition = position;
|
||||
if(!mVisibleComments.get(position).getFullName().equals(parentComment.getFullName())) {
|
||||
for(int i = parentPosition + 1; i < mVisibleComments.size(); i++) {
|
||||
if(mVisibleComments.get(i).getFullName().equals(parentComment.getFullName())) {
|
||||
placeholderPosition = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mVisibleComments.get(placeholderPosition).setLoadingMoreChildren(false);
|
||||
mVisibleComments.get(placeholderPosition).setLoadMoreChildrenFailed(true);
|
||||
notifyItemChanged(placeholderPosition);
|
||||
}
|
||||
|
||||
mVisibleComments.get(parentPosition).getChildren().get(mVisibleComments.get(parentPosition).getChildren().size() - 1)
|
||||
@ -380,9 +423,19 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||
for(int i = 0; i < mVisibleComments.size(); i++) {
|
||||
if(mVisibleComments.get(i).getFullName().equals(parentComment.getFullName())) {
|
||||
if(mVisibleComments.get(i).isExpanded()) {
|
||||
mVisibleComments.get(i + mVisibleComments.get(i).getChildren().size()).setLoadingMoreChildren(false);
|
||||
mVisibleComments.get(i + mVisibleComments.get(i).getChildren().size()).setLoadMoreChildrenFailed(true);
|
||||
notifyItemChanged(i + mVisibleComments.get(i).getChildren().size());
|
||||
int placeholderPosition = i + mVisibleComments.get(i).getChildren().size();
|
||||
if(!mVisibleComments.get(placeholderPosition).getFullName().equals(mVisibleComments.get(i).getFullName())) {
|
||||
for(int j = i + 1; j < mVisibleComments.size(); j++) {
|
||||
if(mVisibleComments.get(j).getFullName().equals(mVisibleComments.get(i).getFullName())) {
|
||||
placeholderPosition = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mVisibleComments.get(placeholderPosition).setLoadingMoreChildren(false);
|
||||
mVisibleComments.get(placeholderPosition).setLoadMoreChildrenFailed(true);
|
||||
notifyItemChanged(placeholderPosition);
|
||||
}
|
||||
|
||||
mVisibleComments.get(i).getChildren().get(mVisibleComments.get(i).getChildren().size() - 1).setLoadingMoreChildren(false);
|
||||
@ -478,7 +531,6 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
||||
if (holder instanceof CommentViewHolder) {
|
||||
((CommentViewHolder) holder).expandButton.setVisibility(View.GONE);
|
||||
((CommentViewHolder) holder).loadMoreCommentsProgressBar.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -487,14 +539,13 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||
return mVisibleComments.size();
|
||||
}
|
||||
|
||||
class CommentViewHolder extends RecyclerView.ViewHolder {
|
||||
static class CommentViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.author_text_view_item_post_comment) TextView authorTextView;
|
||||
@BindView(R.id.comment_time_text_view_item_post_comment) TextView commentTimeTextView;
|
||||
@BindView(R.id.comment_markdown_view_item_post_comment) MarkwonView commentMarkdownView;
|
||||
@BindView(R.id.plus_button_item_post_comment) ImageView upvoteButton;
|
||||
@BindView(R.id.score_text_view_item_post_comment) TextView scoreTextView;
|
||||
@BindView(R.id.minus_button_item_post_comment) ImageView downvoteButton;
|
||||
@BindView(R.id.load_more_comments_progress_bar) ProgressBar loadMoreCommentsProgressBar;
|
||||
@BindView(R.id.expand_button_item_post_comment) ImageView expandButton;
|
||||
@BindView(R.id.share_button_item_post_comment) ImageView shareButton;
|
||||
@BindView(R.id.reply_button_item_post_comment) ImageView replyButton;
|
||||
@ -506,7 +557,7 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||
}
|
||||
}
|
||||
|
||||
class LoadMoreCommentViewHolder extends RecyclerView.ViewHolder {
|
||||
static class LoadMoreCommentViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.vertical_block_item_load_more_comments) View verticalBlock;
|
||||
@BindView(R.id.load_more_comments_text_view_item_load_more_comments) TextView textView;
|
||||
|
||||
@ -516,7 +567,7 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||
}
|
||||
}
|
||||
|
||||
class IsLoadingMoreCommentViewHolder extends RecyclerView.ViewHolder {
|
||||
static class IsLoadingMoreCommentViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.vertical_block_item_is_loading_more_comments) View verticalBlock;
|
||||
|
||||
IsLoadingMoreCommentViewHolder(View itemView) {
|
||||
@ -525,7 +576,7 @@ class CommentRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
||||
}
|
||||
}
|
||||
|
||||
class LoadMoreCommentFailedViewHolder extends RecyclerView.ViewHolder {
|
||||
static class LoadMoreCommentFailedViewHolder extends RecyclerView.ViewHolder {
|
||||
@BindView(R.id.vertical_block_item_load_more_comments_failed) View verticalBlock;
|
||||
@BindView(R.id.retry_text_view_item_load_more_comments_failed) TextView retryTextView;
|
||||
|
||||
|
@ -93,7 +93,7 @@ class ParseComment {
|
||||
protected Void doInBackground(Void... voids) {
|
||||
try {
|
||||
parseCommentRecursion(commentsJSONArray, newComments, moreChildrenFullnames, depth, locale);
|
||||
makeChildrenVisible(newComments, expandedNewComments);
|
||||
expandChildren(newComments, expandedNewComments);
|
||||
} catch (JSONException e) {
|
||||
parseFailed = true;
|
||||
if(e.getMessage() != null) {
|
||||
@ -156,17 +156,18 @@ class ParseComment {
|
||||
}
|
||||
}
|
||||
|
||||
private static void makeChildrenVisible(ArrayList<CommentData> comments, ArrayList<CommentData> visibleComments) {
|
||||
private static void expandChildren(ArrayList<CommentData> comments, ArrayList<CommentData> visibleComments) {
|
||||
for(CommentData c : comments) {
|
||||
visibleComments.add(c);
|
||||
if(c.hasReply()) {
|
||||
c.setExpanded(true);
|
||||
makeChildrenVisible(c.getChildren(), visibleComments);
|
||||
expandChildren(c.getChildren(), visibleComments);
|
||||
}
|
||||
if(c.hasMoreChildrenFullnames() && c.getMoreChildrenFullnames().size() > c.getMoreChildrenStartingIndex()) {
|
||||
//Add a load more placeholder
|
||||
visibleComments.add(new CommentData(c.getDepth() + 1));
|
||||
c.addChild(new CommentData(c.getDepth() + 1), c.getChildren().size());
|
||||
CommentData placeholder = new CommentData(c.getFullName(), c.getDepth() + 1);
|
||||
visibleComments.add(placeholder);
|
||||
c.addChild(placeholder, c.getChildren().size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
<View
|
||||
android:id="@+id/vertical_block_item_post_comment"
|
||||
android:layout_width="0dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/textColorPrimaryDark"/>
|
||||
|
||||
@ -36,9 +36,8 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/comment_time_text_view_item_post_comment"
|
||||
android:layout_width="0dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:gravity="end" />
|
||||
|
||||
</LinearLayout>
|
||||
@ -92,14 +91,6 @@
|
||||
android:clickable="true"
|
||||
android:focusable="true"/>
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/load_more_comments_progress_bar"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="20dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_toStartOf="@id/expand_button_item_post_comment"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/expand_button_item_post_comment"
|
||||
android:layout_width="wrap_content"
|
||||
|
Loading…
Reference in New Issue
Block a user