aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/ml/docilealligator/infinityforreddit
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2021-07-12 11:41:52 +0000
committerAlex Ning <chineseperson5@gmail.com>2021-07-12 11:41:52 +0000
commit67d4d9cc4f887a87450bbdca041a75a41a103d2b (patch)
tree5a483b4a4a6a6a14b9b1771881024e85f912dd50 /app/src/main/java/ml/docilealligator/infinityforreddit
parent5fc3212f98a8ca8652fc7d370946d10b477a251c (diff)
downloadinfinity-for-reddit-67d4d9cc4f887a87450bbdca041a75a41a103d2b.tar
infinity-for-reddit-67d4d9cc4f887a87450bbdca041a75a41a103d2b.tar.gz
infinity-for-reddit-67d4d9cc4f887a87450bbdca041a75a41a103d2b.tar.bz2
infinity-for-reddit-67d4d9cc4f887a87450bbdca041a75a41a103d2b.tar.lz
infinity-for-reddit-67d4d9cc4f887a87450bbdca041a75a41a103d2b.tar.xz
infinity-for-reddit-67d4d9cc4f887a87450bbdca041a75a41a103d2b.tar.zst
infinity-for-reddit-67d4d9cc4f887a87450bbdca041a75a41a103d2b.zip
Searching comments in ViewPostDetailActivity is available.
Diffstat (limited to 'app/src/main/java/ml/docilealligator/infinityforreddit')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java26
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java17
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java50
3 files changed, 93 insertions, 0 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java
index f093c1f6..a00f4c8d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java
@@ -300,6 +300,28 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
if (savedInstanceState == null) {
viewPager2.setCurrentItem(getIntent().getIntExtra(EXTRA_POST_LIST_POSITION, 0), false);
}
+ nextResultImageView.setOnClickListener(view -> {
+ ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
+ if (fragment != null) {
+ searchComment(fragment, true);
+ }
+ });
+
+ previousResultImageView.setOnClickListener(view -> {
+ ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
+ if (fragment != null) {
+ searchComment(fragment, false);
+ }
+ });
+
+ closeSearchPanelImageView.setOnClickListener(view -> {
+ ViewPostDetailFragment fragment = sectionsPagerAdapter.getCurrentFragment();
+ if (fragment != null) {
+ fragment.resetSearchCommentIndex();
+ }
+
+ searchPanelMaterialCardView.setVisibility(View.GONE);
+ });
}
public boolean isNsfwSubreddit() {
@@ -396,6 +418,10 @@ public class ViewPostDetailActivity extends BaseActivity implements SortTypeSele
}
}
+ public void searchComment(ViewPostDetailFragment fragment, boolean searchNextComment) {
+ fragment.searchComment(searchTextInputEditText.getText().toString(), searchNextComment);
+ }
+
@Subscribe
public void onAccountSwitchEvent(SwitchAccountEvent event) {
if (!getClass().getName().equals(event.excludeActivityClassName)) {
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 f88012b9..7e00a97f 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java
@@ -139,6 +139,8 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
private Drawable mCommentIcon;
+ private int mSearchCommentIndex = -1;
+
public CommentsRecyclerViewAdapter(AppCompatActivity activity, ViewPostDetailFragment fragment,
CustomThemeWrapper customThemeWrapper,
Executor executor, Retrofit retrofit, Retrofit oauthRetrofit,
@@ -396,6 +398,9 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
if (holder instanceof CommentViewHolder) {
Comment comment = getCurrentComment(position);
if (comment != null) {
+ if (position == mSearchCommentIndex) {
+ holder.itemView.setBackgroundColor(Color.parseColor("#03A9F4"));
+ }
if (mIsSingleCommentThreadMode && comment.getId().equals(mSingleCommentId)) {
holder.itemView.setBackgroundColor(mSingleCommentThreadBackgroundColor);
} else if (comment.getAwards() != null && !comment.getAwards().equals("")) {
@@ -1036,6 +1041,18 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi
}
}
+ public int getSearchCommentIndex() {
+ return mSearchCommentIndex;
+ }
+
+ public void highlightSearchResult(int searchCommentIndex) {
+ mSearchCommentIndex = searchCommentIndex;
+ }
+
+ public void resetCommentSearchIndex() {
+ mSearchCommentIndex = -1;
+ }
+
@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
if (holder instanceof CommentViewHolder) {
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 509ce597..cf84a2a6 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java
@@ -766,6 +766,56 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
}
}
+ public void searchComment(String query, boolean searchNextComment) {
+ if (mCommentsAdapter != null) {
+ ArrayList<Comment> visibleComments = mCommentsAdapter.getVisibleComments();
+ int currentSearchIndex = mCommentsAdapter.getSearchCommentIndex();
+ if (visibleComments != null) {
+ if (searchNextComment) {
+ for (int i = currentSearchIndex + 1; i < visibleComments.size(); i++) {
+ if (visibleComments.get(i).getCommentRawText() != null && visibleComments.get(i).getCommentRawText().contains(query)) {
+ if (mCommentsAdapter != null) {
+ if (mCommentsRecyclerView == null) {
+ mRecyclerView.smoothScrollToPosition(i + 1);
+ } else {
+ mCommentsRecyclerView.smoothScrollToPosition(i);
+ }
+ mCommentsAdapter.highlightSearchResult(i);
+ mCommentsAdapter.notifyItemChanged(i);
+ }
+ return;
+ }
+ }
+
+ return;
+ } else {
+ for (int i = currentSearchIndex - 1; i >= 0; i--) {
+ if (visibleComments.get(i).getCommentRawText() !=null && visibleComments.get(i).getCommentRawText().contains(query)) {
+ if (mCommentsAdapter != null) {
+ if (mCommentsRecyclerView == null) {
+ mRecyclerView.smoothScrollToPosition(i + 1);
+ } else {
+ mCommentsRecyclerView.smoothScrollToPosition(i);
+ }
+ mCommentsAdapter.highlightSearchResult(i);
+ mCommentsAdapter.notifyItemChanged(i);
+ }
+ return;
+ }
+ }
+
+ return;
+ }
+ }
+ }
+ }
+
+ public void resetSearchCommentIndex() {
+ if (mCommentsAdapter != null) {
+ mCommentsAdapter.resetCommentSearchIndex();
+ }
+ }
+
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.view_post_detail_fragment, menu);