diff --git a/briar-android/src/org/briarproject/android/ActivityComponent.java b/briar-android/src/org/briarproject/android/ActivityComponent.java index 6db54c450adc88c6f0753bfd4cd65621b587a8d8..e561c40b059ac15f6bb54ddfeec11f287daec54d 100644 --- a/briar-android/src/org/briarproject/android/ActivityComponent.java +++ b/briar-android/src/org/briarproject/android/ActivityComponent.java @@ -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); diff --git a/briar-android/src/org/briarproject/android/blogs/BasePostFragment.java b/briar-android/src/org/briarproject/android/blogs/BasePostFragment.java index d3feae4e4858e1ee04f55829185d6fdcd41d15d5..8717acac1fde806184e03ecc9d92e6f3ac181cae 100644 --- a/briar-android/src/org/briarproject/android/blogs/BasePostFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BasePostFragment.java @@ -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 diff --git a/briar-android/src/org/briarproject/android/blogs/BasePostPagerFragment.java b/briar-android/src/org/briarproject/android/blogs/BasePostPagerFragment.java deleted file mode 100644 index 6ba7aa6acad35559ef5377d3ab5031704e290e3a..0000000000000000000000000000000000000000 --- a/briar-android/src/org/briarproject/android/blogs/BasePostPagerFragment.java +++ /dev/null @@ -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; - } - } -} diff --git a/briar-android/src/org/briarproject/android/blogs/BlogActivity.java b/briar-android/src/org/briarproject/android/blogs/BlogActivity.java index 116fc8ac8c75679c654a3194a14bfb2e2160486b..a52d4437664e94ac689eb19883fda60fd1641994 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogActivity.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogActivity.java @@ -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()) diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java index bd87bbf333539dcac4c6da6cfb8f16fb24e29c71..2a0ecf19297eb2157449bcdd38c77fab45e8fe48 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java @@ -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(); } }); } diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java deleted file mode 100644 index c960545cb9c53304bd5241450de0aec715ebc82b..0000000000000000000000000000000000000000 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java +++ /dev/null @@ -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(); - } -} diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java b/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java index 5274c2379a6b66357b98cfda1d11daf51ffa3412..d212d483b97e7e211a03004eceb540d51ba9bdb0 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostViewHolder.java @@ -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; diff --git a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java index d3bfd765a2659005b18db3d03168ad03ddf237a4..e829c08962d5ca0193203f01c3f3dd381b91e946 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java @@ -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()) diff --git a/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java index 294738a1cee61e1e000179177b958045c3d1c5df..73ec81a3ea0d7784ec97824d00ef206dce4ff0a0 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java @@ -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; - } - } diff --git a/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java deleted file mode 100644 index b8fbd8898896fdb27ee7a0ee741822979d1868e5..0000000000000000000000000000000000000000 --- a/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java +++ /dev/null @@ -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(); - } -} diff --git a/briar-android/src/org/briarproject/android/blogs/ReblogActivity.java b/briar-android/src/org/briarproject/android/blogs/ReblogActivity.java index 4489f5c730f20e4302e31f22fa692a4d1c734865..8f04dc1db2df71ed1a422e5c822e9503721e911d 100644 --- a/briar-android/src/org/briarproject/android/blogs/ReblogActivity.java +++ b/briar-android/src/org/briarproject/android/blogs/ReblogActivity.java @@ -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 { diff --git a/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java b/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java index 3f83f380feafc063506f99e3ed40b5f018a0088e..1c9655336a10559d6198294b4f53eb1c769d12b6 100644 --- a/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/ReblogFragment.java @@ -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