From bca12bb0e5768e771e9d557d802c8caf6644dde8 Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
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 95cb880e76..5c9052edb0 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 2d1daa679e..3c2084bd75 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 cf38dce1ee..ceb80f61ad 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 f34e63469e..0ec355d70b 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 7ee529ca3c..b83d39bdef 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 dbcce29651..b1b9f322e7 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 cdb9c15ef7..10a76b511f 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 1cc49a3e12..98ed586262 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 f875dd5c2c..0f4fada234 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
-- 
GitLab