From 73bc86df4a82f92c1ef8f45769747834fe638f01 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Tue, 6 Sep 2016 12:52:44 -0300
Subject: [PATCH] show only a teaser for blog posts in lists

---
 briar-android/res/values/strings.xml          |  1 +
 .../android/blogs/BlogPostViewHolder.java     | 34 +++++++++++++++++--
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index ba764c356d..4bbf13c15f 100644
--- a/briar-android/res/values/strings.xml
+++ b/briar-android/res/values/strings.xml
@@ -211,6 +211,7 @@
 	<string name="blogs_blog_is_empty">This blog is empty</string>
 	<string name="blogs_other_blog_empty_state">This blog is currently empty.\n\nEither the author hasn\'t written anything yet, or the person who shared this blog with you needs to come online, so posts can be synchronized.</string>
 	<string name="tag_new">NEW</string>
+	<string name="read_more">read more</string>
 	<string name="blogs_write_blog_post">Write Blog Post</string>
 	<string name="blogs_write_blog_post_title_hint">Add a title (optional)</string>
 	<string name="blogs_write_blog_post_body_hint">Type your blog post here</string>
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java b/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java
index 186792a11b..e9a99449e0 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java
@@ -6,8 +6,13 @@ import android.content.Intent;
 import android.support.annotation.UiThread;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.app.ActivityOptionsCompat;
+import android.support.v4.content.ContextCompat;
 import android.support.v4.view.ViewCompat;
 import android.support.v7.widget.RecyclerView;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.SpannableStringBuilder;
+import android.text.style.ForegroundColorSpan;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
@@ -33,6 +38,8 @@ import static org.briarproject.api.blogs.MessageType.POST;
 @UiThread
 class BlogPostViewHolder extends RecyclerView.ViewHolder {
 
+	private static final int TEASER_LENGTH = 240;
+
 	private final Context ctx;
 	private final ViewGroup layout;
 	private final AuthorView reblogger;
@@ -106,8 +113,15 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
 		}
 
 		// post body
-		body.setText(item.getBody());
-		if (listener == null) body.setTextIsSelectable(true);
+		CharSequence bodyText = item.getBody();
+		if (listener == null) {
+			body.setTextIsSelectable(true);
+		} else {
+			body.setTextIsSelectable(false);
+			if (item.getBody().length() > TEASER_LENGTH)
+				bodyText = getTeaser(item.getBody());
+		}
+		body.setText(bodyText);
 
 		// reblog button
 		reblogButton.setOnClickListener(new OnClickListener() {
@@ -162,4 +176,20 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
 			commentContainer.addView(v);
 		}
 	}
+
+	private SpannableStringBuilder getTeaser(String body) {
+		SpannableStringBuilder builder =
+				new SpannableStringBuilder(body.substring(0, TEASER_LENGTH));
+		builder.append("… ");
+
+		Spannable readMore =
+				new SpannableString(ctx.getString(R.string.read_more) + "…");
+		ForegroundColorSpan fg = new ForegroundColorSpan(
+				ContextCompat.getColor(ctx, R.color.briar_text_link));
+		readMore.setSpan(fg, 0, readMore.length(),
+				Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+		builder.append(readMore);
+
+		return builder;
+	}
 }
-- 
GitLab