diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index ba764c356d3880c5a16081cb1d98e02dd48466dd..4bbf13c15f190c9d91323c3d86232eb75be89901 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 186792a11ba95c27b9a11f0d3397fbeb12555831..e9a99449e0fde91ba61b2468449f6f3394fd4956 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; + } }