diff options
6 files changed, 167 insertions, 83 deletions
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 1271cfc2..29c3f828 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java @@ -607,18 +607,17 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi ((LoadMoreChildCommentsViewHolder) holder).placeholderTextView.setText(R.string.loading); Retrofit retrofit = mAccessToken == null ? mRetrofit : mOauthRetrofit; + String sortType = mCommentRecyclerViewAdapterCallback.getSortType(); FetchComment.fetchMoreComment(mExecutor, new Handler(), retrofit, mAccessToken, - parentComment.getMoreChildrenFullnames(), - parentComment.getMoreChildrenStartingIndex(), parentComment.getDepth() + 1, - mExpandChildren, new FetchComment.FetchMoreCommentListener() { + parentComment.getMoreChildrenIds(), + mExpandChildren, mPost.getFullName(), sortType, new FetchComment.FetchMoreCommentListener() { @Override - public void onFetchMoreCommentSuccess(ArrayList<Comment> expandedComments, - int childrenStartingIndex) { + public void onFetchMoreCommentSuccess(ArrayList<Comment> expandedComments, ArrayList<String> moreChildrenIds) { if (mVisibleComments.size() > parentPosition && parentComment.getFullName().equals(mVisibleComments.get(parentPosition).getFullName())) { if (mVisibleComments.get(parentPosition).isExpanded()) { - if (mVisibleComments.get(parentPosition).getChildren().size() > childrenStartingIndex) { - mVisibleComments.get(parentPosition).setMoreChildrenStartingIndex(childrenStartingIndex); + if (!moreChildrenIds.isEmpty()) { + mVisibleComments.get(parentPosition).setMoreChildrenIds(moreChildrenIds); mVisibleComments.get(parentPosition).getChildren().get(mVisibleComments.get(parentPosition).getChildren().size() - 1) .setLoadingMoreChildren(false); mVisibleComments.get(parentPosition).getChildren().get(mVisibleComments.get(parentPosition).getChildren().size() - 1) @@ -647,7 +646,7 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi } else { mVisibleComments.get(parentPosition).getChildren() .remove(mVisibleComments.get(parentPosition).getChildren().size() - 1); - mVisibleComments.get(parentPosition).removeMoreChildrenFullnames(); + mVisibleComments.get(parentPosition).removeMoreChildrenIds(); int placeholderPosition = commentPosition; if (mVisibleComments.get(commentPosition).getFullName().equals(parentComment.getFullName())) { @@ -674,10 +673,10 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi } } } else { - if (mVisibleComments.get(parentPosition).hasReply() && mVisibleComments.get(parentPosition).getChildren().size() <= childrenStartingIndex) { + if (mVisibleComments.get(parentPosition).hasReply() && moreChildrenIds.isEmpty()) { mVisibleComments.get(parentPosition).getChildren() .remove(mVisibleComments.get(parentPosition).getChildren().size() - 1); - mVisibleComments.get(parentPosition).removeMoreChildrenFullnames(); + mVisibleComments.get(parentPosition).removeMoreChildrenIds(); } } @@ -1157,6 +1156,8 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi void retryFetchingComments(); void retryFetchingMoreComments(); + + String getSortType(); } public class CommentViewHolder extends RecyclerView.ViewHolder { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java index 5638863a..705e8490 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/apis/RedditAPI.java @@ -10,6 +10,7 @@ import retrofit2.Call; import retrofit2.Response; import retrofit2.http.Body; import retrofit2.http.DELETE; +import retrofit2.http.Field; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; @@ -500,4 +501,12 @@ public interface RedditAPI { @FormUrlEncoded @POST("/api/site_admin") Call<String> postSiteAdmin(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params); + + @FormUrlEncoded + @POST("/api/morechildren.json?raw_json=1&api_type=json") + Call<String> moreChildren(@Field("link_id") String linkId, @Field("children") String children, @Field("sort") String sort); + + @FormUrlEncoded + @POST("/api/morechildren.json?raw_json=1&api_type=json") + Call<String> moreChildrenOauth(@Field("link_id") String linkId, @Field("children") String children, @Field("sort") String sort, @HeaderMap Map<String, String> headers); } 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 15b1b68d..d6a6f173 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/Comment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/Comment.java @@ -53,8 +53,7 @@ public class Comment implements Parcelable { private boolean isExpanded; private boolean hasExpandedBefore; private ArrayList<Comment> children; - private ArrayList<String> moreChildrenFullnames; - private int moreChildrenStartingIndex; + private ArrayList<String> moreChildrenIds; private int placeholderType; private boolean isLoadingMoreChildren; private boolean loadMoreChildrenFailed; @@ -91,7 +90,6 @@ public class Comment implements Parcelable { this.saved = saved; this.isExpanded = false; this.hasExpandedBefore = false; - moreChildrenStartingIndex = 0; placeholderType = NOT_PLACEHOLDER; } @@ -141,9 +139,8 @@ public class Comment implements Parcelable { hasExpandedBefore = in.readByte() != 0; children = new ArrayList<>(); in.readTypedList(children, Comment.CREATOR); - moreChildrenFullnames = new ArrayList<>(); - in.readStringList(moreChildrenFullnames); - moreChildrenStartingIndex = in.readInt(); + moreChildrenIds = new ArrayList<>(); + in.readStringList(moreChildrenIds); placeholderType = in.readInt(); isLoadingMoreChildren = in.readByte() != 0; loadMoreChildrenFailed = in.readByte() != 0; @@ -345,28 +342,20 @@ public class Comment implements Parcelable { children.add(position, comment); } - public ArrayList<String> getMoreChildrenFullnames() { - return moreChildrenFullnames; + public ArrayList<String> getMoreChildrenIds() { + return moreChildrenIds; } - public void setMoreChildrenFullnames(ArrayList<String> moreChildrenFullnames) { - this.moreChildrenFullnames = moreChildrenFullnames; + public void setMoreChildrenIds(ArrayList<String> moreChildrenIds) { + this.moreChildrenIds = moreChildrenIds; } - public boolean hasMoreChildrenFullnames() { - return moreChildrenFullnames != null; + public boolean hasMoreChildrenIds() { + return moreChildrenIds != null; } - public void removeMoreChildrenFullnames() { - moreChildrenFullnames.clear(); - } - - public int getMoreChildrenStartingIndex() { - return moreChildrenStartingIndex; - } - - public void setMoreChildrenStartingIndex(int moreChildrenStartingIndex) { - this.moreChildrenStartingIndex = moreChildrenStartingIndex; + public void removeMoreChildrenIds() { + moreChildrenIds.clear(); } public int getPlaceholderType() { @@ -423,8 +412,7 @@ public class Comment implements Parcelable { parcel.writeByte((byte) (isExpanded ? 1 : 0)); parcel.writeByte((byte) (hasExpandedBefore ? 1 : 0)); parcel.writeTypedList(children); - parcel.writeStringList(moreChildrenFullnames); - parcel.writeInt(moreChildrenStartingIndex); + parcel.writeStringList(moreChildrenIds); parcel.writeInt(placeholderType); parcel.writeByte((byte) (isLoadingMoreChildren ? 1 : 0)); parcel.writeByte((byte) (loadMoreChildrenFailed ? 1 : 0)); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/FetchComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/FetchComment.java index 6162865b..a0d62086 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/FetchComment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/FetchComment.java @@ -46,9 +46,9 @@ public class FetchComment { expandChildren, new ParseComment.ParseCommentListener() { @Override public void onParseCommentSuccess(ArrayList<Comment> expandedComments, - String parentId, ArrayList<String> moreChildrenFullnames) { + String parentId, ArrayList<String> moreChildrenIds) { fetchCommentListener.onFetchCommentSuccess(expandedComments, parentId, - moreChildrenFullnames); + moreChildrenIds); } @Override @@ -70,33 +70,27 @@ public class FetchComment { public static void fetchMoreComment(Executor executor, Handler handler, Retrofit retrofit, @Nullable String accessToken, - ArrayList<String> allChildren, int startingIndex, - int depth, boolean expandChildren, + ArrayList<String> allChildren, + boolean expandChildren, String postFullName, + String sortType, FetchMoreCommentListener fetchMoreCommentListener) { if (allChildren == null) { return; } - StringBuilder stringBuilder = new StringBuilder(); - for (int i = 0; i < 100; i++) { - if (allChildren.size() <= startingIndex + i) { - break; - } - stringBuilder.append(allChildren.get(startingIndex + i)).append(","); - } + String childrenIds = String.join(",", allChildren); - if (stringBuilder.length() == 0) { + if (childrenIds.isEmpty()) { return; } - stringBuilder.deleteCharAt(stringBuilder.length() - 1); - RedditAPI api = retrofit.create(RedditAPI.class); Call<String> moreComments; if (accessToken == null) { - moreComments = api.getInfo(stringBuilder.toString()); + moreComments = api.moreChildren(postFullName, childrenIds, sortType); } else { - moreComments = api.getInfoOauth(stringBuilder.toString(), APIUtils.getOAuthHeader(accessToken)); + moreComments = api.moreChildrenOauth(postFullName, childrenIds, + sortType, APIUtils.getOAuthHeader(accessToken)); } moreComments.enqueue(new Callback<String>() { @@ -104,12 +98,11 @@ public class FetchComment { public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) { if (response.isSuccessful()) { ParseComment.parseMoreComment(executor, handler, response.body(), new ArrayList<>(), - depth, expandChildren, new ParseComment.ParseCommentListener() { + expandChildren, new ParseComment.ParseCommentListener() { @Override public void onParseCommentSuccess(ArrayList<Comment> expandedComments, - String parentId, ArrayList<String> moreChildrenFullnames) { - fetchMoreCommentListener.onFetchMoreCommentSuccess(expandedComments, - startingIndex + 100); + String parentId, ArrayList<String> moreChildrenIds) { + fetchMoreCommentListener.onFetchMoreCommentSuccess(expandedComments, moreChildrenIds); } @Override @@ -136,7 +129,7 @@ public class FetchComment { } public interface FetchMoreCommentListener { - void onFetchMoreCommentSuccess(ArrayList<Comment> expandedComments, int childrenStartingIndex); + void onFetchMoreCommentSuccess(ArrayList<Comment> expandedComments, ArrayList<String> moreChildrenIds); void onFetchMoreCommentFailed(); } 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 0a341ff3..62b87a1f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/ParseComment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/ParseComment.java @@ -6,7 +6,9 @@ import static ml.docilealligator.infinityforreddit.comment.Comment.VOTE_TYPE_UPV import android.os.Handler; import android.text.Html; +import android.util.Log; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.json.JSONArray; @@ -14,6 +16,7 @@ import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; +import java.util.List; import java.util.concurrent.Executor; import ml.docilealligator.infinityforreddit.utils.JSONUtils; @@ -31,10 +34,10 @@ public class ParseComment { childrenArray = childrenArray.getJSONObject(1).getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY); ArrayList<Comment> expandedNewComments = new ArrayList<>(); - ArrayList<String> moreChildrenFullnames = new ArrayList<>(); + ArrayList<String> moreChildrenIds = new ArrayList<>(); ArrayList<Comment> newComments = new ArrayList<>(); - parseCommentRecursion(childrenArray, newComments, moreChildrenFullnames, 0); + parseCommentRecursion(childrenArray, newComments, moreChildrenIds, 0); expandChildren(newComments, expandedNewComments, expandChildren); if (expandChildren) { @@ -43,7 +46,7 @@ public class ParseComment { commentData.addAll(newComments); } - handler.post(() -> parseCommentListener.onParseCommentSuccess(commentData, parentId, moreChildrenFullnames)); + handler.post(() -> parseCommentListener.onParseCommentSuccess(commentData, parentId, moreChildrenIds)); } catch (JSONException e) { e.printStackTrace(); handler.post(parseCommentListener::onParseCommentFailed); @@ -52,17 +55,75 @@ public class ParseComment { } static void parseMoreComment(Executor executor, Handler handler, String response, - ArrayList<Comment> commentData, int depth, boolean expandChildren, + ArrayList<Comment> commentData, boolean expandChildren, ParseCommentListener parseCommentListener) { executor.execute(() -> { try { - JSONArray childrenArray = new JSONObject(response).getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY); + JSONArray childrenArray = new JSONObject(response).getJSONObject(JSONUtils.JSON_KEY) + .getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.THINGS_KEY); ArrayList<Comment> newComments = new ArrayList<>(); ArrayList<Comment> expandedNewComments = new ArrayList<>(); - ArrayList<String> moreChildrenFullnames = new ArrayList<>(); + ArrayList<String> moreChildrenIds = new ArrayList<>(); + + // api response is a flat list of comments tree + // process it in order and rebuild the tree + for (int i = 0; i < childrenArray.length(); i++) { + JSONObject child = childrenArray.getJSONObject(i); + JSONObject childData = child.getJSONObject(JSONUtils.DATA_KEY); + if (child.getString(JSONUtils.KIND_KEY).equals(JSONUtils.KIND_VALUE_MORE)) { + String parentFullName = childData.getString(JSONUtils.PARENT_ID_KEY); + JSONArray childrenIds = childData.getJSONArray(JSONUtils.CHILDREN_KEY); + + if (childrenIds.length() != 0) { + ArrayList<String> localMoreChildrenIds = new ArrayList<>(childrenIds.length()); + for (int j = 0; j < childrenIds.length(); j++) { + localMoreChildrenIds.add(childrenIds.getString(j)); + } + + Comment parentComment = findCommentByFullName(newComments, parentFullName); + if (parentComment != null) { + parentComment.setHasReply(true); + parentComment.setMoreChildrenIds(localMoreChildrenIds); + parentComment.addChildren(new ArrayList<>()); // ensure children list is not null + } else { + // assume that it is parent of this call + moreChildrenIds.addAll(localMoreChildrenIds); + } + } else { + Comment continueThreadPlaceholder = new Comment( + parentFullName, + childData.getInt(JSONUtils.DEPTH_KEY), + Comment.PLACEHOLDER_CONTINUE_THREAD + ); + + Comment parentComment = findCommentByFullName(newComments, parentFullName); + if (parentComment != null) { + parentComment.setHasReply(true); + parentComment.addChild(continueThreadPlaceholder, parentComment.getChildCount()); + parentComment.setChildCount(parentComment.getChildCount() + 1); + } else { + // assume that it is parent of this call + newComments.add(continueThreadPlaceholder); + } + } + } else { + Comment comment = parseSingleComment(childData, 0); + String parentFullName = comment.getParentId(); + + Comment parentComment = findCommentByFullName(newComments, parentFullName); + if (parentComment != null) { + parentComment.setHasReply(true); + parentComment.addChild(comment, parentComment.getChildCount()); + parentComment.setChildCount(parentComment.getChildCount() + 1); + } else { + // assume that it is parent of this call + newComments.add(comment); + } + } + } - parseCommentRecursion(childrenArray, newComments, moreChildrenFullnames, depth); + updateChildrenCount(newComments); expandChildren(newComments, expandedNewComments, expandChildren); if (expandChildren) { @@ -71,7 +132,7 @@ public class ParseComment { commentData.addAll(newComments); } - handler.post(() -> parseCommentListener.onParseCommentSuccess(commentData, null, moreChildrenFullnames)); + handler.post(() -> parseCommentListener.onParseCommentSuccess(commentData, null, moreChildrenIds)); } catch (JSONException e) { e.printStackTrace(); handler.post(parseCommentListener::onParseCommentFailed); @@ -96,7 +157,7 @@ public class ParseComment { } private static void parseCommentRecursion(JSONArray comments, ArrayList<Comment> newCommentData, - ArrayList<String> moreChildrenFullnames, int depth) throws JSONException { + ArrayList<String> moreChildrenIds, int depth) throws JSONException { int actualCommentLength; if (comments.length() == 0) { @@ -105,17 +166,17 @@ public class ParseComment { JSONObject more = comments.getJSONObject(comments.length() - 1).getJSONObject(JSONUtils.DATA_KEY); - //Maybe moreChildrenFullnames contain only commentsJSONArray and no more info + //Maybe moreChildrenIds contain only commentsJSONArray and no more info if (more.has(JSONUtils.COUNT_KEY)) { JSONArray childrenArray = more.getJSONArray(JSONUtils.CHILDREN_KEY); for (int i = 0; i < childrenArray.length(); i++) { - moreChildrenFullnames.add("t1_" + childrenArray.getString(i)); + moreChildrenIds.add(childrenArray.getString(i)); } actualCommentLength = comments.length() - 1; - if (moreChildrenFullnames.isEmpty() && comments.getJSONObject(comments.length() - 1).getString(JSONUtils.KIND_KEY).equals(JSONUtils.KIND_VALUE_MORE)) { + if (moreChildrenIds.isEmpty() && comments.getJSONObject(comments.length() - 1).getString(JSONUtils.KIND_KEY).equals(JSONUtils.KIND_VALUE_MORE)) { newCommentData.add(new Comment(more.getString(JSONUtils.PARENT_ID_KEY), more.getInt(JSONUtils.DEPTH_KEY), Comment.PLACEHOLDER_CONTINUE_THREAD)); return; } @@ -131,10 +192,10 @@ public class ParseComment { JSONArray childrenArray = data.getJSONObject(JSONUtils.REPLIES_KEY) .getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY); ArrayList<Comment> children = new ArrayList<>(); - ArrayList<String> nextMoreChildrenFullnames = new ArrayList<>(); - parseCommentRecursion(childrenArray, children, nextMoreChildrenFullnames, singleComment.getDepth()); + ArrayList<String> nextMoreChildrenIds = new ArrayList<>(); + parseCommentRecursion(childrenArray, children, nextMoreChildrenIds, singleComment.getDepth()); singleComment.addChildren(children); - singleComment.setMoreChildrenFullnames(nextMoreChildrenFullnames); + singleComment.setMoreChildrenIds(nextMoreChildrenIds); singleComment.setChildCount(getChildCount(singleComment)); } @@ -165,7 +226,7 @@ public class ParseComment { } else { c.setExpanded(true); } - if (c.hasMoreChildrenFullnames() && c.getMoreChildrenFullnames().size() > c.getMoreChildrenStartingIndex()) { + 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); @@ -277,9 +338,35 @@ public class ParseComment { return null; } + @Nullable + private static Comment findCommentByFullName(@NonNull List<Comment> comments, @NonNull String fullName) { + for (Comment comment: comments) { + if (comment.getFullName().equals(fullName) && + comment.getPlaceholderType() == Comment.NOT_PLACEHOLDER) { + return comment; + } + if (comment.getChildren() != null) { + Comment result = findCommentByFullName(comment.getChildren(), fullName); + if (result != null) { + return result; + } + } + } + return null; + } + + private static void updateChildrenCount(@NonNull List<Comment> comments) { + for (Comment comment: comments) { + comment.setChildCount(getChildCount(comment)); + if (comment.getChildren() != null) { + updateChildrenCount(comment.getChildren()); + } + } + } + public interface ParseCommentListener { void onParseCommentSuccess(ArrayList<Comment> expandedComments, String parentId, - ArrayList<String> moreChildrenFullnames); + ArrayList<String> moreChildrenIds); void onParseCommentFailed(); } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java index 87f42698..1f1e2b6f 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java @@ -202,8 +202,6 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic @State ArrayList<String> children; @State - int mChildrenStartingIndex = 0; - @State boolean loadMoreChildrenSuccess = true; @State boolean hasMoreChildren; @@ -621,6 +619,11 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic fetchMoreComments(); } + + @Override + public String getSortType() { + return sortType; + } }); if (mCommentsRecyclerView != null) { mRecyclerView.setAdapter(mPostAdapter); @@ -810,7 +813,6 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic public void changeSortType(SortType sortType) { mFetchPostInfoLinearLayout.setVisibility(View.GONE); mGlide.clear(mFetchPostInfoImageView); - mChildrenStartingIndex = 0; if (children != null) { children.clear(); } @@ -1328,6 +1330,11 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic fetchMoreComments(); } + + @Override + public String getSortType() { + return sortType; + } }); if (mCommentsRecyclerView != null) { mRecyclerView.setAdapter(mPostAdapter); @@ -1343,8 +1350,8 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic ParseComment.parseComment(mExecutor, new Handler(), response.body(), new ArrayList<>(), mExpandChildren, new ParseComment.ParseCommentListener() { @Override - public void onParseCommentSuccess(ArrayList<Comment> expandedComments, String parentId, ArrayList<String> moreChildrenFullnames) { - ViewPostDetailFragment.this.children = moreChildrenFullnames; + public void onParseCommentSuccess(ArrayList<Comment> expandedComments, String parentId, ArrayList<String> moreChildrenIds) { + ViewPostDetailFragment.this.children = moreChildrenIds; hasMoreChildren = children.size() != 0; mCommentsAdapter.addComments(expandedComments, hasMoreChildren); @@ -1567,13 +1574,13 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic isLoadingMoreChildren = true; Retrofit retrofit = mAccessToken == null ? mRetrofit : mOauthRetrofit; - FetchComment.fetchMoreComment(mExecutor, new Handler(), retrofit, mAccessToken, children, mChildrenStartingIndex, - 0, mExpandChildren, new FetchComment.FetchMoreCommentListener() { + FetchComment.fetchMoreComment(mExecutor, new Handler(), retrofit, mAccessToken, children, + mExpandChildren, mPost.getFullName(), sortType, new FetchComment.FetchMoreCommentListener() { @Override - public void onFetchMoreCommentSuccess(ArrayList<Comment> expandedComments, int childrenStartingIndex) { - hasMoreChildren = childrenStartingIndex < children.size(); + public void onFetchMoreCommentSuccess(ArrayList<Comment> expandedComments, ArrayList<String> moreChildrenIds) { + children = moreChildrenIds; + hasMoreChildren = !children.isEmpty(); mCommentsAdapter.addComments(expandedComments, hasMoreChildren); - mChildrenStartingIndex = childrenStartingIndex; isLoadingMoreChildren = false; loadMoreChildrenSuccess = true; } @@ -1590,7 +1597,6 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic public void refresh(boolean fetchPost, boolean fetchComments) { if (mPostAdapter != null && !isRefreshing) { isRefreshing = true; - mChildrenStartingIndex = 0; mFetchPostInfoLinearLayout.setVisibility(View.GONE); mGlide.clear(mFetchPostInfoImageView); |