Removed blog post pagers

This commit is contained in:
akwizgran
2016-11-10 09:46:09 +00:00
parent 411549dc0a
commit 2837bde774
12 changed files with 22 additions and 423 deletions

View File

@@ -5,10 +5,8 @@ import android.app.Activity;
import org.briarproject.android.blogs.BlogActivity;
import org.briarproject.android.blogs.BlogFragment;
import org.briarproject.android.blogs.BlogPostFragment;
import org.briarproject.android.blogs.BlogPostPagerFragment;
import org.briarproject.android.blogs.FeedFragment;
import org.briarproject.android.blogs.FeedPostFragment;
import org.briarproject.android.blogs.FeedPostPagerFragment;
import org.briarproject.android.blogs.ReblogActivity;
import org.briarproject.android.blogs.ReblogFragment;
import org.briarproject.android.blogs.RssFeedImportActivity;
@@ -113,10 +111,6 @@ public interface ActivityComponent {
void inject(FeedPostFragment fragment);
void inject(BlogPostPagerFragment fragment);
void inject(FeedPostPagerFragment fragment);
void inject(ReblogFragment fragment);
void inject(ReblogActivity activity);

View File

@@ -11,7 +11,6 @@ import android.widget.ProgressBar;
import org.briarproject.R;
import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.api.db.DbException;
import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
@@ -26,6 +25,8 @@ import static org.briarproject.android.util.AndroidUtils.MIN_RESOLUTION;
@ParametersNotNullByDefault
abstract class BasePostFragment extends BaseFragment {
static final String POST_ID = "briar.POST_ID";
private static final Logger LOG =
Logger.getLogger(BasePostFragment.class.getName());
@@ -39,7 +40,8 @@ abstract class BasePostFragment extends BaseFragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_blog_post, container,
false);
progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
@@ -69,12 +71,6 @@ abstract class BasePostFragment extends BaseFragment {
ui.bindItem(post);
}
@UiThread
protected void onBlogPostLoadException(DbException exception) {
// TODO: Decide how to handle errors in the UI
finish();
}
private void startPeriodicUpdate() {
refresher = new Runnable() {
@Override

View File

@@ -1,182 +0,0 @@
package org.briarproject.android.blogs;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
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.BlogListener;
import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.api.blogs.BlogPostHeader;
import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.MessageId;
import java.util.ArrayList;
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;
@UiThread
@MethodsNotNullByDefault
@ParametersNotNullByDefault
abstract class BasePostPagerFragment extends BaseFragment
implements BlogListener {
static final String POST_ID = "briar.POST_ID";
private ViewPager pager;
private ProgressBar progressBar;
private BlogPostPagerAdapter postPagerAdapter;
private MessageId postId;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle state) {
Bundle args;
if (state == null) args = getArguments();
else args = state;
byte[] p = args.getByteArray(POST_ID);
if (p == null)
throw new IllegalStateException("No post ID in args");
postId = new MessageId(p);
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());
return v;
}
@Override
public void onStart() {
super.onStart();
loadBlogPosts();
}
protected void loadBlogPosts() {
if (postId == null) {
MessageId selected = getSelectedPost();
if (selected != null) loadBlogPosts(selected);
} else {
loadBlogPosts(postId);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
MessageId selected = getSelectedPost();
if (selected != null)
outState.putByteArray(POST_ID, selected.getBytes());
}
@Override
public void onBlogPostAdded(BlogPostHeader header, boolean local) {
loadBlogPost(header);
}
abstract Fragment createFragment(GroupId g, MessageId m);
abstract void loadBlogPosts(MessageId select);
abstract void loadBlogPost(BlogPostHeader header);
protected void onBlogPostsLoaded(MessageId select,
Collection<BlogPostItem> posts) {
postId = null;
postPagerAdapter.setPosts(posts);
selectPost(select);
}
protected void onBlogPostLoaded(BlogPostItem post) {
MessageId selected = getSelectedPost();
postPagerAdapter.addPost(post);
if (selected != null) selectPost(selected);
}
@Nullable
private MessageId getSelectedPost() {
if (postPagerAdapter.getCount() == 0) return null;
int position = pager.getCurrentItem();
return postPagerAdapter.getPost(position).getId();
}
private void selectPost(MessageId m) {
int pos = postPagerAdapter.getPostPosition(m);
if (pos != INVALID_POSITION) {
progressBar.setVisibility(INVISIBLE);
pager.setAdapter(postPagerAdapter);
pager.setCurrentItem(pos);
}
}
@UiThread
class BlogPostPagerAdapter extends FragmentStatePagerAdapter {
static final int INVALID_POSITION = -1;
private final List<BlogPostItem> posts = new ArrayList<>();
private BlogPostPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return posts.size();
}
@Override
public Fragment getItem(int position) {
BlogPostItem post = posts.get(position);
return createFragment(post.getGroupId(), post.getId());
}
private BlogPostItem getPost(int position) {
return posts.get(position);
}
private void setPosts(Collection<BlogPostItem> posts) {
this.posts.clear();
this.posts.addAll(posts);
Collections.sort(this.posts);
notifyDataSetChanged();
}
private void addPost(BlogPostItem post) {
posts.add(post);
Collections.sort(posts);
notifyDataSetChanged();
}
private int getPostPosition(MessageId m) {
int count = getCount();
for (int i = 0; i < count; i++) {
if (getPost(i).getId().equals(m)) {
return i;
}
}
return INVALID_POSITION;
}
}
}

View File

@@ -49,7 +49,7 @@ public class BlogActivity extends BriarActivity implements
@Override
public void onBlogPostClick(BlogPostItem post) {
BlogPostPagerFragment f = BlogPostPagerFragment.newInstance(post.getId());
BlogPostFragment f = BlogPostFragment.newInstance(post.getId());
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentContainer, f, f.getUniqueTag())
.addToBackStack(f.getUniqueTag())

View File

@@ -16,14 +16,12 @@ import org.briarproject.api.sync.MessageId;
import javax.inject.Inject;
import static org.briarproject.android.blogs.BasePostPagerFragment.POST_ID;
@UiThread
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class BlogPostFragment extends BasePostFragment {
public final static String TAG = BlogPostFragment.class.getName();
private static final String TAG = BlogPostFragment.class.getName();
private MessageId postId;
@@ -74,9 +72,11 @@ public class BlogPostFragment extends BasePostFragment {
public void onResultUi(BlogPostItem post) {
onBlogPostLoaded(post);
}
@Override
public void onExceptionUi(DbException exception) {
onBlogPostLoadException(exception);
// TODO: Decide how to handle errors in the UI
finish();
}
});
}

View File

@@ -1,96 +0,0 @@
package org.briarproject.android.blogs;
import android.os.Bundle;
import android.support.annotation.UiThread;
import android.support.v4.app.Fragment;
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.nullsafety.MethodsNotNullByDefault;
import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.MessageId;
import java.util.Collection;
import javax.inject.Inject;
@UiThread
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class BlogPostPagerFragment extends BasePostPagerFragment {
private static final String TAG = BlogPostPagerFragment.class.getName();
@Inject
BlogController blogController;
static BlogPostPagerFragment newInstance(MessageId postId) {
BlogPostPagerFragment f = new BlogPostPagerFragment();
Bundle args = new Bundle();
args.putByteArray(POST_ID, postId.getBytes());
f.setArguments(args);
return f;
}
@Override
public void injectFragment(ActivityComponent component) {
component.inject(this);
blogController.setBlogListener(this);
}
@Override
public String getUniqueTag() {
return TAG;
}
@Override
Fragment createFragment(final GroupId g, final MessageId m) {
return BlogPostFragment.newInstance(m);
}
@Override
void loadBlogPosts(final MessageId select) {
blogController.loadBlogPosts(
new UiResultExceptionHandler<Collection<BlogPostItem>, DbException>(
this) {
@Override
public void onResultUi(Collection<BlogPostItem> posts) {
onBlogPostsLoaded(select, posts);
}
@Override
public void onExceptionUi(DbException exception) {
// TODO: Decide how to handle errors in the UI
finish();
}
});
}
@Override
void loadBlogPost(BlogPostHeader header) {
blogController.loadBlogPost(header,
new UiResultExceptionHandler<BlogPostItem, DbException>(
this) {
@Override
public void onResultUi(BlogPostItem post) {
onBlogPostLoaded(post);
}
@Override
public void onExceptionUi(DbException exception) {
// TODO: Decide how to handle errors in the UI
finish();
}
});
}
@Override
public void onBlogRemoved() {
finish();
}
}

View File

@@ -30,7 +30,7 @@ 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.BasePostPagerFragment.POST_ID;
import static org.briarproject.android.blogs.BasePostFragment.POST_ID;
import static org.briarproject.android.util.AndroidUtils.TEASER_LENGTH;
import static org.briarproject.android.util.AndroidUtils.getSpanned;
import static org.briarproject.android.util.AndroidUtils.getTeaser;

View File

@@ -223,8 +223,8 @@ public class FeedFragment extends BaseFragment implements
@Override
public void onBlogPostClick(BlogPostItem post) {
FeedPostPagerFragment f = FeedPostPagerFragment
.newInstance(post.getId());
FeedPostFragment f =
FeedPostFragment.newInstance(post.getGroupId(), post.getId());
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.content_fragment, f, f.getUniqueTag())
.addToBackStack(f.getUniqueTag())

View File

@@ -18,14 +18,13 @@ import org.briarproject.api.sync.MessageId;
import javax.inject.Inject;
import static org.briarproject.android.BriarActivity.GROUP_ID;
import static org.briarproject.android.blogs.BasePostPagerFragment.POST_ID;
@UiThread
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class FeedPostFragment extends BasePostFragment {
public final static String TAG = FeedPostFragment.class.getName();
private static final String TAG = FeedPostFragment.class.getName();
private MessageId postId;
private GroupId blogId;
@@ -62,6 +61,11 @@ public class FeedPostFragment extends BasePostFragment {
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public String getUniqueTag() {
return TAG;
}
@Override
public void injectFragment(ActivityComponent component) {
component.inject(this);
@@ -77,16 +81,12 @@ public class FeedPostFragment extends BasePostFragment {
public void onResultUi(BlogPostItem post) {
onBlogPostLoaded(post);
}
@Override
public void onExceptionUi(DbException exception) {
onBlogPostLoadException(exception);
// TODO: Decide how to handle errors in the UI
}
});
}
@Override
public String getUniqueTag() {
return TAG;
}
}

View File

@@ -1,113 +0,0 @@
package org.briarproject.android.blogs;
import android.os.Bundle;
import android.support.annotation.UiThread;
import android.support.v4.app.Fragment;
import org.briarproject.android.ActivityComponent;
import org.briarproject.android.blogs.FeedController.FeedListener;
import org.briarproject.android.controller.handler.UiResultExceptionHandler;
import org.briarproject.api.blogs.BlogPostHeader;
import org.briarproject.api.db.DbException;
import org.briarproject.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.MessageId;
import java.util.Collection;
import javax.inject.Inject;
@UiThread
@MethodsNotNullByDefault
@ParametersNotNullByDefault
public class FeedPostPagerFragment extends BasePostPagerFragment
implements FeedListener {
private static final String TAG = FeedPostPagerFragment.class.getName();
@Inject
FeedController feedController;
static FeedPostPagerFragment newInstance(MessageId postId) {
FeedPostPagerFragment f = new FeedPostPagerFragment();
Bundle args = new Bundle();
args.putByteArray(POST_ID, postId.getBytes());
f.setArguments(args);
return f;
}
@Override
public void injectFragment(ActivityComponent component) {
component.inject(this);
feedController.setFeedListener(this);
}
@Override
public String getUniqueTag() {
return TAG;
}
@Override
public void onStart() {
super.onStart();
feedController.onStart();
}
@Override
public void onStop() {
super.onStop();
feedController.onStop();
}
@Override
Fragment createFragment(GroupId g, MessageId m) {
return FeedPostFragment.newInstance(g, m);
}
@Override
void loadBlogPosts(final MessageId select) {
feedController.loadBlogPosts(
new UiResultExceptionHandler<Collection<BlogPostItem>, DbException>(
this) {
@Override
public void onResultUi(Collection<BlogPostItem> posts) {
onBlogPostsLoaded(select, posts);
}
@Override
public void onExceptionUi(DbException exception) {
// TODO: Decide how to handle errors in the UI
}
});
}
@Override
void loadBlogPost(BlogPostHeader header) {
feedController.loadBlogPost(header,
new UiResultExceptionHandler<BlogPostItem, DbException>(
this) {
@Override
public void onResultUi(BlogPostItem post) {
onBlogPostLoaded(post);
}
@Override
public void onExceptionUi(DbException exception) {
// TODO: Decide how to handle errors in the UI
}
});
}
@Override
public void onBlogAdded() {
loadBlogPosts();
}
@Override
public void onBlogRemoved() {
loadBlogPosts();
}
}

View File

@@ -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.BasePostPagerFragment.POST_ID;
import static org.briarproject.android.blogs.BasePostFragment.POST_ID;
public class ReblogActivity extends BriarActivity implements
BaseFragmentListener {

View File

@@ -28,7 +28,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.BasePostPagerFragment.POST_ID;
import static org.briarproject.android.blogs.BasePostFragment.POST_ID;
@MethodsNotNullByDefault
@ParametersNotNullByDefault