diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index ba764c356..4bbf13c15 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -211,6 +211,7 @@ This blog is empty 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. NEW + read more Write Blog Post Add a title (optional) Type your blog post here diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java b/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java index 186792a11..e9a99449e 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; + } }