diff --git a/briar-android/res/menu/blogs_my_blog_actions.xml b/briar-android/res/menu/blogs_my_blog_actions.xml index 95cb880e767e1eb826d1df231d74cb0ec25800c0..5c9052edb01da64626f8a04b6e59f8728a37bf1f 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"/> - <item - android:id="@+id/action_delete_blog" - android:icon="@drawable/action_delete_white" - android:title="@string/blogs_delete_blog" - app:showAsAction="never"/> - </menu> \ No newline at end of file diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index 2d1daa679e2247e314eb04cf4b1bd63caf8f2e9f..3c2084bd75417d0e4430f7b66ffd736ca6763b9a 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -278,6 +278,7 @@ <string name="blogs_blog_failed_to_load">Blog failed to load</string> <string name="blogs_blog_post_failed_to_load">Blog Post failed to load</string> <string name="blogs_feed_empty_state">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.</string> + <string name="blogs_personal_blog">%s\'s Personal Blog</string> <string name="blogs_delete_blog">Delete Blog</string> <string name="blogs_delete_blog_dialog_message">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.</string> <string name="blogs_delete_blog_ok">Delete Blog</string> diff --git a/briar-android/src/org/briarproject/android/blogs/BlogActivity.java b/briar-android/src/org/briarproject/android/blogs/BlogActivity.java index cf38dce1ee91a1d1580da67319585883f2be5f59..ceb80f61ad8a5225e2efdebd13ccf44ee8d282a9 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 f34e63469e100c88d33d796faa766681d46b9444..0ec355d70be0d64088baaf0d7c799ffbfc68fce5 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 7ee529ca3c8ae9a35e36b8145b9a6552f0b75e3f..b83d39bdef9ee756751847d4987ce2b661b3d7a3 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 dbcce29651b0b7531cd841a10300f92c09bf7b62..b1b9f322e7b05772d23da45cb42b09229b310232 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 cdb9c15ef7950a1437944d60ceada841efbe0432..10a76b511f92cad3231ef2894af33a4e8c6f7d21 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<BlogPostItem> { + 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<BlogPostItem> { 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 1cc49a3e1206224ab28903811efd698fffa75f86..98ed5862629217687ed62880168f692e60c6eab3 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 f875dd5c2c1e9c081b06bec03a7e71c1c0f6a967..0f4fada2342802e9931f677cc574e1f64756e9d5 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