diff --git a/briar-android/src/org/briarproject/android/blogs/BlogController.java b/briar-android/src/org/briarproject/android/blogs/BlogController.java index 768d29c14cb059bebe4618c93fa7c1c6156ae03e..4d5c35cbc2d3efc3572cadd6c19983376e671e9b 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 d70779e34ea17b04f149c318601f736fe6a3597e..55615009f60918b2dc099440f63fca873c48ef4e 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 0d9a0fe985b34399ef353f490bdd29aaade466b5..5c175517de0e95e0f9ef8960a3727d10c4549910 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 35c9f532be2a239fecd798a629955afb7d548a95..536d05f241f305b9043441521aed197fd464fce0 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 37f7dd30167d58160b40b35aa53922ea4543b219..b3e55f8482f2c812d82ea76fd228bd0cb294bbfa 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); }