mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 13:19:52 +01:00
Address review issues
This commit is contained in:
@@ -20,6 +20,13 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"/>
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progressBar"
|
||||||
|
style="?android:attr/progressBarStyleLarge"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"/>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|||||||
@@ -1,6 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<android.support.v4.view.ViewPager
|
<FrameLayout
|
||||||
android:id="@+id/pager"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"/>
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<android.support.v4.view.ViewPager
|
||||||
|
android:id="@+id/pager"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"/>
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progressBar"
|
||||||
|
style="?android:attr/progressBarStyleLarge"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"/>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
<string name="offline">Offline</string>
|
<string name="offline">Offline</string>
|
||||||
<string name="send">Send</string>
|
<string name="send">Send</string>
|
||||||
<string name="no_data">No data</string>
|
<string name="no_data">No data</string>
|
||||||
|
<string name="ellipsis">…</string>
|
||||||
|
|
||||||
<!-- Contacts and Private Conversations-->
|
<!-- Contacts and Private Conversations-->
|
||||||
<string name="no_contacts">It seems that you are new here and have no contacts yet.\n\nTap the + icon at the top and follow the instructions to add some friends to your list.\n\nPlease remember: You can only add new contacts face-to-face to prevent anyone from impersonating you or reading your messages in the future.</string>
|
<string name="no_contacts">It seems that you are new here and have no contacts yet.\n\nTap the + icon at the top and follow the instructions to add some friends to your list.\n\nPlease remember: You can only add new contacts face-to-face to prevent anyone from impersonating you or reading your messages in the future.</string>
|
||||||
|
|||||||
@@ -59,6 +59,9 @@ abstract class BaseControllerImpl extends DbControllerImpl
|
|||||||
@Override
|
@Override
|
||||||
@CallSuper
|
@CallSuper
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
|
if (listener == null)
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"OnBlogPostAddedListener needs to be attached");
|
||||||
eventBus.addListener(this);
|
eventBus.addListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,10 +3,12 @@ package org.briarproject.android.blogs;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.CallSuper;
|
import android.support.annotation.CallSuper;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.annotation.UiThread;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
|
||||||
import org.briarproject.R;
|
import org.briarproject.R;
|
||||||
import org.briarproject.android.fragment.BaseFragment;
|
import org.briarproject.android.fragment.BaseFragment;
|
||||||
@@ -14,6 +16,8 @@ import org.briarproject.api.db.DbException;
|
|||||||
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import static android.view.View.INVISIBLE;
|
||||||
|
import static android.view.View.VISIBLE;
|
||||||
import static org.briarproject.android.util.AndroidUtils.MIN_RESOLUTION;
|
import static org.briarproject.android.util.AndroidUtils.MIN_RESOLUTION;
|
||||||
|
|
||||||
public abstract class BasePostFragment extends BaseFragment {
|
public abstract class BasePostFragment extends BaseFragment {
|
||||||
@@ -22,6 +26,7 @@ public abstract class BasePostFragment extends BaseFragment {
|
|||||||
Logger.getLogger(BasePostFragment.class.getName());
|
Logger.getLogger(BasePostFragment.class.getName());
|
||||||
|
|
||||||
private View view;
|
private View view;
|
||||||
|
private ProgressBar progressBar;
|
||||||
private BlogPostViewHolder ui;
|
private BlogPostViewHolder ui;
|
||||||
private BlogPostItem post;
|
private BlogPostItem post;
|
||||||
private Runnable refresher;
|
private Runnable refresher;
|
||||||
@@ -35,6 +40,8 @@ public abstract class BasePostFragment extends BaseFragment {
|
|||||||
|
|
||||||
view = inflater.inflate(R.layout.fragment_blog_post, container,
|
view = inflater.inflate(R.layout.fragment_blog_post, container,
|
||||||
false);
|
false);
|
||||||
|
progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
|
||||||
|
progressBar.setVisibility(VISIBLE);
|
||||||
ui = new BlogPostViewHolder(view);
|
ui = new BlogPostViewHolder(view);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
@@ -46,6 +53,7 @@ public abstract class BasePostFragment extends BaseFragment {
|
|||||||
startPeriodicUpdate();
|
startPeriodicUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@CallSuper
|
||||||
@Override
|
@Override
|
||||||
public void onStop() {
|
public void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
@@ -63,12 +71,14 @@ public abstract class BasePostFragment extends BaseFragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@UiThread
|
||||||
protected void onBlogPostLoaded(BlogPostItem post) {
|
protected void onBlogPostLoaded(BlogPostItem post) {
|
||||||
listener.hideLoadingScreen();
|
progressBar.setVisibility(INVISIBLE);
|
||||||
this.post = post;
|
this.post = post;
|
||||||
ui.bindItem(post);
|
ui.bindItem(post);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@UiThread
|
||||||
protected void onBlogPostLoadException(DbException exception) {
|
protected void onBlogPostLoadException(DbException exception) {
|
||||||
// TODO: Decide how to handle errors in the UI
|
// TODO: Decide how to handle errors in the UI
|
||||||
finish();
|
finish();
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ import android.support.v4.view.ViewPager;
|
|||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
|
||||||
import org.briarproject.R;
|
import org.briarproject.R;
|
||||||
import org.briarproject.android.blogs.BaseController.OnBlogPostAddedListener;
|
import org.briarproject.android.blogs.BaseController.OnBlogPostAddedListener;
|
||||||
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
|
|
||||||
import org.briarproject.android.fragment.BaseFragment;
|
import org.briarproject.android.fragment.BaseFragment;
|
||||||
import org.briarproject.api.blogs.BlogPostHeader;
|
import org.briarproject.api.blogs.BlogPostHeader;
|
||||||
import org.briarproject.api.db.DbException;
|
import org.briarproject.api.db.DbException;
|
||||||
@@ -24,13 +24,17 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static android.view.View.INVISIBLE;
|
||||||
|
import static android.view.View.VISIBLE;
|
||||||
import static org.briarproject.android.blogs.BasePostPagerFragment.BlogPostPagerAdapter.INVALID_POSITION;
|
import static org.briarproject.android.blogs.BasePostPagerFragment.BlogPostPagerAdapter.INVALID_POSITION;
|
||||||
import static org.briarproject.android.blogs.BlogActivity.POST_ID;
|
|
||||||
|
|
||||||
abstract class BasePostPagerFragment extends BaseFragment
|
abstract class BasePostPagerFragment extends BaseFragment
|
||||||
implements OnBlogPostAddedListener {
|
implements OnBlogPostAddedListener {
|
||||||
|
|
||||||
|
static final String POST_ID = "briar.POST_ID";
|
||||||
|
|
||||||
private ViewPager pager;
|
private ViewPager pager;
|
||||||
|
private ProgressBar progressBar;
|
||||||
private BlogPostPagerAdapter postPagerAdapter;
|
private BlogPostPagerAdapter postPagerAdapter;
|
||||||
private MessageId postId;
|
private MessageId postId;
|
||||||
|
|
||||||
@@ -49,9 +53,11 @@ abstract class BasePostPagerFragment extends BaseFragment
|
|||||||
|
|
||||||
View v = inflater.inflate(R.layout.fragment_blog_post_pager, container,
|
View v = inflater.inflate(R.layout.fragment_blog_post_pager, container,
|
||||||
false);
|
false);
|
||||||
|
progressBar = (ProgressBar) v.findViewById(R.id.progressBar);
|
||||||
|
progressBar.setVisibility(VISIBLE);
|
||||||
|
|
||||||
pager = (ViewPager) v.findViewById(R.id.pager);
|
pager = (ViewPager) v.findViewById(R.id.pager);
|
||||||
postPagerAdapter = new BlogPostPagerAdapter(getChildFragmentManager());
|
postPagerAdapter = new BlogPostPagerAdapter(getChildFragmentManager());
|
||||||
listener.showLoadingScreen(false, R.string.progress_title_please_wait);
|
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@@ -82,7 +88,7 @@ abstract class BasePostPagerFragment extends BaseFragment
|
|||||||
|
|
||||||
abstract void loadBlogPosts(final MessageId select);
|
abstract void loadBlogPosts(final MessageId select);
|
||||||
|
|
||||||
abstract BaseController getController();
|
abstract void loadBlogPost(BlogPostHeader header);
|
||||||
|
|
||||||
protected void onBlogPostsLoaded(MessageId select,
|
protected void onBlogPostsLoaded(MessageId select,
|
||||||
Collection<BlogPostItem> posts) {
|
Collection<BlogPostItem> posts) {
|
||||||
@@ -97,23 +103,6 @@ abstract class BasePostPagerFragment extends BaseFragment
|
|||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadBlogPost(BlogPostHeader header) {
|
|
||||||
getController().loadBlogPost(header,
|
|
||||||
new UiResultExceptionHandler<BlogPostItem, DbException>(
|
|
||||||
getActivity()) {
|
|
||||||
@Override
|
|
||||||
public void onResultUi(BlogPostItem post) {
|
|
||||||
addPost(post);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onExceptionUi(DbException exception) {
|
|
||||||
// TODO: Decide how to handle errors in the UI
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private MessageId getSelectedPost() {
|
private MessageId getSelectedPost() {
|
||||||
if (postPagerAdapter.getCount() == 0) return null;
|
if (postPagerAdapter.getCount() == 0) return null;
|
||||||
@@ -124,6 +113,7 @@ abstract class BasePostPagerFragment extends BaseFragment
|
|||||||
private void selectPost(MessageId m) {
|
private void selectPost(MessageId m) {
|
||||||
int pos = postPagerAdapter.getPostPosition(m);
|
int pos = postPagerAdapter.getPostPosition(m);
|
||||||
if (pos != INVALID_POSITION) {
|
if (pos != INVALID_POSITION) {
|
||||||
|
progressBar.setVisibility(INVISIBLE);
|
||||||
pager.setAdapter(postPagerAdapter);
|
pager.setAdapter(postPagerAdapter);
|
||||||
pager.setCurrentItem(pos);
|
pager.setCurrentItem(pos);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,10 +7,8 @@ import android.widget.ProgressBar;
|
|||||||
import org.briarproject.R;
|
import org.briarproject.R;
|
||||||
import org.briarproject.android.ActivityComponent;
|
import org.briarproject.android.ActivityComponent;
|
||||||
import org.briarproject.android.BriarActivity;
|
import org.briarproject.android.BriarActivity;
|
||||||
import org.briarproject.android.blogs.BaseController.OnBlogPostAddedListener;
|
|
||||||
import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
|
import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
|
||||||
import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
|
import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
|
||||||
import org.briarproject.api.blogs.BlogPostHeader;
|
|
||||||
import org.briarproject.api.sync.GroupId;
|
import org.briarproject.api.sync.GroupId;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -19,13 +17,12 @@ import static android.view.View.INVISIBLE;
|
|||||||
import static android.view.View.VISIBLE;
|
import static android.view.View.VISIBLE;
|
||||||
|
|
||||||
public class BlogActivity extends BriarActivity implements
|
public class BlogActivity extends BriarActivity implements
|
||||||
OnBlogPostAddedListener, OnBlogPostClickListener, BaseFragmentListener {
|
OnBlogPostClickListener, BaseFragmentListener {
|
||||||
|
|
||||||
static final int REQUEST_WRITE_POST = 1;
|
static final int REQUEST_WRITE_POST = 1;
|
||||||
static final int REQUEST_SHARE = 2;
|
static final int REQUEST_SHARE = 2;
|
||||||
static final String BLOG_NAME = "briar.BLOG_NAME";
|
static final String BLOG_NAME = "briar.BLOG_NAME";
|
||||||
static final String IS_NEW_BLOG = "briar.IS_NEW_BLOG";
|
static final String IS_NEW_BLOG = "briar.IS_NEW_BLOG";
|
||||||
static final String POST_ID = "briar.POST_ID";
|
|
||||||
|
|
||||||
private ProgressBar progressBar;
|
private ProgressBar progressBar;
|
||||||
|
|
||||||
@@ -61,22 +58,11 @@ public class BlogActivity extends BriarActivity implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void injectActivity(ActivityComponent component) {
|
public void injectActivity(ActivityComponent component) {
|
||||||
component.inject(this);
|
component.inject(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBlogPostAdded(BlogPostHeader header, boolean local) {
|
|
||||||
// all our fragments are implementing and registering that hook,
|
|
||||||
// so we don't need to do that ourselves
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBlogPostClick(BlogPostItem post) {
|
public void onBlogPostClick(BlogPostItem post) {
|
||||||
BlogPostPagerFragment f = BlogPostPagerFragment.newInstance(post.getId());
|
BlogPostPagerFragment f = BlogPostPagerFragment.newInstance(post.getId());
|
||||||
|
|||||||
@@ -35,13 +35,6 @@ public class BlogControllerImpl extends BaseControllerImpl
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityCreate() {
|
public void onActivityCreate() {
|
||||||
if (activity instanceof OnBlogPostAddedListener) {
|
|
||||||
listener = (OnBlogPostAddedListener) activity;
|
|
||||||
} else {
|
|
||||||
throw new IllegalStateException(
|
|
||||||
"An activity that injects the BlogController must " +
|
|
||||||
"implement the OnBlogPostAddedListener");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import org.briarproject.api.sync.MessageId;
|
|||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import static org.briarproject.android.blogs.BlogActivity.POST_ID;
|
import static org.briarproject.android.blogs.BasePostPagerFragment.POST_ID;
|
||||||
|
|
||||||
public class BlogPostFragment extends BasePostFragment {
|
public class BlogPostFragment extends BasePostFragment {
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.os.Bundle;
|
|||||||
|
|
||||||
import org.briarproject.android.ActivityComponent;
|
import org.briarproject.android.ActivityComponent;
|
||||||
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
|
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
|
||||||
|
import org.briarproject.api.blogs.BlogPostHeader;
|
||||||
import org.briarproject.api.db.DbException;
|
import org.briarproject.api.db.DbException;
|
||||||
import org.briarproject.api.sync.MessageId;
|
import org.briarproject.api.sync.MessageId;
|
||||||
|
|
||||||
@@ -11,8 +12,6 @@ import java.util.Collection;
|
|||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import static org.briarproject.android.blogs.BlogActivity.POST_ID;
|
|
||||||
|
|
||||||
|
|
||||||
public class BlogPostPagerFragment extends BasePostPagerFragment {
|
public class BlogPostPagerFragment extends BasePostPagerFragment {
|
||||||
|
|
||||||
@@ -42,10 +41,6 @@ public class BlogPostPagerFragment extends BasePostPagerFragment {
|
|||||||
return TAG;
|
return TAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
BaseController getController() {
|
|
||||||
return blogController;
|
|
||||||
}
|
|
||||||
|
|
||||||
void loadBlogPosts(final MessageId select) {
|
void loadBlogPosts(final MessageId select) {
|
||||||
blogController.loadBlogPosts(
|
blogController.loadBlogPosts(
|
||||||
@@ -63,4 +58,21 @@ public class BlogPostPagerFragment extends BasePostPagerFragment {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void loadBlogPost(BlogPostHeader header) {
|
||||||
|
blogController.loadBlogPost(header,
|
||||||
|
new UiResultExceptionHandler<BlogPostItem, DbException>(
|
||||||
|
getActivity()) {
|
||||||
|
@Override
|
||||||
|
public void onResultUi(BlogPostItem post) {
|
||||||
|
addPost(post);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExceptionUi(DbException exception) {
|
||||||
|
// TODO: Decide how to handle errors in the UI
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,8 @@ import android.content.Intent;
|
|||||||
import android.support.annotation.UiThread;
|
import android.support.annotation.UiThread;
|
||||||
import android.support.v4.app.ActivityCompat;
|
import android.support.v4.app.ActivityCompat;
|
||||||
import android.support.v4.app.ActivityOptionsCompat;
|
import android.support.v4.app.ActivityOptionsCompat;
|
||||||
import android.support.v4.content.ContextCompat;
|
|
||||||
import android.support.v4.view.ViewCompat;
|
import android.support.v4.view.ViewCompat;
|
||||||
import android.support.v7.widget.RecyclerView;
|
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.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
@@ -32,14 +27,14 @@ import static android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAn
|
|||||||
import static android.view.View.GONE;
|
import static android.view.View.GONE;
|
||||||
import static android.view.View.VISIBLE;
|
import static android.view.View.VISIBLE;
|
||||||
import static org.briarproject.android.BriarActivity.GROUP_ID;
|
import static org.briarproject.android.BriarActivity.GROUP_ID;
|
||||||
import static org.briarproject.android.blogs.BlogActivity.POST_ID;
|
import static org.briarproject.android.blogs.BasePostPagerFragment.POST_ID;
|
||||||
|
import static org.briarproject.android.util.AndroidUtils.TEASER_LENGTH;
|
||||||
|
import static org.briarproject.android.util.AndroidUtils.getTeaser;
|
||||||
import static org.briarproject.api.blogs.MessageType.POST;
|
import static org.briarproject.api.blogs.MessageType.POST;
|
||||||
|
|
||||||
@UiThread
|
@UiThread
|
||||||
class BlogPostViewHolder extends RecyclerView.ViewHolder {
|
class BlogPostViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
private static final int TEASER_LENGTH = 240;
|
|
||||||
|
|
||||||
private final Context ctx;
|
private final Context ctx;
|
||||||
private final ViewGroup layout;
|
private final ViewGroup layout;
|
||||||
private final AuthorView reblogger;
|
private final AuthorView reblogger;
|
||||||
@@ -119,7 +114,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
|
|||||||
} else {
|
} else {
|
||||||
body.setTextIsSelectable(false);
|
body.setTextIsSelectable(false);
|
||||||
if (item.getBody().length() > TEASER_LENGTH)
|
if (item.getBody().length() > TEASER_LENGTH)
|
||||||
bodyText = getTeaser(item.getBody());
|
bodyText = getTeaser(ctx, item.getBody());
|
||||||
}
|
}
|
||||||
body.setText(bodyText);
|
body.setText(bodyText);
|
||||||
|
|
||||||
@@ -176,20 +171,4 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
|
|||||||
commentContainer.addView(v);
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import org.briarproject.api.sync.MessageId;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import static org.briarproject.android.BriarActivity.GROUP_ID;
|
import static org.briarproject.android.BriarActivity.GROUP_ID;
|
||||||
import static org.briarproject.android.blogs.BlogActivity.POST_ID;
|
import static org.briarproject.android.blogs.BasePostPagerFragment.POST_ID;
|
||||||
|
|
||||||
public class FeedPostFragment extends BasePostFragment {
|
public class FeedPostFragment extends BasePostFragment {
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.os.Bundle;
|
|||||||
|
|
||||||
import org.briarproject.android.ActivityComponent;
|
import org.briarproject.android.ActivityComponent;
|
||||||
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
|
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
|
||||||
|
import org.briarproject.api.blogs.BlogPostHeader;
|
||||||
import org.briarproject.api.db.DbException;
|
import org.briarproject.api.db.DbException;
|
||||||
import org.briarproject.api.sync.MessageId;
|
import org.briarproject.api.sync.MessageId;
|
||||||
|
|
||||||
@@ -11,8 +12,6 @@ import java.util.Collection;
|
|||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import static org.briarproject.android.blogs.BlogActivity.POST_ID;
|
|
||||||
|
|
||||||
public class FeedPostPagerFragment extends BasePostPagerFragment {
|
public class FeedPostPagerFragment extends BasePostPagerFragment {
|
||||||
|
|
||||||
public final static String TAG = FeedPostPagerFragment.class.getName();
|
public final static String TAG = FeedPostPagerFragment.class.getName();
|
||||||
@@ -41,10 +40,6 @@ public class FeedPostPagerFragment extends BasePostPagerFragment {
|
|||||||
return TAG;
|
return TAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
BaseController getController() {
|
|
||||||
return feedController;
|
|
||||||
}
|
|
||||||
|
|
||||||
void loadBlogPosts(final MessageId select) {
|
void loadBlogPosts(final MessageId select) {
|
||||||
feedController.loadBlogPosts(
|
feedController.loadBlogPosts(
|
||||||
@@ -62,4 +57,21 @@ public class FeedPostPagerFragment extends BasePostPagerFragment {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void loadBlogPost(BlogPostHeader header) {
|
||||||
|
feedController.loadBlogPost(header,
|
||||||
|
new UiResultExceptionHandler<BlogPostItem, DbException>(
|
||||||
|
getActivity()) {
|
||||||
|
@Override
|
||||||
|
public void onResultUi(BlogPostItem post) {
|
||||||
|
addPost(post);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExceptionUi(DbException exception) {
|
||||||
|
// TODO: Decide how to handle errors in the UI
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
|
|||||||
import org.briarproject.api.sync.GroupId;
|
import org.briarproject.api.sync.GroupId;
|
||||||
import org.briarproject.api.sync.MessageId;
|
import org.briarproject.api.sync.MessageId;
|
||||||
|
|
||||||
import static org.briarproject.android.blogs.BlogActivity.POST_ID;
|
import static org.briarproject.android.blogs.BasePostPagerFragment.POST_ID;
|
||||||
|
|
||||||
public class ReblogActivity extends BriarActivity implements
|
public class ReblogActivity extends BriarActivity implements
|
||||||
BaseFragmentListener {
|
BaseFragmentListener {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import static android.view.View.GONE;
|
|||||||
import static android.view.View.INVISIBLE;
|
import static android.view.View.INVISIBLE;
|
||||||
import static android.view.View.VISIBLE;
|
import static android.view.View.VISIBLE;
|
||||||
import static org.briarproject.android.BriarActivity.GROUP_ID;
|
import static org.briarproject.android.BriarActivity.GROUP_ID;
|
||||||
import static org.briarproject.android.blogs.BlogActivity.POST_ID;
|
import static org.briarproject.android.blogs.BasePostPagerFragment.POST_ID;
|
||||||
|
|
||||||
public class ReblogFragment extends BaseFragment {
|
public class ReblogFragment extends BaseFragment {
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,12 @@ import android.content.Context;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.support.design.widget.TextInputLayout;
|
import android.support.design.widget.TextInputLayout;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
|
import android.text.Spannable;
|
||||||
|
import android.text.SpannableString;
|
||||||
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
|
import android.text.style.ForegroundColorSpan;
|
||||||
|
|
||||||
import org.briarproject.R;
|
import org.briarproject.R;
|
||||||
import org.briarproject.util.IoUtils;
|
import org.briarproject.util.IoUtils;
|
||||||
@@ -31,6 +36,7 @@ import static android.text.format.DateUtils.WEEK_IN_MILLIS;
|
|||||||
public class AndroidUtils {
|
public class AndroidUtils {
|
||||||
|
|
||||||
public static final long MIN_RESOLUTION = MINUTE_IN_MILLIS;
|
public static final long MIN_RESOLUTION = MINUTE_IN_MILLIS;
|
||||||
|
public static final int TEASER_LENGTH = 240;
|
||||||
|
|
||||||
// Fake Bluetooth address returned by BluetoothAdapter on API 23 and later
|
// Fake Bluetooth address returned by BluetoothAdapter on API 23 and later
|
||||||
private static final String FAKE_BLUETOOTH_ADDRESS = "02:00:00:00:00:00";
|
private static final String FAKE_BLUETOOTH_ADDRESS = "02:00:00:00:00:00";
|
||||||
@@ -115,4 +121,25 @@ public class AndroidUtils {
|
|||||||
MIN_RESOLUTION, flags).toString();
|
MIN_RESOLUTION, flags).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static SpannableStringBuilder getTeaser(Context ctx, String body) {
|
||||||
|
if (body.length() < TEASER_LENGTH)
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"String is shorter than TEASER_LENGTH");
|
||||||
|
|
||||||
|
SpannableStringBuilder builder =
|
||||||
|
new SpannableStringBuilder(body.substring(0, TEASER_LENGTH));
|
||||||
|
String ellipsis = ctx.getString(R.string.ellipsis);
|
||||||
|
builder.append(ellipsis).append(" ");
|
||||||
|
|
||||||
|
Spannable readMore = new SpannableString(
|
||||||
|
ctx.getString(R.string.read_more) + ellipsis);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user