From d8b5710a42db1c7765f9b9006d0da6bc1cd1c5c4 Mon Sep 17 00:00:00 2001 From: Torsten Grote <t@grobox.de> Date: Mon, 4 Jul 2016 16:28:57 -0300 Subject: [PATCH] Blog Feed: Show 'Scroll To' link only if scrolling possible --- .../android/blogs/FeedFragment.java | 61 ++++++++++--------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java index 4d3012ac9c..bc7a1e4576 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java @@ -43,6 +43,7 @@ public class FeedFragment extends BaseFragment implements FeedController feedController; private BlogPostAdapter adapter; + private LinearLayoutManager layoutManager; private BriarRecyclerView list; private Blog personalBlog = null; @@ -64,8 +65,10 @@ public class FeedFragment extends BaseFragment implements View v = inflater.inflate(R.layout.fragment_blog, container, false); adapter = new BlogPostAdapter(getActivity(), this); + + layoutManager = new LinearLayoutManager(getActivity()); list = (BriarRecyclerView) v.findViewById(R.id.postList); - list.setLayoutManager(new LinearLayoutManager(getActivity())); + list.setLayoutManager(layoutManager); list.setAdapter(adapter); list.setEmptyText(R.string.blogs_feed_empty_state); @@ -84,20 +87,7 @@ public class FeedFragment extends BaseFragment implements // The BlogPostAddedEvent arrives when the controller is not listening if (requestCode == REQUEST_WRITE_POST && resultCode == RESULT_OK) { - // show snackbar informing about successful post creation - Snackbar s = Snackbar.make(list, R.string.blogs_blog_post_created, - LENGTH_LONG); - s.getView().setBackgroundResource(R.color.briar_primary); - OnClickListener onClick = new OnClickListener() { - @Override - public void onClick(View v) { - list.smoothScrollToPosition(0); - } - }; - s.setActionTextColor(ContextCompat - .getColor(getContext(), R.color.briar_button_positive)); - s.setAction(R.string.blogs_blog_post_scroll_to, onClick); - s.show(); + showSnackBar(R.string.blogs_blog_post_created); } } @@ -136,7 +126,7 @@ public class FeedFragment extends BaseFragment implements public void onPause() { super.onPause(); feedController.onPause(); - // TODO save list position + // TODO save list position in database/preferences? } @Override @@ -172,20 +162,7 @@ public class FeedFragment extends BaseFragment implements @Override public void run() { adapter.add(post); - Snackbar s = - Snackbar.make(list, R.string.blogs_blog_post_received, - LENGTH_LONG); - s.getView().setBackgroundResource(R.color.briar_primary); - OnClickListener onClick = new OnClickListener() { - @Override - public void onClick(View v) { - list.smoothScrollToPosition(0); - } - }; - s.setActionTextColor(ContextCompat - .getColor(getContext(), R.color.briar_button_positive)); - s.setAction(R.string.blogs_blog_post_scroll_to, onClick); - s.show(); + showSnackBar(R.string.blogs_blog_post_received); } }); } @@ -199,4 +176,28 @@ public class FeedFragment extends BaseFragment implements public String getUniqueTag() { return TAG; } + + private void showSnackBar(int stringRes) { + int firstVisible = + layoutManager.findFirstCompletelyVisibleItemPosition(); + int lastVisible = layoutManager.findLastCompletelyVisibleItemPosition(); + int count = adapter.getItemCount(); + boolean scroll = count > (lastVisible - firstVisible + 1); + + Snackbar s = Snackbar.make(list, stringRes, LENGTH_LONG); + s.getView().setBackgroundResource(R.color.briar_primary); + if (scroll) { + OnClickListener onClick = new OnClickListener() { + @Override + public void onClick(View v) { + list.smoothScrollToPosition(0); + } + }; + s.setActionTextColor(ContextCompat + .getColor(getContext(), + R.color.briar_button_positive)); + s.setAction(R.string.blogs_blog_post_scroll_to, onClick); + } + s.show(); + } } -- GitLab