show only a teaser for blog posts in lists

This commit is contained in:
Torsten Grote
2016-09-06 12:52:44 -03:00
parent 307e124ee8
commit 73bc86df4a
2 changed files with 33 additions and 2 deletions

View File

@@ -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>

View File

@@ -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;
}
}