Address review comments

This commit is contained in:
Torsten Grote
2017-04-12 09:30:08 -03:00
parent 9bfb58a764
commit 4b955809f7
13 changed files with 60 additions and 43 deletions

View File

@@ -13,7 +13,9 @@ import javax.annotation.concurrent.Immutable;
@NotNullByDefault @NotNullByDefault
public class Author { public class Author {
public enum Status {ANONYMOUS, UNKNOWN, UNVERIFIED, VERIFIED, OURSELVES} public enum Status {
NONE, ANONYMOUS, UNKNOWN, UNVERIFIED, VERIFIED, OURSELVES
}
private final AuthorId id; private final AuthorId id;
private final String name; private final String name;

View File

@@ -169,7 +169,7 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder {
reblogger.setVisibility(VISIBLE); reblogger.setVisibility(VISIBLE);
reblogger.setPersona(AuthorView.REBLOGGER); reblogger.setPersona(AuthorView.REBLOGGER);
author.setPersona(item.getHeader().getParent().isRssFeed() ? author.setPersona(item.getHeader().getRootPost().isRssFeed() ?
AuthorView.RSS_FEED_REBLOGGED : AuthorView.RSS_FEED_REBLOGGED :
AuthorView.COMMENTER); AuthorView.COMMENTER);

View File

@@ -39,12 +39,7 @@ class RssFeedAdapter extends BriarAdapter<Feed, RssFeedAdapter.FeedViewHolder> {
if (item == null) return; if (item == null) return;
// Feed Title // Feed Title
if (item.getTitle() != null) { ui.title.setText(item.getTitle());
ui.title.setText(item.getTitle());
ui.title.setVisibility(VISIBLE);
} else {
ui.title.setVisibility(GONE);
}
// Delete Button // Delete Button
ui.delete.setOnClickListener(new OnClickListener() { ui.delete.setOnClickListener(new OnClickListener() {

View File

@@ -30,6 +30,7 @@ import static android.content.Context.LAYOUT_INFLATER_SERVICE;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
import static android.graphics.Typeface.BOLD; import static android.graphics.Typeface.BOLD;
import static android.util.TypedValue.COMPLEX_UNIT_PX; import static android.util.TypedValue.COMPLEX_UNIT_PX;
import static org.briarproject.bramble.api.identity.Author.Status.NONE;
import static org.briarproject.bramble.api.identity.Author.Status.OURSELVES; import static org.briarproject.bramble.api.identity.Author.Status.OURSELVES;
import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID; import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
@@ -85,7 +86,13 @@ public class AuthorView extends RelativeLayout {
} }
public void setAuthorStatus(Status status) { public void setAuthorStatus(Status status) {
trustIndicator.setTrustLevel(status); if (status != NONE) {
trustIndicator.setTrustLevel(status);
trustIndicator.setVisibility(VISIBLE);
} else {
trustIndicator.setVisibility(GONE);
}
if (status == OURSELVES) { if (status == OURSELVES) {
authorName.setTypeface(authorNameTypeface, BOLD); authorName.setTypeface(authorNameTypeface, BOLD);
} else { } else {
@@ -129,8 +136,9 @@ public class AuthorView extends RelativeLayout {
/** /**
* Styles this view for a different persona. * Styles this view for a different persona.
* *
* Attention: If used in a RecyclerView with RSS_FEED, * Attention: RSS_FEED and RSS_FEED_REBLOGGED change the avatar
* call this after setAuthor() * and override the one set by
* {@link AuthorView#setAuthor(Author)}.
*/ */
public void setPersona(int persona) { public void setPersona(int persona) {
switch (persona) { switch (persona) {

View File

@@ -305,7 +305,7 @@
<string name="blogs_rss_feeds_manage_author">Author:</string> <string name="blogs_rss_feeds_manage_author">Author:</string>
<string name="blogs_rss_feeds_manage_updated">Last Updated:</string> <string name="blogs_rss_feeds_manage_updated">Last Updated:</string>
<string name="blogs_rss_remove_feed">Remove Feed</string> <string name="blogs_rss_remove_feed">Remove Feed</string>
<string name="blogs_rss_remove_feed_dialog_message">Are you sure that you want to remove this feed and all its posts?\nNote that this will not remove the feed\'s blog from other people\'s devices.</string> <string name="blogs_rss_remove_feed_dialog_message">Are you sure you want to remove this feed and all its posts?\nAny posts you have shared will not be removed from other people\'s devices.</string>
<string name="blogs_rss_remove_feed_ok">Remove Feed</string> <string name="blogs_rss_remove_feed_ok">Remove Feed</string>
<string name="blogs_rss_feeds_manage_delete_error">The feed could not be deleted!</string> <string name="blogs_rss_feeds_manage_delete_error">The feed could not be deleted!</string>
<string name="blogs_rss_feeds_manage_empty_state">You haven\'t imported any RSS feeds.\n\nWhy don\'t you click the plus in the top right screen corner to add your first?</string> <string name="blogs_rss_feeds_manage_empty_state">You haven\'t imported any RSS feeds.\n\nWhy don\'t you click the plus in the top right screen corner to add your first?</string>

View File

@@ -41,8 +41,12 @@ public class BlogCommentHeader extends BlogPostHeader {
} }
public BlogPostHeader getParent() { public BlogPostHeader getParent() {
return parent;
}
public BlogPostHeader getRootPost() {
if (parent instanceof BlogCommentHeader) if (parent instanceof BlogCommentHeader)
return ((BlogCommentHeader) parent).getParent(); return ((BlogCommentHeader) parent).getRootPost();
return parent; return parent;
} }

View File

@@ -16,18 +16,16 @@ public class Feed {
private final Blog blog; private final Blog blog;
private final LocalAuthor localAuthor; private final LocalAuthor localAuthor;
@Nullable @Nullable
private final String title, description, author; private final String description, author;
private final long added, updated, lastEntryTime; private final long added, updated, lastEntryTime;
public Feed(String url, Blog blog, LocalAuthor localAuthor, public Feed(String url, Blog blog, LocalAuthor localAuthor,
@Nullable String title, @Nullable String description, @Nullable String description, @Nullable String author, long added,
@Nullable String author, long added, long updated, long updated, long lastEntryTime) {
long lastEntryTime) {
this.url = url; this.url = url;
this.blog = blog; this.blog = blog;
this.localAuthor = localAuthor; this.localAuthor = localAuthor;
this.title = title;
this.description = description; this.description = description;
this.author = author; this.author = author;
this.added = added; this.added = added;
@@ -36,13 +34,12 @@ public class Feed {
} }
public Feed(String url, Blog blog, LocalAuthor localAuthor, public Feed(String url, Blog blog, LocalAuthor localAuthor,
@Nullable String title, @Nullable String description, @Nullable String description, @Nullable String author, long added) {
@Nullable String author, long added) { this(url, blog, localAuthor, description, author, added, 0L, 0L);
this(url, blog, localAuthor, title, description, author, added, 0L, 0L);
} }
public Feed(String url, Blog blog, LocalAuthor localAuthor, long added) { public Feed(String url, Blog blog, LocalAuthor localAuthor, long added) {
this(url, blog, localAuthor, null, null, null, added, 0L, 0L); this(url, blog, localAuthor, null, null, added, 0L, 0L);
} }
public String getUrl() { public String getUrl() {
@@ -61,9 +58,8 @@ public class Feed {
return localAuthor; return localAuthor;
} }
@Nullable
public String getTitle() { public String getTitle() {
return title; return blog.getName();
} }
@Nullable @Nullable

View File

@@ -21,7 +21,6 @@ public interface FeedConstants {
String KEY_BLOG_TITLE = "blogTitle"; String KEY_BLOG_TITLE = "blogTitle";
String KEY_PUBLIC_KEY = "publicKey"; String KEY_PUBLIC_KEY = "publicKey";
String KEY_PRIVATE_KEY = "privateKey"; String KEY_PRIVATE_KEY = "privateKey";
String KEY_FEED_TITLE = "feedTitle";
String KEY_FEED_DESC = "feedDesc"; String KEY_FEED_DESC = "feedDesc";
String KEY_FEED_AUTHOR = "feedAuthor"; String KEY_FEED_AUTHOR = "feedAuthor";
String KEY_FEED_ADDED = "feedAdded"; String KEY_FEED_ADDED = "feedAdded";

View File

@@ -14,6 +14,9 @@ import org.briarproject.briar.api.blog.BlogFactory;
import javax.annotation.concurrent.Immutable; import javax.annotation.concurrent.Immutable;
import javax.inject.Inject; import javax.inject.Inject;
import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
@Immutable @Immutable
@NotNullByDefault @NotNullByDefault
class BlogFactoryImpl implements BlogFactory { class BlogFactoryImpl implements BlogFactory {
@@ -58,13 +61,21 @@ class BlogFactoryImpl implements BlogFactory {
} }
@Override @Override
public Blog parseBlog(Group g) throws FormatException { public Blog parseBlog(Group group) throws FormatException {
byte[] descriptor = g.getDescriptor(); byte[] descriptor = group.getDescriptor();
// Author Name, Public Key // Author Name, Public Key
BdfList blog = clientHelper.toList(descriptor); BdfList blog = clientHelper.toList(descriptor);
Author a = String name = blog.getString(0);
authorFactory.createAuthor(blog.getString(0), blog.getRaw(1)); if (name.length() > MAX_AUTHOR_NAME_LENGTH)
return new Blog(g, a, blog.getBoolean(2)); throw new IllegalArgumentException();
byte[] publicKey = blog.getRaw(1);
if (publicKey.length > MAX_PUBLIC_KEY_LENGTH)
throw new IllegalArgumentException();
Author author =
authorFactory.createAuthor(name, publicKey);
boolean rssFeed = blog.getBoolean(2);
return new Blog(group, author, rssFeed);
} }
} }

View File

@@ -606,7 +606,7 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager,
boolean isFeedPost = meta.getBoolean(KEY_RSS_FEED, false); boolean isFeedPost = meta.getBoolean(KEY_RSS_FEED, false);
Status authorStatus; Status authorStatus;
if (isFeedPost) { if (isFeedPost) {
authorStatus = Status.UNKNOWN; authorStatus = Status.NONE;
} else if (authorStatuses.containsKey(authorId)) { } else if (authorStatuses.containsKey(authorId)) {
authorStatus = authorStatuses.get(authorId); authorStatus = authorStatuses.get(authorId);
} else { } else {

View File

@@ -10,18 +10,19 @@ import org.briarproject.bramble.api.data.BdfEntry;
import org.briarproject.bramble.api.identity.AuthorFactory; import org.briarproject.bramble.api.identity.AuthorFactory;
import org.briarproject.bramble.api.identity.LocalAuthor; import org.briarproject.bramble.api.identity.LocalAuthor;
import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.util.StringUtils;
import org.briarproject.briar.api.blog.Blog; import org.briarproject.briar.api.blog.Blog;
import org.briarproject.briar.api.blog.BlogFactory; import org.briarproject.briar.api.blog.BlogFactory;
import org.briarproject.briar.api.feed.Feed; import org.briarproject.briar.api.feed.Feed;
import javax.inject.Inject; import javax.inject.Inject;
import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
import static org.briarproject.briar.api.feed.FeedConstants.KEY_BLOG_TITLE; import static org.briarproject.briar.api.feed.FeedConstants.KEY_BLOG_TITLE;
import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_ADDED; import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_ADDED;
import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_AUTHOR; import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_AUTHOR;
import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_DESC; import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_DESC;
import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_LAST_ENTRY; import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_LAST_ENTRY;
import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_TITLE;
import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_UPDATED; import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_UPDATED;
import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_URL; import static org.briarproject.briar.api.feed.FeedConstants.KEY_FEED_URL;
import static org.briarproject.briar.api.feed.FeedConstants.KEY_PRIVATE_KEY; import static org.briarproject.briar.api.feed.FeedConstants.KEY_PRIVATE_KEY;
@@ -45,11 +46,13 @@ class FeedFactoryImpl implements FeedFactory {
@Override @Override
public Feed createFeed(String url, SyndFeed syndFeed) { public Feed createFeed(String url, SyndFeed syndFeed) {
if (syndFeed.getTitle() == null) syndFeed.setTitle("RSS feed"); String title = syndFeed.getTitle();
if (title == null) title = "RSS";
title = StringUtils.truncateUtf8(title, MAX_AUTHOR_NAME_LENGTH);
KeyPair keyPair = cryptoComponent.generateSignatureKeyPair(); KeyPair keyPair = cryptoComponent.generateSignatureKeyPair();
LocalAuthor localAuthor = authorFactory LocalAuthor localAuthor = authorFactory
.createLocalAuthor(syndFeed.getTitle(), .createLocalAuthor(title,
keyPair.getPublic().getEncoded(), keyPair.getPublic().getEncoded(),
keyPair.getPrivate().getEncoded()); keyPair.getPrivate().getEncoded());
Blog blog = blogFactory.createFeedBlog(localAuthor); Blog blog = blogFactory.createFeedBlog(localAuthor);
@@ -62,8 +65,8 @@ class FeedFactoryImpl implements FeedFactory {
public Feed createFeed(Feed feed, SyndFeed f, long lastEntryTime) { public Feed createFeed(Feed feed, SyndFeed f, long lastEntryTime) {
long updated = clock.currentTimeMillis(); long updated = clock.currentTimeMillis();
return new Feed(feed.getUrl(), feed.getBlog(), feed.getLocalAuthor(), return new Feed(feed.getUrl(), feed.getBlog(), feed.getLocalAuthor(),
f.getTitle(), f.getDescription(), f.getAuthor(), f.getDescription(), f.getAuthor(), feed.getAdded(), updated,
feed.getAdded(), updated, lastEntryTime); lastEntryTime);
} }
@Override @Override
@@ -77,14 +80,13 @@ class FeedFactoryImpl implements FeedFactory {
.createLocalAuthor(blogTitle, publicKey, privateKey); .createLocalAuthor(blogTitle, publicKey, privateKey);
Blog blog = blogFactory.createFeedBlog(localAuthor); Blog blog = blogFactory.createFeedBlog(localAuthor);
String title = d.getOptionalString(KEY_FEED_TITLE);
String desc = d.getOptionalString(KEY_FEED_DESC); String desc = d.getOptionalString(KEY_FEED_DESC);
String author = d.getOptionalString(KEY_FEED_AUTHOR); String author = d.getOptionalString(KEY_FEED_AUTHOR);
long added = d.getLong(KEY_FEED_ADDED, 0L); long added = d.getLong(KEY_FEED_ADDED, 0L);
long updated = d.getLong(KEY_FEED_UPDATED, 0L); long updated = d.getLong(KEY_FEED_UPDATED, 0L);
long lastEntryTime = d.getLong(KEY_FEED_LAST_ENTRY, 0L); long lastEntryTime = d.getLong(KEY_FEED_LAST_ENTRY, 0L);
return new Feed(url, blog, localAuthor, title, desc, author, added, return new Feed(url, blog, localAuthor, desc, author, added,
updated, lastEntryTime); updated, lastEntryTime);
} }
@@ -101,7 +103,6 @@ class FeedFactoryImpl implements FeedFactory {
new BdfEntry(KEY_FEED_UPDATED, feed.getUpdated()), new BdfEntry(KEY_FEED_UPDATED, feed.getUpdated()),
new BdfEntry(KEY_FEED_LAST_ENTRY, feed.getLastEntryTime()) new BdfEntry(KEY_FEED_LAST_ENTRY, feed.getLastEntryTime())
); );
if (feed.getTitle() != null) d.put(KEY_FEED_TITLE, feed.getTitle());
if (feed.getDescription() != null) if (feed.getDescription() != null)
d.put(KEY_FEED_DESC, feed.getDescription()); d.put(KEY_FEED_DESC, feed.getDescription());
if (feed.getAuthor() != null) d.put(KEY_FEED_AUTHOR, feed.getAuthor()); if (feed.getAuthor() != null) d.put(KEY_FEED_AUTHOR, feed.getAuthor());

View File

@@ -433,9 +433,8 @@ class FeedManagerImpl implements FeedManager, Client, EventListener,
// build post body // build post body
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
if (feed.getTitle() != null) { b.append("<h3>").append(feed.getTitle()).append("</h3>");
b.append("<h3>").append(feed.getTitle()).append("</h3>");
}
if (!StringUtils.isNullOrEmpty(entry.getTitle())) { if (!StringUtils.isNullOrEmpty(entry.getTitle())) {
b.append("<h1>").append(entry.getTitle()).append("</h1>"); b.append("<h1>").append(entry.getTitle()).append("</h1>");
} }

View File

@@ -1,6 +1,7 @@
package org.briarproject.briar.blog; package org.briarproject.briar.blog;
import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.db.Transaction;
import org.briarproject.bramble.api.identity.Author;
import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.MessageId;
import org.briarproject.bramble.test.TestDatabaseModule; import org.briarproject.bramble.test.TestDatabaseModule;
import org.briarproject.briar.api.blog.Blog; import org.briarproject.briar.api.blog.Blog;
@@ -417,6 +418,7 @@ public class BlogManagerIntegrationTest
assertEquals(1, headers.size()); assertEquals(1, headers.size());
BlogPostHeader header = headers.iterator().next(); BlogPostHeader header = headers.iterator().next();
assertEquals(POST, header.getType()); assertEquals(POST, header.getType());
assertEquals(Author.Status.NONE, header.getAuthorStatus());
assertTrue(header.isRssFeed()); assertTrue(header.isRssFeed());
} }
@@ -454,7 +456,7 @@ public class BlogManagerIntegrationTest
for (BlogPostHeader h: headers) { for (BlogPostHeader h: headers) {
assertTrue(h instanceof BlogCommentHeader); assertTrue(h instanceof BlogCommentHeader);
assertEquals(COMMENT, h.getType()); assertEquals(COMMENT, h.getType());
assertTrue(((BlogCommentHeader) h).getParent().isRssFeed()); assertTrue(((BlogCommentHeader) h).getRootPost().isRssFeed());
} }
} }