From bca12bb0e5768e771e9d557d802c8caf6644dde8 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 28 Jul 2016 16:53:25 -0300 Subject: [PATCH] Show Personal Blog When Clicking On Post in Combined Blog Feed Closes #415 --- .../res/menu/blogs_my_blog_actions.xml | 6 ---- briar-android/res/values/strings.xml | 1 + .../android/blogs/BlogActivity.java | 2 +- .../android/blogs/BlogControllerImpl.java | 8 ++--- .../android/blogs/BlogFragment.java | 3 -- .../android/blogs/BlogPostAdapter.java | 4 +-- .../android/blogs/BlogPostItem.java | 9 ++++- .../android/blogs/FeedControllerImpl.java | 33 ++++++++++++------- .../android/blogs/FeedFragment.java | 19 +++++++++-- 9 files changed, 55 insertions(+), 30 deletions(-) diff --git a/briar-android/res/menu/blogs_my_blog_actions.xml b/briar-android/res/menu/blogs_my_blog_actions.xml index 95cb880e7..5c9052edb 100644 --- a/briar-android/res/menu/blogs_my_blog_actions.xml +++ b/briar-android/res/menu/blogs_my_blog_actions.xml @@ -9,10 +9,4 @@ android:title="@string/blogs_write_blog_post" app:showAsAction="ifRoom"/> - - \ No newline at end of file diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index 2d1daa679..3c2084bd7 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -278,6 +278,7 @@ Blog failed to load Blog Post failed to load This is the global blog feed.\n\nIt looks like nobody blogged anything, yet.\n\nBe the first and tap the pen icon to write a new blog post. + %s\'s Personal Blog Delete Blog Are you sure that you want to delete this Blog and all posts?\nNote that this will not delete the blog from other people\'s devices. Delete Blog diff --git a/briar-android/src/org/briarproject/android/blogs/BlogActivity.java b/briar-android/src/org/briarproject/android/blogs/BlogActivity.java index cf38dce1e..ceb80f61a 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogActivity.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogActivity.java @@ -126,7 +126,7 @@ public class BlogActivity extends BriarActivity implements BlogPostListener, } @Override - public void onBlogPostClick(final int position) { + public void onBlogPostClick(int position, BlogPostItem post) { loadBlogPosts(position, true); } diff --git a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java b/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java index f34e63469..0ec355d70 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java @@ -78,7 +78,7 @@ public class BlogControllerImpl extends DbControllerImpl @Override public void eventOccurred(Event e) { if (e instanceof BlogPostAddedEvent) { - final BlogPostAddedEvent m = (BlogPostAddedEvent) e; + BlogPostAddedEvent m = (BlogPostAddedEvent) e; if (m.getGroupId().equals(groupId)) { LOG.info("New blog post added"); if (posts == null) { @@ -89,8 +89,8 @@ public class BlogControllerImpl extends DbControllerImpl final BlogPostHeader header = m.getHeader(); // FIXME: Don't make blocking calls in event handlers try { - final byte[] body = blogManager.getPostBody(header.getId()); - final BlogPostItem post = new BlogPostItem(header, body); + byte[] body = blogManager.getPostBody(header.getId()); + BlogPostItem post = new BlogPostItem(groupId, header, body); posts.add(post); listener.onBlogPostAdded(post, m.isLocal()); } catch (DbException ex) { @@ -130,7 +130,7 @@ public class BlogControllerImpl extends DbControllerImpl blogManager.getPostHeaders(g); for (BlogPostHeader h : header) { byte[] body = blogManager.getPostBody(h.getId()); - newPosts.add(new BlogPostItem(h, body)); + newPosts.add(new BlogPostItem(g, h, body)); } posts.addAll(newPosts); long duration = System.currentTimeMillis() - now; diff --git a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java index 7ee529ca3..b83d39bde 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java @@ -146,9 +146,6 @@ public class BlogFragment extends BaseFragment implements BlogPostListener { ActivityCompat.startActivityForResult(getActivity(), i, REQUEST_WRITE_POST, options.toBundle()); return true; - case R.id.action_delete_blog: - showDeleteDialog(); - return true; default: return super.onOptionsItemSelected(item); } diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java b/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java index dbcce2965..b1b9f322e 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostAdapter.java @@ -97,7 +97,7 @@ class BlogPostAdapter extends ui.layout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - listener.onBlogPostClick(ui.getAdapterPosition()); + listener.onBlogPostClick(ui.getAdapterPosition(), post); } }); } @@ -160,7 +160,7 @@ class BlogPostAdapter extends } interface OnBlogPostClickListener { - void onBlogPostClick(int position); + void onBlogPostClick(int position, BlogPostItem post); } } diff --git a/briar-android/src/org/briarproject/android/blogs/BlogPostItem.java b/briar-android/src/org/briarproject/android/blogs/BlogPostItem.java index cdb9c15ef..10a76b511 100644 --- a/briar-android/src/org/briarproject/android/blogs/BlogPostItem.java +++ b/briar-android/src/org/briarproject/android/blogs/BlogPostItem.java @@ -5,16 +5,19 @@ import android.support.annotation.NonNull; import org.briarproject.api.blogs.BlogPostHeader; import org.briarproject.api.identity.Author; 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 class BlogPostItem implements Comparable { + private final GroupId groupId; private final BlogPostHeader header; private final byte[] body; private boolean read; - BlogPostItem(BlogPostHeader header, byte[] body) { + BlogPostItem(GroupId groupId, BlogPostHeader header, byte[] body) { + this.groupId = groupId; this.header = header; this.body = body; read = header.isRead(); @@ -24,6 +27,10 @@ class BlogPostItem implements Comparable { return header.getId(); } + public GroupId getGroupId() { + return groupId; + } + public String getTitle() { return header.getTitle(); } diff --git a/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java b/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java index 1cc49a3e1..98ed58626 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedControllerImpl.java @@ -12,6 +12,7 @@ import org.briarproject.api.event.EventBus; import org.briarproject.api.event.EventListener; import org.briarproject.api.identity.Author; import org.briarproject.api.identity.IdentityManager; +import org.briarproject.api.sync.GroupId; import java.util.ArrayList; import java.util.Collection; @@ -57,16 +58,9 @@ public class FeedControllerImpl extends DbControllerImpl LOG.info("New blog post added"); if (listener != null) { - final BlogPostAddedEvent m = (BlogPostAddedEvent) e; - final BlogPostHeader header = m.getHeader(); - try { - final byte[] body = blogManager.getPostBody(header.getId()); - final BlogPostItem post = new BlogPostItem(header, body); - listener.onBlogPostAdded(post); - } catch (DbException ex) { - if (LOG.isLoggable(WARNING)) - LOG.log(WARNING, ex.toString(), ex); - } + BlogPostAddedEvent m = (BlogPostAddedEvent) e; + BlogPostHeader header = m.getHeader(); + addPost(m.getGroupId(), header); } } @@ -87,7 +81,7 @@ public class FeedControllerImpl extends DbControllerImpl blogManager.getPostHeaders(b.getId()); for (BlogPostHeader h : header) { byte[] body = blogManager.getPostBody(h.getId()); - posts.add(new BlogPostItem(h, body)); + posts.add(new BlogPostItem(b.getId(), h, body)); } } long duration = System.currentTimeMillis() - now; @@ -132,4 +126,21 @@ public class FeedControllerImpl extends DbControllerImpl public void setOnBlogPostAddedListener(OnBlogPostAddedListener listener) { this.listener = listener; } + + private void addPost(final GroupId groupId, final BlogPostHeader header) { + runOnDbThread(new Runnable() { + @Override + public void run() { + try { + byte[] body = blogManager.getPostBody(header.getId()); + BlogPostItem post = new BlogPostItem(groupId, header, body); + listener.onBlogPostAdded(post); + } catch (DbException ex) { + if (LOG.isLoggable(WARNING)) + LOG.log(WARNING, ex.toString(), ex); + } + } + }); + } + } diff --git a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java index f875dd5c2..0f4fada23 100644 --- a/briar-android/src/org/briarproject/android/blogs/FeedFragment.java +++ b/briar-android/src/org/briarproject/android/blogs/FeedFragment.java @@ -32,6 +32,7 @@ import static android.support.design.widget.Snackbar.LENGTH_LONG; import static android.support.v4.app.ActivityOptionsCompat.makeCustomAnimation; import static org.briarproject.android.BriarActivity.GROUP_ID; import static org.briarproject.android.blogs.BlogActivity.BLOG_NAME; +import static org.briarproject.android.blogs.BlogActivity.IS_MY_BLOG; import static org.briarproject.android.blogs.BlogActivity.REQUEST_WRITE_POST; public class FeedFragment extends BaseFragment implements @@ -168,8 +169,22 @@ public class FeedFragment extends BaseFragment implements } @Override - public void onBlogPostClick(int position) { - // noop + public void onBlogPostClick(int position, BlogPostItem post) { + byte[] groupId = post.getGroupId().getBytes(); + String name = getString(R.string.blogs_personal_blog, + post.getAuthor().getName()); + boolean myBlog = personalBlog != null && + personalBlog.getId().equals(post.getGroupId()); + + Intent i = new Intent(getActivity(), BlogActivity.class); + i.putExtra(GROUP_ID, groupId); + i.putExtra(BLOG_NAME, name); + i.putExtra(IS_MY_BLOG, myBlog); + ActivityOptionsCompat options = + makeCustomAnimation(getActivity(), + android.R.anim.slide_in_left, + android.R.anim.slide_out_right); + startActivity(i, options.toBundle()); } @Override