diff --git a/briar-android/src/org/briarproject/android/blogs/BaseController.java b/briar-android/src/org/briarproject/android/blogs/BaseController.java index 9e94d668de1d3b2fdb8fec4d4ab804552e648f9f..6b81243ec6c1fbdb8dda0d6dcbbf812545107fae 100644 --- a/briar-android/src/org/briarproject/android/blogs/BaseController.java +++ b/briar-android/src/org/briarproject/android/blogs/BaseController.java @@ -8,6 +8,7 @@ import org.briarproject.android.controller.handler.ExceptionHandler; import org.briarproject.android.controller.handler.ResultExceptionHandler; import org.briarproject.api.blogs.BlogPostHeader; import org.briarproject.api.db.DbException; +import org.briarproject.api.nullsafety.NotNullByDefault; import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.MessageId; @@ -33,9 +34,10 @@ interface BaseController { void repeatPost(BlogPostItem item, @Nullable String comment, ExceptionHandler<DbException> handler); - void setOnBlogPostAddedListener(OnBlogPostAddedListener listener); + void setBlogListener(BlogListener listener); - interface OnBlogPostAddedListener extends DestroyableContext { + @NotNullByDefault + interface BlogListener extends DestroyableContext { @UiThread void onBlogPostAdded(BlogPostHeader header, boolean local); diff --git a/briar-android/src/org/briarproject/android/blogs/BaseControllerImpl.java b/briar-android/src/org/briarproject/android/blogs/BaseControllerImpl.java index ec563fbf37e7572e89183932687fd2ed53e87d04..04d9e2d164bed702e1cbee888a5cac938c953f91 100644 --- a/briar-android/src/org/briarproject/android/blogs/BaseControllerImpl.java +++ b/briar-android/src/org/briarproject/android/blogs/BaseControllerImpl.java @@ -46,7 +46,7 @@ abstract class BaseControllerImpl extends DbControllerImpl private final Map<MessageId, BlogPostHeader> headerCache = new ConcurrentHashMap<>(); - private volatile OnBlogPostAddedListener listener; + private volatile BlogListener listener; BaseControllerImpl(@DatabaseExecutor Executor dbExecutor, LifecycleManager lifecycleManager, EventBus eventBus, @@ -73,7 +73,7 @@ abstract class BaseControllerImpl extends DbControllerImpl } @Override - public void setOnBlogPostAddedListener(OnBlogPostAddedListener listener) { + public void setBlogListener(BlogListener listener) { this.listener = listener; } diff --git a/briar-android/src/org/briarproject/android/blogs/BasePostFragment.java b/briar-android/src/org/briarproject/android/blogs/BasePostFragment.java index 9e2db81dc85c5cf54e9831f5902e1ee5fc2b1f15..d3feae4e4858e1ee04f55829185d6fdcd41d15d5 100644 --- a/briar-android/src/org/briarproject/android/blogs/BasePostFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BasePostFragment.java @@ -12,6 +12,8 @@ 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; import java.util.logging.Logger; @@ -19,6 +21,9 @@ import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; import static org.briarproject.android.util.AndroidUtils.MIN_RESOLUTION; +@UiThread +@MethodsNotNullByDefault +@ParametersNotNullByDefault abstract class BasePostFragment extends BaseFragment { private static final Logger LOG = @@ -33,8 +38,8 @@ abstract class BasePostFragment extends BaseFragment { @CallSuper @Nullable @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_blog_post, container, false); progressBar = (ProgressBar) view.findViewById(R.id.progressBar); diff --git a/briar-android/src/org/briarproject/android/blogs/BasePostPagerFragment.java b/briar-android/src/org/briarproject/android/blogs/BasePostPagerFragment.java index 424fa5d45d725570a20439da8b1d7cf16ccca5be..6ba7aa6acad35559ef5377d3ab5031704e290e3a 100644 --- a/briar-android/src/org/briarproject/android/blogs/BasePostPagerFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BasePostPagerFragment.java @@ -13,10 +13,12 @@ import android.view.ViewGroup; import android.widget.ProgressBar; import org.briarproject.R; -import org.briarproject.android.blogs.BaseController.OnBlogPostAddedListener; +import org.briarproject.android.blogs.BaseController.BlogListener; import org.briarproject.android.fragment.BaseFragment; 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.ArrayList; @@ -28,8 +30,11 @@ 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 OnBlogPostAddedListener { + implements BlogListener { static final String POST_ID = "briar.POST_ID"; @@ -40,8 +45,8 @@ abstract class BasePostPagerFragment extends BaseFragment @Nullable @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle state) { + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, @Nullable Bundle state) { Bundle args; if (state == null) args = getArguments(); @@ -65,6 +70,10 @@ abstract class BasePostPagerFragment extends BaseFragment @Override public void onStart() { super.onStart(); + loadBlogPosts(); + } + + protected void loadBlogPosts() { if (postId == null) { MessageId selected = getSelectedPost(); if (selected != null) loadBlogPosts(selected); @@ -86,23 +95,23 @@ abstract class BasePostPagerFragment extends BaseFragment loadBlogPost(header); } - abstract void loadBlogPosts(final MessageId select); + abstract Fragment createFragment(GroupId g, MessageId m); + + abstract void loadBlogPosts(MessageId select); abstract void loadBlogPost(BlogPostHeader header); - @UiThread protected void onBlogPostsLoaded(MessageId select, Collection<BlogPostItem> posts) { - postId = null; postPagerAdapter.setPosts(posts); selectPost(select); } - @UiThread - protected void onBlogPostsLoadedException(DbException exception) { - // TODO: Decide how to handle errors in the UI - finish(); + protected void onBlogPostLoaded(BlogPostItem post) { + MessageId selected = getSelectedPost(); + postPagerAdapter.addPost(post); + if (selected != null) selectPost(selected); } @Nullable @@ -121,16 +130,11 @@ abstract class BasePostPagerFragment extends BaseFragment } } - protected void addPost(BlogPostItem post) { - MessageId selected = getSelectedPost(); - postPagerAdapter.addPost(post); - if (selected != null) selectPost(selected); - } - @UiThread - static class BlogPostPagerAdapter extends FragmentStatePagerAdapter { + class BlogPostPagerAdapter extends FragmentStatePagerAdapter { static final int INVALID_POSITION = -1; + private final List<BlogPostItem> posts = new ArrayList<>(); private BlogPostPagerAdapter(FragmentManager fm) { @@ -145,7 +149,7 @@ abstract class BasePostPagerFragment extends BaseFragment @Override public Fragment getItem(int position) { BlogPostItem post = posts.get(position); - return FeedPostFragment.newInstance(post.getGroupId(), post.getId()); + return createFragment(post.getGroupId(), post.getId()); } private BlogPostItem getPost(int position) { @@ -175,9 +179,4 @@ abstract class BasePostPagerFragment extends BaseFragment return INVALID_POSITION; } } - - @Override - public void onBlogRemoved() { - finish(); - } } diff --git a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java index fb5f43edc7b91c85eedefa7297fb733623129b58..a7273fd61fcd40d1dc476350326e5a9281cb0a6f 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java @@ -4,6 +4,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.annotation.UiThread; import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.content.ContextCompat; @@ -19,7 +20,7 @@ import android.widget.Toast; import org.briarproject.R; import org.briarproject.android.ActivityComponent; -import org.briarproject.android.blogs.BaseController.OnBlogPostAddedListener; +import org.briarproject.android.blogs.BaseController.BlogListener; import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener; import org.briarproject.android.controller.handler.UiResultExceptionHandler; import org.briarproject.android.fragment.BaseFragment; @@ -46,10 +47,11 @@ import static org.briarproject.android.BriarActivity.GROUP_ID; import static org.briarproject.android.blogs.BlogActivity.REQUEST_SHARE; import static org.briarproject.android.blogs.BlogActivity.REQUEST_WRITE_POST; +@UiThread @MethodsNotNullByDefault @ParametersNotNullByDefault public class BlogFragment extends BaseFragment implements - OnBlogPostAddedListener { + BlogListener { private final static String TAG = BlogFragment.class.getName(); @@ -99,7 +101,7 @@ public class BlogFragment extends BaseFragment implements @Override public void injectFragment(ActivityComponent component) { component.inject(this); - blogController.setOnBlogPostAddedListener(this); + blogController.setBlogListener(this); } @Override diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java index 78b82874fc6e01a664bac2ad229ee2579344c9d0..bd87bbf333539dcac4c6da6cfb8f16fb24e29c71 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostFragment.java @@ -2,6 +2,7 @@ package org.briarproject.android.blogs; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.annotation.UiThread; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,12 +10,17 @@ import android.view.ViewGroup; import org.briarproject.android.ActivityComponent; import org.briarproject.android.controller.handler.UiResultExceptionHandler; import org.briarproject.api.db.DbException; +import org.briarproject.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.api.nullsafety.ParametersNotNullByDefault; 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(); @@ -36,8 +42,9 @@ public class BlogPostFragment extends BasePostFragment { @Nullable @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { Bundle args = getArguments(); byte[] p = args.getByteArray(POST_ID); diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostItem.java b/briar-android/src/org/briarproject/android/blogs/BlogPostItem.java index 64295c731713576dad6f891dcab7ca0a46b61e04..debcfd544686a6f2de9818ecba92ac36fb231263 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostItem.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostItem.java @@ -9,7 +9,9 @@ import org.briarproject.api.identity.Author.Status; import org.briarproject.api.sync.GroupId; import org.briarproject.api.sync.MessageId; -// This class is not thread-safe +import javax.annotation.concurrent.NotThreadSafe; + +@NotThreadSafe public class BlogPostItem implements Comparable<BlogPostItem> { private final BlogPostHeader header; diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java index 7c63d5c7d84a6ced24217e2a310ae8ff4eb49954..c960545cb9c53304bd5241450de0aec715ebc82b 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostPagerFragment.java @@ -1,20 +1,28 @@ 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 { - public final static String TAG = BlogPostPagerFragment.class.getName(); + private static final String TAG = BlogPostPagerFragment.class.getName(); @Inject BlogController blogController; @@ -32,7 +40,7 @@ public class BlogPostPagerFragment extends BasePostPagerFragment { @Override public void injectFragment(ActivityComponent component) { component.inject(this); - blogController.setOnBlogPostAddedListener(this); + blogController.setBlogListener(this); } @Override @@ -40,6 +48,10 @@ public class BlogPostPagerFragment extends BasePostPagerFragment { return TAG; } + @Override + Fragment createFragment(final GroupId g, final MessageId m) { + return BlogPostFragment.newInstance(m); + } @Override void loadBlogPosts(final MessageId select) { @@ -53,7 +65,8 @@ public class BlogPostPagerFragment extends BasePostPagerFragment { @Override public void onExceptionUi(DbException exception) { - onBlogPostsLoadedException(exception); + // TODO: Decide how to handle errors in the UI + finish(); } }); } @@ -65,7 +78,7 @@ public class BlogPostPagerFragment extends BasePostPagerFragment { this) { @Override public void onResultUi(BlogPostItem post) { - addPost(post); + onBlogPostLoaded(post); } @Override @@ -75,4 +88,9 @@ public class BlogPostPagerFragment extends BasePostPagerFragment { } }); } + + @Override + public void onBlogRemoved() { + finish(); + } } diff --git a/briar-android/src/org/briarproject/android/blogs/FeedController.java b/briar-android/src/org/briarproject/android/blogs/FeedController.java index 90015b066f6a17f9a79dc76c1d8dd66e6fc04cde..76ab1baa23bf0e351f2fac7997b7c9c9ead97f34 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedController.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedController.java @@ -1,8 +1,11 @@ package org.briarproject.android.blogs; +import android.support.annotation.UiThread; + import org.briarproject.android.controller.handler.ResultExceptionHandler; import org.briarproject.api.blogs.Blog; import org.briarproject.api.db.DbException; +import org.briarproject.api.nullsafety.NotNullByDefault; import java.util.Collection; @@ -13,4 +16,12 @@ public interface FeedController extends BaseController { void loadPersonalBlog(ResultExceptionHandler<Blog, DbException> handler); + void setFeedListener(FeedListener listener); + + @NotNullByDefault + interface FeedListener extends BlogListener { + + @UiThread + void onBlogAdded(); + } } diff --git a/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java b/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java index 33cce78e29c60a2b1357dd58c74baa1df3cce36d..f96bd2162bb889a87c793c23c131025781b09523 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java @@ -11,6 +11,7 @@ import org.briarproject.api.db.NoSuchMessageException; import org.briarproject.api.event.BlogPostAddedEvent; import org.briarproject.api.event.Event; import org.briarproject.api.event.EventBus; +import org.briarproject.api.event.GroupAddedEvent; import org.briarproject.api.event.GroupRemovedEvent; import org.briarproject.api.identity.Author; import org.briarproject.api.identity.IdentityManager; @@ -33,6 +34,8 @@ public class FeedControllerImpl extends BaseControllerImpl private static final Logger LOG = Logger.getLogger(FeedControllerImpl.class.getName()); + private volatile FeedListener listener; + @Inject FeedControllerImpl(@DatabaseExecutor Executor dbExecutor, LifecycleManager lifecycleManager, EventBus eventBus, @@ -45,6 +48,7 @@ public class FeedControllerImpl extends BaseControllerImpl @Override public void onStart() { super.onStart(); + if (listener == null) throw new IllegalStateException(); notificationManager.blockAllBlogPostNotifications(); notificationManager.clearAllBlogPostNotifications(); } @@ -55,12 +59,24 @@ public class FeedControllerImpl extends BaseControllerImpl notificationManager.unblockAllBlogPostNotifications(); } + @Override + public void setFeedListener(FeedListener listener) { + super.setBlogListener(listener); + this.listener = listener; + } + @Override public void eventOccurred(Event e) { if (e instanceof BlogPostAddedEvent) { BlogPostAddedEvent b = (BlogPostAddedEvent) e; LOG.info("Blog post added"); onBlogPostAdded(b.getHeader(), b.isLocal()); + } else if (e instanceof GroupAddedEvent) { + GroupAddedEvent g = (GroupAddedEvent) e; + if (g.getGroup().getClientId().equals(CLIENT_ID)) { + LOG.info("Blog added"); + onBlogAdded(); + } } else if (e instanceof GroupRemovedEvent) { GroupRemovedEvent g = (GroupRemovedEvent) e; if (g.getGroup().getClientId().equals(CLIENT_ID)) { @@ -70,6 +86,15 @@ public class FeedControllerImpl extends BaseControllerImpl } } + private void onBlogAdded() { + listener.runOnUiThreadUnlessDestroyed(new Runnable() { + @Override + public void run() { + listener.onBlogAdded(); + } + }); + } + @Override public void loadBlogPosts( final ResultExceptionHandler<Collection<BlogPostItem>, DbException> handler) { diff --git a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java index 60d8ed7c3ec21827da5ad541edb918d0db8bdc57..d3bfd765a2659005b18db3d03168ad03ddf237a4 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java @@ -3,6 +3,7 @@ package org.briarproject.android.blogs; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.annotation.UiThread; import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.content.ContextCompat; @@ -17,14 +18,16 @@ import android.view.ViewGroup; import org.briarproject.R; import org.briarproject.android.ActivityComponent; -import org.briarproject.android.blogs.BaseController.OnBlogPostAddedListener; import org.briarproject.android.blogs.BlogPostAdapter.OnBlogPostClickListener; +import org.briarproject.android.blogs.FeedController.FeedListener; import org.briarproject.android.controller.handler.UiResultExceptionHandler; import org.briarproject.android.fragment.BaseFragment; import org.briarproject.android.view.BriarRecyclerView; import org.briarproject.api.blogs.Blog; 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 java.util.Collection; import java.util.logging.Logger; @@ -37,8 +40,11 @@ import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation; import static org.briarproject.android.BriarActivity.GROUP_ID; import static org.briarproject.android.blogs.BlogActivity.REQUEST_WRITE_POST; +@UiThread +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class FeedFragment extends BaseFragment implements - OnBlogPostClickListener, OnBlogPostAddedListener { + OnBlogPostClickListener, FeedListener { public final static String TAG = FeedFragment.class.getName(); private static final Logger LOG = Logger.getLogger(TAG); @@ -62,8 +68,9 @@ public class FeedFragment extends BaseFragment implements @Nullable @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_blog, container, false); @@ -81,7 +88,7 @@ public class FeedFragment extends BaseFragment implements @Override public void injectFragment(ActivityComponent component) { component.inject(this); - feedController.setOnBlogPostAddedListener(this); + feedController.setFeedListener(this); } @Override @@ -253,6 +260,11 @@ public class FeedFragment extends BaseFragment implements s.show(); } + @Override + public void onBlogAdded() { + loadBlogPosts(false); + } + @Override public void onBlogRemoved() { loadBlogPosts(true); diff --git a/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java index 002f69586d875c18c32c08aa584a464bab305a1c..294738a1cee61e1e000179177b958045c3d1c5df 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedPostFragment.java @@ -2,6 +2,7 @@ package org.briarproject.android.blogs; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.annotation.UiThread; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,6 +10,8 @@ import android.view.ViewGroup; import org.briarproject.android.ActivityComponent; import org.briarproject.android.controller.handler.UiResultExceptionHandler; 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; @@ -17,6 +20,9 @@ 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(); @@ -40,8 +46,9 @@ public class FeedPostFragment extends BasePostFragment { @Nullable @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { Bundle args = getArguments(); byte[] b = args.getByteArray(GROUP_ID); diff --git a/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java index 5dc75709dca8d62c50328fc8995e0ca1bb63750d..b8fbd8898896fdb27ee7a0ee741822979d1868e5 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedPostPagerFragment.java @@ -1,20 +1,30 @@ 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; -public class FeedPostPagerFragment extends BasePostPagerFragment { +@UiThread +@MethodsNotNullByDefault +@ParametersNotNullByDefault +public class FeedPostPagerFragment extends BasePostPagerFragment + implements FeedListener { - public final static String TAG = FeedPostPagerFragment.class.getName(); + private static final String TAG = FeedPostPagerFragment.class.getName(); @Inject FeedController feedController; @@ -32,7 +42,7 @@ public class FeedPostPagerFragment extends BasePostPagerFragment { @Override public void injectFragment(ActivityComponent component) { component.inject(this); - feedController.setOnBlogPostAddedListener(this); + feedController.setFeedListener(this); } @Override @@ -52,6 +62,11 @@ public class FeedPostPagerFragment extends BasePostPagerFragment { feedController.onStop(); } + @Override + Fragment createFragment(GroupId g, MessageId m) { + return FeedPostFragment.newInstance(g, m); + } + @Override void loadBlogPosts(final MessageId select) { feedController.loadBlogPosts( @@ -64,7 +79,7 @@ public class FeedPostPagerFragment extends BasePostPagerFragment { @Override public void onExceptionUi(DbException exception) { - onBlogPostsLoadedException(exception); + // TODO: Decide how to handle errors in the UI } }); } @@ -76,14 +91,23 @@ public class FeedPostPagerFragment extends BasePostPagerFragment { this) { @Override public void onResultUi(BlogPostItem post) { - addPost(post); + onBlogPostLoaded(post); } @Override public void onExceptionUi(DbException exception) { // TODO: Decide how to handle errors in the UI - finish(); } }); } + + @Override + public void onBlogAdded() { + loadBlogPosts(); + } + + @Override + public void onBlogRemoved() { + loadBlogPosts(); + } }