From 97d7f59852ae9b2961aa5547848c56162349bb96 Mon Sep 17 00:00:00 2001 From: Floens Date: Sat, 15 Aug 2015 13:28:26 +0200 Subject: [PATCH] Smooth scroll when the "n new posts" view button is clicked. --- .../java/org/floens/chan/ui/layout/ThreadLayout.java | 2 +- .../org/floens/chan/ui/layout/ThreadListLayout.java | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java index ca28a1a1..5bdf76c5 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java @@ -409,7 +409,7 @@ public class ThreadLayout extends CoordinatorLayout implements ThreadPresenter.T newPostsNotification.setAction(R.string.thread_new_posts_goto, new OnClickListener() { @Override public void onClick(View v) { - presenter.scrollTo(-1, false); + presenter.scrollTo(-1, true); } }).show(); fixSnackbarText(getContext(), newPostsNotification); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java index 4cbf8a6f..85c43e5d 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java @@ -356,10 +356,16 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL public void scrollTo(int displayPosition, boolean smooth) { if (displayPosition < 0) { + int bottom = postAdapter.getItemCount() - 1; + int difference = Math.abs(bottom - getTopAdapterPosition()); + if (difference > MAX_SMOOTH_SCROLL_DISTANCE) { + smooth = false; + } + if (smooth) { - recyclerView.smoothScrollToPosition(postAdapter.getItemCount() - 1); + recyclerView.smoothScrollToPosition(bottom); } else { - recyclerView.scrollToPosition(postAdapter.getItemCount() - 1); + recyclerView.scrollToPosition(bottom); } } else { int scrollPosition = postAdapter.getScrollPosition(displayPosition);