From 786c567cca27725f236d19f0cfe65ac861ee908a Mon Sep 17 00:00:00 2001 From: Austin Huang Date: Mon, 28 Jun 2021 12:02:34 -0400 Subject: [PATCH] allow replying to replies --- .../fragments/comments/RepliesFragment.java | 13 +++++++++++-- .../viewmodels/CommentsViewerViewModel.java | 19 ++++++++++++------- app/src/main/res/values/strings.xml | 1 + 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/awais/instagrabber/fragments/comments/RepliesFragment.java b/app/src/main/java/awais/instagrabber/fragments/comments/RepliesFragment.java index 67c0f95c..e799e673 100644 --- a/app/src/main/java/awais/instagrabber/fragments/comments/RepliesFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/comments/RepliesFragment.java @@ -174,7 +174,7 @@ public class RepliesFragment extends Fragment { } private void setupToolbar() { - binding.toolbar.setTitle("Replies"); + binding.toolbar.setTitle(R.string.title_replies); binding.toolbar.setNavigationIcon(R.drawable.ic_round_arrow_back_24); binding.toolbar.setNavigationOnClickListener(v -> { final FragmentManager fragmentManager = getParentFragmentManager(); @@ -187,7 +187,16 @@ public class RepliesFragment extends Fragment { if (context == null) return; commentsAdapter = new CommentsAdapter(currentUserId, true, - Helper.getCommentCallback(context, getViewLifecycleOwner(), getNavController(), viewModel, null)); + Helper.getCommentCallback(context, + getViewLifecycleOwner(), + getNavController(), + viewModel, + (comment, focusInput) -> { + viewModel.setReplyTo(comment); + binding.commentText.setText(String.format("@%s ", comment.getUser().getUsername())); + if (focusInput) Utils.showKeyboard(binding.commentText); + return null; + })); binding.comments.setAdapter(commentsAdapter); final Resource> listResource = viewModel.getReplyList().getValue(); commentsAdapter.submitList(listResource != null ? listResource.data : Collections.emptyList()); diff --git a/app/src/main/java/awais/instagrabber/viewmodels/CommentsViewerViewModel.java b/app/src/main/java/awais/instagrabber/viewmodels/CommentsViewerViewModel.java index a8bdedeb..16a7b0d2 100644 --- a/app/src/main/java/awais/instagrabber/viewmodels/CommentsViewerViewModel.java +++ b/app/src/main/java/awais/instagrabber/viewmodels/CommentsViewerViewModel.java @@ -54,7 +54,7 @@ public class CommentsViewerViewModel extends ViewModel { private String postId; private String rootCursor; private boolean rootHasNext = true; - private Comment repliesParent; + private Comment repliesParent, replyTo; private String repliesCursor; private boolean repliesHasNext = true; private final CommentService commentService; @@ -153,6 +153,11 @@ public class CommentsViewerViewModel extends ViewModel { return repliesParent; } + @Nullable + public void setReplyTo(final Comment replyTo) { + this.replyTo = replyTo; + } + public LiveData>> getRootList() { return rootList; } @@ -297,6 +302,7 @@ public class CommentsViewerViewModel extends ViewModel { if (comment == null) return; if (repliesParent == null || !Objects.equals(repliesParent.getPk(), comment.getPk())) { repliesParent = comment; + replyTo = comment; prevReplies = null; prevRepliesCursor = null; prevRepliesHasNext = true; @@ -368,8 +374,8 @@ public class CommentsViewerViewModel extends ViewModel { final boolean isReply) { final MutableLiveData> data = new MutableLiveData<>(Resource.loading(null)); String replyToId = null; - if (isReply && repliesParent != null) { - replyToId = repliesParent.getPk(); + if (isReply && replyTo != null) { + replyToId = replyTo.getPk(); } if (isReply && replyToId == null) { data.postValue(Resource.error(null, null)); @@ -399,10 +405,9 @@ public class CommentsViewerViewModel extends ViewModel { final List list = getPrevList(isReply ? replyList : rootList); final ImmutableList.Builder builder = ImmutableList.builder(); if (isReply) { - // in a reply list the first comment is the parent comment - builder.add(list.get(0)) - .add(comment) - .addAll(list.subList(1, list.size())); + // replies are added to the bottom of the list to preserve chronological order + builder.addAll(list) + .add(comment); } else { builder.add(comment) .addAll(list); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dc29288c..24449cdd 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,6 +22,7 @@ Favorites Discover Comments + Replies Activity Check for updates at startup Block screenshots & app preview