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