mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Address review issues
This commit is contained in:
@@ -20,6 +20,13 @@
|
||||
android:layout_width="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>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
@@ -1,6 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/pager"
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
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="send">Send</string>
|
||||
<string name="no_data">No data</string>
|
||||
<string name="ellipsis">…</string>
|
||||
|
||||
<!-- 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>
|
||||
|
||||
@@ -59,6 +59,9 @@ abstract class BaseControllerImpl extends DbControllerImpl
|
||||
@Override
|
||||
@CallSuper
|
||||
public void onStart() {
|
||||
if (listener == null)
|
||||
throw new IllegalStateException(
|
||||
"OnBlogPostAddedListener needs to be attached");
|
||||
eventBus.addListener(this);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,10 +3,12 @@ package org.briarproject.android.blogs;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.CallSuper;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.UiThread;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
import org.briarproject.R;
|
||||
import org.briarproject.android.fragment.BaseFragment;
|
||||
@@ -14,6 +16,8 @@ import org.briarproject.api.db.DbException;
|
||||
|
||||
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;
|
||||
|
||||
public abstract class BasePostFragment extends BaseFragment {
|
||||
@@ -22,6 +26,7 @@ public abstract class BasePostFragment extends BaseFragment {
|
||||
Logger.getLogger(BasePostFragment.class.getName());
|
||||
|
||||
private View view;
|
||||
private ProgressBar progressBar;
|
||||
private BlogPostViewHolder ui;
|
||||
private BlogPostItem post;
|
||||
private Runnable refresher;
|
||||
@@ -35,6 +40,8 @@ public abstract class BasePostFragment extends BaseFragment {
|
||||
|
||||
view = inflater.inflate(R.layout.fragment_blog_post, container,
|
||||
false);
|
||||
progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
|
||||
progressBar.setVisibility(VISIBLE);
|
||||
ui = new BlogPostViewHolder(view);
|
||||
return view;
|
||||
}
|
||||
@@ -46,6 +53,7 @@ public abstract class BasePostFragment extends BaseFragment {
|
||||
startPeriodicUpdate();
|
||||
}
|
||||
|
||||
@CallSuper
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
@@ -63,12 +71,14 @@ public abstract class BasePostFragment extends BaseFragment {
|
||||
}
|
||||
}
|
||||
|
||||
@UiThread
|
||||
protected void onBlogPostLoaded(BlogPostItem post) {
|
||||
listener.hideLoadingScreen();
|
||||
progressBar.setVisibility(INVISIBLE);
|
||||
this.post = post;
|
||||
ui.bindItem(post);
|
||||
}
|
||||
|
||||
@UiThread
|
||||
protected void onBlogPostLoadException(DbException exception) {
|
||||
// TODO: Decide how to handle errors in the UI
|
||||
finish();
|
||||
|
||||
@@ -10,10 +10,10 @@ import android.support.v4.view.ViewPager;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ProgressBar;
|
||||
|
||||
import org.briarproject.R;
|
||||
import org.briarproject.android.blogs.BaseController.OnBlogPostAddedListener;
|
||||
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
|
||||
import org.briarproject.android.fragment.BaseFragment;
|
||||
import org.briarproject.api.blogs.BlogPostHeader;
|
||||
import org.briarproject.api.db.DbException;
|
||||
@@ -24,13 +24,17 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
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.BlogActivity.POST_ID;
|
||||
|
||||
abstract class BasePostPagerFragment extends BaseFragment
|
||||
implements OnBlogPostAddedListener {
|
||||
|
||||
static final String POST_ID = "briar.POST_ID";
|
||||
|
||||
private ViewPager pager;
|
||||
private ProgressBar progressBar;
|
||||
private BlogPostPagerAdapter postPagerAdapter;
|
||||
private MessageId postId;
|
||||
|
||||
@@ -49,9 +53,11 @@ abstract class BasePostPagerFragment extends BaseFragment
|
||||
|
||||
View v = inflater.inflate(R.layout.fragment_blog_post_pager, container,
|
||||
false);
|
||||
progressBar = (ProgressBar) v.findViewById(R.id.progressBar);
|
||||
progressBar.setVisibility(VISIBLE);
|
||||
|
||||
pager = (ViewPager) v.findViewById(R.id.pager);
|
||||
postPagerAdapter = new BlogPostPagerAdapter(getChildFragmentManager());
|
||||
listener.showLoadingScreen(false, R.string.progress_title_please_wait);
|
||||
|
||||
return v;
|
||||
}
|
||||
@@ -82,7 +88,7 @@ abstract class BasePostPagerFragment extends BaseFragment
|
||||
|
||||
abstract void loadBlogPosts(final MessageId select);
|
||||
|
||||
abstract BaseController getController();
|
||||
abstract void loadBlogPost(BlogPostHeader header);
|
||||
|
||||
protected void onBlogPostsLoaded(MessageId select,
|
||||
Collection<BlogPostItem> posts) {
|
||||
@@ -97,23 +103,6 @@ abstract class BasePostPagerFragment extends BaseFragment
|
||||
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
|
||||
private MessageId getSelectedPost() {
|
||||
if (postPagerAdapter.getCount() == 0) return null;
|
||||
@@ -124,6 +113,7 @@ abstract class BasePostPagerFragment extends BaseFragment
|
||||
private void selectPost(MessageId m) {
|
||||
int pos = postPagerAdapter.getPostPosition(m);
|
||||
if (pos != INVALID_POSITION) {
|
||||
progressBar.setVisibility(INVISIBLE);
|
||||
pager.setAdapter(postPagerAdapter);
|
||||
pager.setCurrentItem(pos);
|
||||
}
|
||||
|
||||
@@ -7,10 +7,8 @@ import android.widget.ProgressBar;
|
||||
import org.briarproject.R;
|
||||
import org.briarproject.android.ActivityComponent;
|
||||
import org.briarproject.android.BriarActivity;
|
||||
import org.briarproject.android.blogs.BaseController.OnBlogPostAddedListener;
|
||||
import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener;
|
||||
import org.briarproject.android.fragment.BaseFragment.BaseFragmentListener;
|
||||
import org.briarproject.api.blogs.BlogPostHeader;
|
||||
import org.briarproject.api.sync.GroupId;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -19,13 +17,12 @@ import static android.view.View.INVISIBLE;
|
||||
import static android.view.View.VISIBLE;
|
||||
|
||||
public class BlogActivity extends BriarActivity implements
|
||||
OnBlogPostAddedListener, OnBlogPostClickListener, BaseFragmentListener {
|
||||
OnBlogPostClickListener, BaseFragmentListener {
|
||||
|
||||
static final int REQUEST_WRITE_POST = 1;
|
||||
static final int REQUEST_SHARE = 2;
|
||||
static final String BLOG_NAME = "briar.BLOG_NAME";
|
||||
static final String IS_NEW_BLOG = "briar.IS_NEW_BLOG";
|
||||
static final String POST_ID = "briar.POST_ID";
|
||||
|
||||
private ProgressBar progressBar;
|
||||
|
||||
@@ -61,22 +58,11 @@ public class BlogActivity extends BriarActivity implements
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void injectActivity(ActivityComponent component) {
|
||||
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
|
||||
public void onBlogPostClick(BlogPostItem post) {
|
||||
BlogPostPagerFragment f = BlogPostPagerFragment.newInstance(post.getId());
|
||||
|
||||
@@ -35,13 +35,6 @@ public class BlogControllerImpl extends BaseControllerImpl
|
||||
|
||||
@Override
|
||||
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
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.briarproject.api.sync.MessageId;
|
||||
|
||||
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 {
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.os.Bundle;
|
||||
|
||||
import org.briarproject.android.ActivityComponent;
|
||||
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
|
||||
import org.briarproject.api.blogs.BlogPostHeader;
|
||||
import org.briarproject.api.db.DbException;
|
||||
import org.briarproject.api.sync.MessageId;
|
||||
|
||||
@@ -11,8 +12,6 @@ import java.util.Collection;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static org.briarproject.android.blogs.BlogActivity.POST_ID;
|
||||
|
||||
|
||||
public class BlogPostPagerFragment extends BasePostPagerFragment {
|
||||
|
||||
@@ -42,10 +41,6 @@ public class BlogPostPagerFragment extends BasePostPagerFragment {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
BaseController getController() {
|
||||
return blogController;
|
||||
}
|
||||
|
||||
void loadBlogPosts(final MessageId select) {
|
||||
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.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;
|
||||
@@ -32,14 +27,14 @@ import static android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAn
|
||||
import static android.view.View.GONE;
|
||||
import static android.view.View.VISIBLE;
|
||||
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;
|
||||
|
||||
@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;
|
||||
@@ -119,7 +114,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
|
||||
} else {
|
||||
body.setTextIsSelectable(false);
|
||||
if (item.getBody().length() > TEASER_LENGTH)
|
||||
bodyText = getTeaser(item.getBody());
|
||||
bodyText = getTeaser(ctx, item.getBody());
|
||||
}
|
||||
body.setText(bodyText);
|
||||
|
||||
@@ -176,20 +171,4 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import org.briarproject.api.sync.MessageId;
|
||||
import javax.inject.Inject;
|
||||
|
||||
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 {
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.os.Bundle;
|
||||
|
||||
import org.briarproject.android.ActivityComponent;
|
||||
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
|
||||
import org.briarproject.api.blogs.BlogPostHeader;
|
||||
import org.briarproject.api.db.DbException;
|
||||
import org.briarproject.api.sync.MessageId;
|
||||
|
||||
@@ -11,8 +12,6 @@ import java.util.Collection;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static org.briarproject.android.blogs.BlogActivity.POST_ID;
|
||||
|
||||
public class FeedPostPagerFragment extends BasePostPagerFragment {
|
||||
|
||||
public final static String TAG = FeedPostPagerFragment.class.getName();
|
||||
@@ -41,10 +40,6 @@ public class FeedPostPagerFragment extends BasePostPagerFragment {
|
||||
return TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
BaseController getController() {
|
||||
return feedController;
|
||||
}
|
||||
|
||||
void loadBlogPosts(final MessageId select) {
|
||||
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.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
|
||||
BaseFragmentListener {
|
||||
|
||||
@@ -27,7 +27,7 @@ import static android.view.View.GONE;
|
||||
import static android.view.View.INVISIBLE;
|
||||
import static android.view.View.VISIBLE;
|
||||
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 {
|
||||
|
||||
|
||||
@@ -6,7 +6,12 @@ import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.provider.Settings;
|
||||
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.style.ForegroundColorSpan;
|
||||
|
||||
import org.briarproject.R;
|
||||
import org.briarproject.util.IoUtils;
|
||||
@@ -31,6 +36,7 @@ import static android.text.format.DateUtils.WEEK_IN_MILLIS;
|
||||
public class AndroidUtils {
|
||||
|
||||
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
|
||||
private static final String FAKE_BLUETOOTH_ADDRESS = "02:00:00:00:00:00";
|
||||
@@ -115,4 +121,25 @@ public class AndroidUtils {
|
||||
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