From cb647409169995b82a29ff9b404719a4c02cfa6f Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Tue, 6 Sep 2016 14:09:17 -0300
Subject: [PATCH] Set blog title when opening blog

Fixes #634
---
 .../android/blogs/BlogController.java         |  4 +-
 .../android/blogs/BlogControllerImpl.java     | 31 +++++---------
 .../android/blogs/BlogFragment.java           | 40 ++++++++-----------
 .../{BlogListItem.java => BlogItem.java}      | 12 ++++--
 .../android/blogs/BlogListAdapter.java        | 26 ++++++------
 5 files changed, 49 insertions(+), 64 deletions(-)
 rename briar-android/src/org/briarproject/android/blogs/{BlogListItem.java => BlogItem.java} (82%)

diff --git a/briar-android/src/org/briarproject/android/blogs/BlogController.java b/briar-android/src/org/briarproject/android/blogs/BlogController.java
index 768d29c14c..4d5c35cbc2 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogController.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogController.java
@@ -21,9 +21,7 @@ public interface BlogController extends BaseController {
 	void loadBlogPost(MessageId m,
 			ResultExceptionHandler<BlogPostItem, DbException> handler);
 
-	void isMyBlog(ResultExceptionHandler<Boolean, DbException> handler);
-
-	void canDeleteBlog(ResultExceptionHandler<Boolean, DbException> handler);
+	void loadBlog(ResultExceptionHandler<BlogItem, DbException> handler);
 
 	void deleteBlog(ResultExceptionHandler<Void, DbException> handler);
 
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java b/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
index d70779e34e..55615009f6 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogControllerImpl.java
@@ -3,6 +3,7 @@ package org.briarproject.android.blogs;
 import org.briarproject.android.controller.ActivityLifecycleController;
 import org.briarproject.android.controller.handler.ResultExceptionHandler;
 import org.briarproject.api.blogs.Blog;
+import org.briarproject.api.blogs.BlogPostHeader;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.event.BlogPostAddedEvent;
 import org.briarproject.api.event.Event;
@@ -13,6 +14,7 @@ import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.MessageId;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.logging.Logger;
 
 import javax.inject.Inject;
@@ -102,8 +104,8 @@ public class BlogControllerImpl extends BaseControllerImpl
 	}
 
 	@Override
-	public void isMyBlog(
-			final ResultExceptionHandler<Boolean, DbException> handler) {
+	public void loadBlog(
+			final ResultExceptionHandler<BlogItem, DbException> handler) {
 		if (groupId == null) throw new IllegalStateException();
 		runOnDbThread(new Runnable() {
 			@Override
@@ -111,7 +113,12 @@ public class BlogControllerImpl extends BaseControllerImpl
 				try {
 					LocalAuthor a = identityManager.getLocalAuthor();
 					Blog b = blogManager.getBlog(groupId);
-					handler.onResult(b.getAuthor().getId().equals(a.getId()));
+					boolean ours = a.getId().equals(b.getAuthor().getId());
+					boolean removable = blogManager.canBeRemoved(groupId);
+					BlogItem blog = new BlogItem(b,
+							Collections.<BlogPostHeader>emptyList(),
+							ours, removable);
+					handler.onResult(blog);
 				} catch (DbException e) {
 					if (LOG.isLoggable(WARNING))
 						LOG.log(WARNING, e.toString(), e);
@@ -122,24 +129,6 @@ public class BlogControllerImpl extends BaseControllerImpl
 
 	}
 
-	@Override
-	public void canDeleteBlog(
-			final ResultExceptionHandler<Boolean, DbException> handler) {
-		if (groupId == null) throw new IllegalStateException();
-		runOnDbThread(new Runnable() {
-			@Override
-			public void run() {
-				try {
-					handler.onResult(blogManager.canBeRemoved(groupId));
-				} catch (DbException e) {
-					if (LOG.isLoggable(WARNING))
-						LOG.log(WARNING, e.toString(), e);
-					handler.onException(e);
-				}
-			}
-		});
-	}
-
 	@Override
 	public void deleteBlog(
 			final ResultExceptionHandler<Void, DbException> handler) {
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java
index 0d9a0fe985..5c175517de 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogFragment.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogFragment.java
@@ -28,6 +28,7 @@ import org.briarproject.android.sharing.SharingStatusBlogActivity;
 import org.briarproject.android.util.BriarRecyclerView;
 import org.briarproject.api.blogs.BlogPostHeader;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.Author;
 import org.briarproject.api.sync.GroupId;
 
 import java.util.Collection;
@@ -121,8 +122,7 @@ public class BlogFragment extends BaseFragment implements
 	@Override
 	public void onStart() {
 		super.onStart();
-		checkIfThisIsMyBlog();
-		checkIfBlogCanBeDeleted();
+		loadBlog();
 	}
 
 	@Override
@@ -252,15 +252,17 @@ public class BlogFragment extends BaseFragment implements
 				});
 	}
 
-	private void checkIfThisIsMyBlog() {
-		blogController.isMyBlog(
-				new UiResultExceptionHandler<Boolean, DbException>(
+	private void loadBlog() {
+		blogController.loadBlog(
+				new UiResultExceptionHandler<BlogItem, DbException>(
 						getActivity()) {
 					@Override
-					public void onResultUi(Boolean isMyBlog) {
-						if (isMyBlog) {
+					public void onResultUi(BlogItem blog) {
+						setToolbarTitle(blog.getBlog().getAuthor());
+						if (blog.isOurs())
 							showWriteButton();
-						}
+						if (blog.canBeRemoved())
+							showDeleteButton();
 					}
 
 					@Override
@@ -271,23 +273,13 @@ public class BlogFragment extends BaseFragment implements
 				});
 	}
 
-	private void checkIfBlogCanBeDeleted() {
-		blogController.canDeleteBlog(
-				new UiResultExceptionHandler<Boolean, DbException>(
-						getActivity()) {
-					@Override
-					public void onResultUi(Boolean canBeDeleted) {
-						if (canBeDeleted) {
-							showDeleteButton();
-						}
-					}
+	private void setToolbarTitle(Author a) {
+		String title = getString(R.string.blogs_personal_blog, a.getName());
+		getActivity().setTitle(title);
 
-					@Override
-					public void onExceptionUi(DbException exception) {
-						// TODO: Decide how to handle errors in the UI
-						finish();
-					}
-				});
+		// safe title in intent, so it can be restored automatically
+		Intent intent = getActivity().getIntent();
+		intent.putExtra(BLOG_NAME, title);
 	}
 
 	private void showWriteButton() {
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogListItem.java b/briar-android/src/org/briarproject/android/blogs/BlogItem.java
similarity index 82%
rename from briar-android/src/org/briarproject/android/blogs/BlogListItem.java
rename to briar-android/src/org/briarproject/android/blogs/BlogItem.java
index 35c9f532be..536d05f241 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogListItem.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogItem.java
@@ -5,15 +5,16 @@ import org.briarproject.api.blogs.BlogPostHeader;
 
 import java.util.Collection;
 
-class BlogListItem {
+class BlogItem {
 
 	private final Blog blog;
 	private final int postCount;
 	private final long timestamp;
 	private final int unread;
-	private final boolean ours;
+	private final boolean ours, removable;
 
-	BlogListItem(Blog blog, Collection<BlogPostHeader> headers, boolean ours) {
+	BlogItem(Blog blog, Collection<BlogPostHeader> headers, boolean ours,
+			boolean removable) {
 		this.blog = blog;
 		if (headers.isEmpty()) {
 			postCount = 0;
@@ -35,6 +36,7 @@ class BlogListItem {
 			this.unread = unread;
 		}
 		this.ours = ours;
+		this.removable = removable;
 	}
 
 	Blog getBlog() {
@@ -64,4 +66,8 @@ class BlogListItem {
 	boolean isOurs() {
 		return ours;
 	}
+
+	boolean canBeRemoved() {
+		return removable;
+	}
 }
diff --git a/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java b/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java
index 37f7dd3016..b3e55f8482 100644
--- a/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java
+++ b/briar-android/src/org/briarproject/android/blogs/BlogListAdapter.java
@@ -29,11 +29,11 @@ import static org.briarproject.android.blogs.BlogActivity.BLOG_NAME;
 class BlogListAdapter extends
 		RecyclerView.Adapter<BlogListAdapter.BlogViewHolder> {
 
-	private SortedList<BlogListItem> blogs = new SortedList<>(
-			BlogListItem.class, new SortedList.Callback<BlogListItem>() {
+	private SortedList<BlogItem> blogs = new SortedList<>(
+			BlogItem.class, new SortedList.Callback<BlogItem>() {
 
 		@Override
-		public int compare(BlogListItem a, BlogListItem b) {
+		public int compare(BlogItem a, BlogItem b) {
 			if (a == b) return 0;
 			// The blog with the newest message comes first
 			long aTime = a.getTimestamp(), bTime = b.getTimestamp();
@@ -66,14 +66,14 @@ class BlogListAdapter extends
 		}
 
 		@Override
-		public boolean areContentsTheSame(BlogListItem a, BlogListItem b) {
+		public boolean areContentsTheSame(BlogItem a, BlogItem b) {
 			return a.getBlog().equals(b.getBlog()) &&
 					a.getTimestamp() == b.getTimestamp() &&
 					a.getUnreadCount() == b.getUnreadCount();
 		}
 
 		@Override
-		public boolean areItemsTheSame(BlogListItem a, BlogListItem b) {
+		public boolean areItemsTheSame(BlogItem a, BlogItem b) {
 			return a.getBlog().equals(b.getBlog());
 		}
 	});
@@ -93,7 +93,7 @@ class BlogListAdapter extends
 
 	@Override
 	public void onBindViewHolder(BlogViewHolder ui, int position) {
-		final BlogListItem item = getItem(position);
+		final BlogItem item = getItem(position);
 
 		// Avatar
 		ui.avatar.setText(item.getName().substring(0, 1));
@@ -145,14 +145,14 @@ class BlogListAdapter extends
 		return blogs.size();
 	}
 
-	public BlogListItem getItem(int position) {
+	public BlogItem getItem(int position) {
 		return blogs.get(position);
 	}
 
 	@Nullable
-	public BlogListItem getItem(GroupId g) {
+	public BlogItem getItem(GroupId g) {
 		for (int i = 0; i < blogs.size(); i++) {
-			BlogListItem item = blogs.get(i);
+			BlogItem item = blogs.get(i);
 			if (item.getBlog().getGroup().getId().equals(g)) {
 				return item;
 			}
@@ -160,17 +160,17 @@ class BlogListAdapter extends
 		return null;
 	}
 
-	public void addAll(Collection<BlogListItem> items) {
+	public void addAll(Collection<BlogItem> items) {
 		blogs.addAll(items);
 	}
 
-	void updateItem(BlogListItem item) {
-		BlogListItem oldItem = getItem(item.getBlog().getGroup().getId());
+	void updateItem(BlogItem item) {
+		BlogItem oldItem = getItem(item.getBlog().getGroup().getId());
 		int position = blogs.indexOf(oldItem);
 		blogs.updateItemAt(position, item);
 	}
 
-	public void remove(BlogListItem item) {
+	public void remove(BlogItem item) {
 		blogs.remove(item);
 	}
 
-- 
GitLab