diff --git a/briar-android/res/layout/list_item_forum_invitation_out.xml b/briar-android/res/layout/list_item_forum_invitation_out.xml
deleted file mode 100644
index 9784a1391..000000000
--- a/briar-android/res/layout/list_item_forum_invitation_out.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/briar-android/res/layout/list_item_forum_invitation_in.xml b/briar-android/res/layout/list_item_shareable_invitation_in.xml
similarity index 100%
rename from briar-android/res/layout/list_item_forum_invitation_in.xml
rename to briar-android/res/layout/list_item_shareable_invitation_in.xml
diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index 164dea6ac..5a3f510b5 100644
--- a/briar-android/res/values/strings.xml
+++ b/briar-android/res/values/strings.xml
@@ -309,6 +309,13 @@
There was an error sharing this blog.
Share Blog
Blog shared with chosen contacts
+ You accepted the blog invitation from %s.
+ You declined the blog invitation from %s.
+ %s accepted the blog invitation.
+ %s declined the blog invitation.
+ %1$s has shared the personal blog of %2$s with you.
+ You have shared the personal blog of %1$s with %2$s.
+ Show Blog Invitations
Blog List
Available Blogs
diff --git a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
index f8874fd71..dc53745b9 100644
--- a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
+++ b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
@@ -21,11 +21,12 @@ import org.briarproject.api.db.DbException;
import org.briarproject.api.event.BlogPostAddedEvent;
import org.briarproject.api.event.Event;
import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.ForumInvitationReceivedEvent;
import org.briarproject.api.event.ForumPostReceivedEvent;
import org.briarproject.api.event.IntroductionRequestReceivedEvent;
import org.briarproject.api.event.IntroductionResponseReceivedEvent;
import org.briarproject.api.event.IntroductionSucceededEvent;
+import org.briarproject.api.event.InvitationReceivedEvent;
+import org.briarproject.api.event.InvitationResponseReceivedEvent;
import org.briarproject.api.event.PrivateMessageReceivedEvent;
import org.briarproject.api.event.SettingsUpdatedEvent;
import org.briarproject.api.lifecycle.Service;
@@ -174,8 +175,11 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
} else if (e instanceof IntroductionSucceededEvent) {
Contact c = ((IntroductionSucceededEvent) e).getContact();
showIntroductionSucceededNotification(c);
- } else if (e instanceof ForumInvitationReceivedEvent) {
- ContactId c = ((ForumInvitationReceivedEvent) e).getContactId();
+ } else if (e instanceof InvitationReceivedEvent) {
+ ContactId c = ((InvitationReceivedEvent) e).getContactId();
+ showNotificationForPrivateConversation(c);
+ } else if (e instanceof InvitationResponseReceivedEvent) {
+ ContactId c = ((InvitationResponseReceivedEvent) e).getContactId();
showNotificationForPrivateConversation(c);
}
}
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java
index 582097c25..c9df74031 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java
+++ b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java
@@ -20,6 +20,7 @@ import org.briarproject.android.ActivityComponent;
import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.android.keyagreement.KeyAgreementActivity;
import org.briarproject.android.util.BriarRecyclerView;
+import org.briarproject.api.blogs.BlogSharingManager;
import org.briarproject.api.contact.Contact;
import org.briarproject.api.contact.ContactId;
import org.briarproject.api.contact.ContactManager;
@@ -37,6 +38,8 @@ import org.briarproject.api.event.ForumInvitationReceivedEvent;
import org.briarproject.api.event.ForumInvitationResponseReceivedEvent;
import org.briarproject.api.event.IntroductionRequestReceivedEvent;
import org.briarproject.api.event.IntroductionResponseReceivedEvent;
+import org.briarproject.api.event.InvitationReceivedEvent;
+import org.briarproject.api.event.InvitationResponseReceivedEvent;
import org.briarproject.api.event.PrivateMessageReceivedEvent;
import org.briarproject.api.forum.ForumInvitationRequest;
import org.briarproject.api.forum.ForumInvitationResponse;
@@ -91,6 +94,8 @@ public class ContactListFragment extends BaseFragment implements EventListener {
protected volatile IntroductionManager introductionManager;
@Inject
protected volatile ForumSharingManager forumSharingManager;
+ @Inject
+ protected volatile BlogSharingManager blogSharingManager;
public static ContactListFragment newInstance() {
@@ -277,14 +282,14 @@ public class ContactListFragment extends BaseFragment implements EventListener {
(IntroductionResponseReceivedEvent) e;
IntroductionResponse ir = m.getIntroductionResponse();
updateItem(m.getContactId(), ConversationItem.from(ir));
- } else if (e instanceof ForumInvitationReceivedEvent) {
- LOG.info("Forum Invitation received, reloading conversation...");
- ForumInvitationReceivedEvent m = (ForumInvitationReceivedEvent) e;
+ } else if (e instanceof InvitationReceivedEvent) {
+ LOG.info("Invitation received, reloading conversation...");
+ InvitationReceivedEvent m = (InvitationReceivedEvent) e;
reloadConversation(m.getContactId());
- } else if (e instanceof ForumInvitationResponseReceivedEvent) {
- LOG.info("Forum Invitation Response received, reloading ...");
- ForumInvitationResponseReceivedEvent m =
- (ForumInvitationResponseReceivedEvent) e;
+ } else if (e instanceof InvitationResponseReceivedEvent) {
+ LOG.info("Invitation Response received, reloading ...");
+ InvitationResponseReceivedEvent m =
+ (InvitationResponseReceivedEvent) e;
reloadConversation(m.getContactId());
}
}
@@ -406,6 +411,7 @@ public class ContactListFragment extends BaseFragment implements EventListener {
now = System.currentTimeMillis();
Collection invitations =
forumSharingManager.getInvitationMessages(id);
+ invitations.addAll(blogSharingManager.getInvitationMessages(id));
for (InvitationMessage i : invitations) {
messages.add(ConversationItem.from(i));
}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
index 58b2084d9..b1cd0292d 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
@@ -30,6 +30,7 @@ import org.briarproject.android.api.AndroidNotificationManager;
import org.briarproject.android.introduction.IntroductionActivity;
import org.briarproject.android.util.BriarRecyclerView;
import org.briarproject.api.FormatException;
+import org.briarproject.api.blogs.BlogSharingManager;
import org.briarproject.api.clients.SessionId;
import org.briarproject.api.contact.Contact;
import org.briarproject.api.contact.ContactId;
@@ -44,15 +45,13 @@ import org.briarproject.api.event.ContactRemovedEvent;
import org.briarproject.api.event.Event;
import org.briarproject.api.event.EventBus;
import org.briarproject.api.event.EventListener;
-import org.briarproject.api.event.ForumInvitationReceivedEvent;
-import org.briarproject.api.event.ForumInvitationResponseReceivedEvent;
import org.briarproject.api.event.IntroductionRequestReceivedEvent;
import org.briarproject.api.event.IntroductionResponseReceivedEvent;
+import org.briarproject.api.event.InvitationReceivedEvent;
+import org.briarproject.api.event.InvitationResponseReceivedEvent;
import org.briarproject.api.event.MessagesAckedEvent;
import org.briarproject.api.event.MessagesSentEvent;
import org.briarproject.api.event.PrivateMessageReceivedEvent;
-import org.briarproject.api.forum.ForumInvitationRequest;
-import org.briarproject.api.forum.ForumInvitationResponse;
import org.briarproject.api.forum.ForumSharingManager;
import org.briarproject.api.introduction.IntroductionManager;
import org.briarproject.api.introduction.IntroductionMessage;
@@ -64,6 +63,8 @@ import org.briarproject.api.messaging.PrivateMessageFactory;
import org.briarproject.api.messaging.PrivateMessageHeader;
import org.briarproject.api.plugins.ConnectionRegistry;
import org.briarproject.api.sharing.InvitationMessage;
+import org.briarproject.api.sharing.InvitationRequest;
+import org.briarproject.api.sharing.InvitationResponse;
import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.MessageId;
import org.briarproject.util.StringUtils;
@@ -128,6 +129,8 @@ public class ConversationActivity extends BriarActivity
protected volatile IntroductionManager introductionManager;
@Inject
protected volatile ForumSharingManager forumSharingManager;
+ @Inject
+ protected volatile BlogSharingManager blogSharingManager;
private volatile GroupId groupId = null;
private volatile ContactId contactId = null;
@@ -337,6 +340,8 @@ public class ConversationActivity extends BriarActivity
Collection invitations =
forumSharingManager
.getInvitationMessages(contactId);
+ invitations.addAll(blogSharingManager
+ .getInvitationMessages(contactId));
long duration = System.currentTimeMillis() - now;
if (LOG.isLoggable(INFO))
LOG.info("Loading headers took " + duration + " ms");
@@ -388,13 +393,13 @@ public class ConversationActivity extends BriarActivity
items.add(item);
}
for (InvitationMessage i : invitations) {
- if (i instanceof ForumInvitationRequest) {
- ForumInvitationRequest r =
- (ForumInvitationRequest) i;
+ if (i instanceof InvitationRequest) {
+ InvitationRequest r =
+ (InvitationRequest) i;
items.add(ConversationItem.from(r));
- } else if (i instanceof ForumInvitationResponse) {
- ForumInvitationResponse r =
- (ForumInvitationResponse) i;
+ } else if (i instanceof InvitationResponse) {
+ InvitationResponse r =
+ (InvitationResponse) i;
items.add(ConversationItem
.from(ConversationActivity.this,
contactName, r));
@@ -541,6 +546,7 @@ public class ConversationActivity extends BriarActivity
IntroductionRequestReceivedEvent event =
(IntroductionRequestReceivedEvent) e;
if (event.getContactId().equals(contactId)) {
+ LOG.info("Introduction request received, adding...");
IntroductionRequest ir = event.getIntroductionRequest();
ConversationItem item = new ConversationIntroductionInItem(ir);
addConversationItem(item);
@@ -549,21 +555,24 @@ public class ConversationActivity extends BriarActivity
IntroductionResponseReceivedEvent event =
(IntroductionResponseReceivedEvent) e;
if (event.getContactId().equals(contactId)) {
+ LOG.info("Introduction response received, adding...");
IntroductionResponse ir = event.getIntroductionResponse();
ConversationItem item =
ConversationItem.from(this, contactName, ir);
addConversationItem(item);
}
- } else if (e instanceof ForumInvitationReceivedEvent) {
- ForumInvitationReceivedEvent event =
- (ForumInvitationReceivedEvent) e;
+ } else if (e instanceof InvitationReceivedEvent) {
+ InvitationReceivedEvent event =
+ (InvitationReceivedEvent) e;
if (event.getContactId().equals(contactId)) {
+ LOG.info("Invitation received, reloading...");
loadMessages();
}
- } else if (e instanceof ForumInvitationResponseReceivedEvent) {
- ForumInvitationResponseReceivedEvent event =
- (ForumInvitationResponseReceivedEvent) e;
+ } else if (e instanceof InvitationResponseReceivedEvent) {
+ InvitationResponseReceivedEvent event =
+ (InvitationResponseReceivedEvent) e;
if (event.getContactId().equals(contactId)) {
+ LOG.info("Invitation response received, reloading...");
loadMessages();
}
}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java b/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java
index 15b905908..6741890c5 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationAdapter.java
@@ -15,16 +15,22 @@ import android.widget.TextView;
import org.briarproject.R;
import org.briarproject.android.forum.ForumInvitationsActivity;
import org.briarproject.android.util.AndroidUtils;
+import org.briarproject.api.blogs.BlogInvitationRequest;
import org.briarproject.api.clients.SessionId;
import org.briarproject.api.forum.ForumInvitationRequest;
import org.briarproject.api.introduction.IntroductionRequest;
import org.briarproject.api.messaging.PrivateMessageHeader;
+import org.briarproject.api.sharing.InvitationRequest;
import org.briarproject.util.StringUtils;
import java.util.List;
import static android.support.v7.util.SortedList.INVALID_POSITION;
import static android.support.v7.widget.RecyclerView.ViewHolder;
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+import static org.briarproject.android.contact.ConversationItem.BLOG_INVITATION_IN;
+import static org.briarproject.android.contact.ConversationItem.BLOG_INVITATION_OUT;
import static org.briarproject.android.contact.ConversationItem.FORUM_INVITATION_IN;
import static org.briarproject.android.contact.ConversationItem.FORUM_INVITATION_OUT;
import static org.briarproject.android.contact.ConversationItem.INTRODUCTION_IN;
@@ -46,13 +52,13 @@ class ConversationAdapter extends RecyclerView.Adapter {
private IntroductionHandler intro;
private String contactName;
- public ConversationAdapter(Context context,
+ ConversationAdapter(Context context,
IntroductionHandler introductionHandler) {
ctx = context;
intro = introductionHandler;
}
- public void setContactName(String contactName) {
+ void setContactName(String contactName) {
this.contactName = contactName;
notifyDataSetChanged();
}
@@ -87,13 +93,15 @@ class ConversationAdapter extends RecyclerView.Adapter {
v = LayoutInflater.from(viewGroup.getContext()).inflate(
R.layout.list_item_notice_out, viewGroup, false);
return new NoticeHolder(v, type);
- } else if (type == FORUM_INVITATION_IN) {
+ } else if (type == FORUM_INVITATION_IN || type == BLOG_INVITATION_IN) {
v = LayoutInflater.from(viewGroup.getContext()).inflate(
- R.layout.list_item_forum_invitation_in, viewGroup, false);
+ R.layout.list_item_shareable_invitation_in, viewGroup,
+ false);
return new InvitationHolder(v, type);
- } else if (type == FORUM_INVITATION_OUT) {
+ } else if (type == FORUM_INVITATION_OUT ||
+ type == BLOG_INVITATION_OUT) {
v = LayoutInflater.from(viewGroup.getContext()).inflate(
- R.layout.list_item_forum_invitation_out, viewGroup, false);
+ R.layout.list_item_introduction_out, viewGroup, false);
return new InvitationHolder(v, type);
}
// incoming message (non-local)
@@ -119,12 +127,12 @@ class ConversationAdapter extends RecyclerView.Adapter {
bindNotice((NoticeHolder) ui, (ConversationNoticeOutItem) item);
} else if (item instanceof ConversationNoticeInItem) {
bindNotice((NoticeHolder) ui, (ConversationNoticeInItem) item);
- } else if (item instanceof ConversationForumInvitationOutItem) {
+ } else if (item instanceof ConversationShareableInvitationOutItem) {
bindInvitation((InvitationHolder) ui,
- (ConversationForumInvitationOutItem) item);
- } else if (item instanceof ConversationForumInvitationInItem) {
+ (ConversationShareableInvitationOutItem) item);
+ } else if (item instanceof ConversationShareableInvitationInItem) {
bindInvitation((InvitationHolder) ui,
- (ConversationForumInvitationInItem) item);
+ (ConversationShareableInvitationInItem) item);
} else {
throw new IllegalArgumentException("Unhandled Conversation Item");
}
@@ -180,9 +188,9 @@ class ConversationAdapter extends RecyclerView.Adapter {
String message = ir.getMessage();
if (StringUtils.isNullOrEmpty(message)) {
- ui.messageLayout.setVisibility(View.GONE);
+ ui.messageLayout.setVisibility(GONE);
} else {
- ui.messageLayout.setVisibility(View.VISIBLE);
+ ui.messageLayout.setVisibility(VISIBLE);
ui.message.body.setText(StringUtils.trim(message));
ui.message.date
.setText(AndroidUtils.formatDate(ctx, item.getTime()));
@@ -213,8 +221,8 @@ class ConversationAdapter extends RecyclerView.Adapter {
ui.text.setText(ctx.getString(
R.string.introduction_request_answered_received,
contactName, ir.getName()));
- ui.acceptButton.setVisibility(View.GONE);
- ui.declineButton.setVisibility(View.GONE);
+ ui.acceptButton.setVisibility(GONE);
+ ui.declineButton.setVisibility(GONE);
}
// Incoming Introduction Request (Not Answered)
else {
@@ -230,12 +238,12 @@ class ConversationAdapter extends RecyclerView.Adapter {
if (item.getIntroductionRequest().doesIntroduceOtherIdentity()) {
// don't allow accept when one of our identities is introduced
- ui.acceptButton.setVisibility(View.GONE);
+ ui.acceptButton.setVisibility(GONE);
ui.text.setText(ctx.getString(
R.string.introduction_request_for_our_identity_received,
contactName, ir.getName()));
} else {
- ui.acceptButton.setVisibility(View.VISIBLE);
+ ui.acceptButton.setVisibility(VISIBLE);
ui.acceptButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -245,7 +253,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
}
});
}
- ui.declineButton.setVisibility(View.VISIBLE);
+ ui.declineButton.setVisibility(VISIBLE);
ui.declineButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -276,26 +284,38 @@ class ConversationAdapter extends RecyclerView.Adapter {
}
private void bindInvitation(InvitationHolder ui,
- final ConversationForumInvitationItem item) {
+ final ConversationShareableInvitationItem item) {
- ForumInvitationRequest fim = item.getForumInvitationMessage();
+ InvitationRequest ir = item.getInvitationRequest();
+ String name = "";
+ int receivedRes = 0, sentRes = 0, buttonRes = 0;
+ if (ir instanceof ForumInvitationRequest) {
+ name = ((ForumInvitationRequest) ir).getForumName();
+ receivedRes = R.string.forum_invitation_received;
+ sentRes = R.string.forum_invitation_sent;
+ buttonRes = R.string.forum_show_invitations;
+ } else if (ir instanceof BlogInvitationRequest) {
+ name = ((BlogInvitationRequest) ir).getBlogAuthorName();
+ receivedRes = R.string.blogs_sharing_invitation_received;
+ sentRes = R.string.blogs_sharing_invitation_sent;
+ buttonRes = R.string.blogs_sharing_show_invitations;
+ }
- String message = fim.getMessage();
+ String message = ir.getMessage();
if (StringUtils.isNullOrEmpty(message)) {
- ui.messageLayout.setVisibility(View.GONE);
+ ui.messageLayout.setVisibility(GONE);
} else {
- ui.messageLayout.setVisibility(View.VISIBLE);
+ ui.messageLayout.setVisibility(VISIBLE);
ui.message.body.setText(StringUtils.trim(message));
ui.message.date
.setText(AndroidUtils.formatDate(ctx, item.getTime()));
}
// Outgoing Invitation
- if (item instanceof ConversationForumInvitationOutItem) {
- ui.text.setText(ctx.getString(R.string.forum_invitation_sent,
- fim.getForumName(), contactName));
- ConversationForumInvitationOutItem i =
- (ConversationForumInvitationOutItem) item;
+ if (item instanceof ConversationShareableInvitationOutItem) {
+ ui.text.setText(ctx.getString(sentRes, name, contactName));
+ ConversationShareableInvitationOutItem i =
+ (ConversationShareableInvitationOutItem) item;
if (i.isSeen()) {
ui.status.setImageResource(R.drawable.message_delivered);
ui.message.status.setImageResource(
@@ -312,12 +332,12 @@ class ConversationAdapter extends RecyclerView.Adapter {
}
// Incoming Invitation
else {
- ui.text.setText(ctx.getString(R.string.forum_invitation_received,
- contactName, fim.getForumName()));
+ ui.text.setText(ctx.getString(receivedRes, contactName, name));
- if (fim.isAvailable()) {
- ui.showForumsButton.setVisibility(View.VISIBLE);
- ui.showForumsButton
+ if (ir.isAvailable()) {
+ ui.showInvitationsButton.setText(ctx.getString(buttonRes));
+ ui.showInvitationsButton.setVisibility(VISIBLE);
+ ui.showInvitationsButton
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -327,7 +347,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
}
});
} else {
- ui.showForumsButton.setVisibility(View.GONE);
+ ui.showInvitationsButton.setVisibility(GONE);
}
}
ui.date.setText(AndroidUtils.formatDate(ctx, item.getTime()));
@@ -345,7 +365,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
return items.get(position);
}
- public ConversationItem getLastItem() {
+ ConversationItem getLastItem() {
if (items.size() > 0) {
return items.get(items.size() - 1);
} else {
@@ -353,7 +373,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
}
}
- public SparseArray getIncomingMessages() {
+ SparseArray getIncomingMessages() {
SparseArray messages = new SparseArray<>();
for (int i = 0; i < items.size(); i++) {
@@ -365,7 +385,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
return messages;
}
- public SparseArray getOutgoingMessages() {
+ SparseArray getOutgoingMessages() {
SparseArray messages = new SparseArray<>();
for (int i = 0; i < items.size(); i++) {
@@ -377,7 +397,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
return messages;
}
- public SparseArray getPrivateMessages() {
+ SparseArray getPrivateMessages() {
SparseArray messages = new SparseArray<>();
for (int i = 0; i < items.size(); i++) {
@@ -408,7 +428,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
public TextView date;
public ImageView status;
- public MessageHolder(View v, int type) {
+ MessageHolder(View v, int type) {
super(v);
layout = (ViewGroup) v.findViewById(R.id.msgLayout);
@@ -432,7 +452,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
private final TextView date;
private final ImageView status;
- public IntroductionHolder(View v, int type) {
+ IntroductionHolder(View v, int type) {
super(v);
messageLayout = v.findViewById(R.id.messageLayout);
@@ -457,7 +477,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
private final TextView date;
private final ImageView status;
- public NoticeHolder(View v, int type) {
+ NoticeHolder(View v, int type) {
super(v);
text = (TextView) v.findViewById(R.id.noticeText);
@@ -476,21 +496,21 @@ class ConversationAdapter extends RecyclerView.Adapter {
private final View messageLayout;
private final MessageHolder message;
private final TextView text;
- private final Button showForumsButton;
+ private final Button showInvitationsButton;
private final TextView date;
private final ImageView status;
- public InvitationHolder(View v, int type) {
+ InvitationHolder(View v, int type) {
super(v);
messageLayout = v.findViewById(R.id.messageLayout);
message = new MessageHolder(messageLayout,
type == FORUM_INVITATION_IN ? MSG_IN : MSG_OUT);
text = (TextView) v.findViewById(R.id.introductionText);
- showForumsButton = (Button) v.findViewById(R.id.showForumsButton);
+ showInvitationsButton = (Button) v.findViewById(R.id.showForumsButton);
date = (TextView) v.findViewById(R.id.introductionTime);
- if (type == FORUM_INVITATION_OUT) {
+ if (type == FORUM_INVITATION_OUT || type == BLOG_INVITATION_OUT) {
status = (ImageView) v.findViewById(R.id.introductionStatus);
} else {
status = null;
@@ -543,7 +563,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
}
}
- public interface IntroductionHandler {
+ interface IntroductionHandler {
void respondToIntroduction(SessionId sessionId, boolean accept);
}
}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationForumInvitationInItem.java b/briar-android/src/org/briarproject/android/contact/ConversationForumInvitationInItem.java
deleted file mode 100644
index bfa5da545..000000000
--- a/briar-android/src/org/briarproject/android/contact/ConversationForumInvitationInItem.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.briarproject.android.contact;
-
-import org.briarproject.api.forum.ForumInvitationRequest;
-
-// This class is not thread-safe
-public class ConversationForumInvitationInItem
- extends ConversationForumInvitationItem
- implements ConversationItem.IncomingItem {
-
- private boolean read;
-
- public ConversationForumInvitationInItem(ForumInvitationRequest fim) {
- super(fim);
-
- this.read = fim.isRead();
- }
-
- @Override
- int getType() {
- return FORUM_INVITATION_IN;
- }
-
- @Override
- public boolean isRead() {
- return read;
- }
-
- @Override
- public void setRead(boolean read) {
- this.read = read;
- }
-}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationForumInvitationItem.java b/briar-android/src/org/briarproject/android/contact/ConversationForumInvitationItem.java
deleted file mode 100644
index 50c5c64d2..000000000
--- a/briar-android/src/org/briarproject/android/contact/ConversationForumInvitationItem.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.briarproject.android.contact;
-
-import org.briarproject.api.forum.ForumInvitationRequest;
-
-abstract class ConversationForumInvitationItem extends ConversationItem {
-
- private final ForumInvitationRequest fim;
-
- public ConversationForumInvitationItem(ForumInvitationRequest fim) {
- super(fim.getId(), fim.getTimestamp());
-
- this.fim = fim;
- }
-
- public ForumInvitationRequest getForumInvitationMessage() {
- return fim;
- }
-}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationItem.java b/briar-android/src/org/briarproject/android/contact/ConversationItem.java
index dbc81c25a..321cceab3 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationItem.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationItem.java
@@ -3,13 +3,15 @@ package org.briarproject.android.contact;
import android.content.Context;
import org.briarproject.R;
-import org.briarproject.api.forum.ForumInvitationRequest;
+import org.briarproject.api.blogs.BlogInvitationResponse;
import org.briarproject.api.forum.ForumInvitationResponse;
import org.briarproject.api.introduction.IntroductionMessage;
import org.briarproject.api.introduction.IntroductionRequest;
import org.briarproject.api.introduction.IntroductionResponse;
import org.briarproject.api.messaging.PrivateMessageHeader;
import org.briarproject.api.sharing.InvitationMessage;
+import org.briarproject.api.sharing.InvitationRequest;
+import org.briarproject.api.sharing.InvitationResponse;
import org.briarproject.api.sync.MessageId;
// This class is not thread-safe
@@ -25,6 +27,8 @@ public abstract class ConversationItem {
final static int NOTICE_OUT = 6;
final static int FORUM_INVITATION_IN = 7;
final static int FORUM_INVITATION_OUT = 8;
+ final static int BLOG_INVITATION_IN = 9;
+ final static int BLOG_INVITATION_OUT = 10;
private MessageId id;
private long time;
@@ -97,15 +101,27 @@ public abstract class ConversationItem {
}
}
- public static ConversationItem from(ForumInvitationRequest fim) {
+ public static ConversationItem from(InvitationRequest fim) {
if (fim.isLocal()) {
- return new ConversationForumInvitationOutItem(fim);
+ return new ConversationShareableInvitationOutItem(fim);
} else {
- return new ConversationForumInvitationInItem(fim);
+ return new ConversationShareableInvitationInItem(fim);
}
}
public static ConversationItem from(Context ctx, String contactName,
+ InvitationResponse ir) {
+
+ if (ir instanceof ForumInvitationResponse) {
+ return from(ctx, contactName, (ForumInvitationResponse) ir);
+ } else if (ir instanceof BlogInvitationResponse) {
+ return from(ctx, contactName, (BlogInvitationResponse) ir);
+ } else {
+ throw new IllegalArgumentException("Unknown Invitation Response.");
+ }
+ }
+
+ private static ConversationItem from(Context ctx, String contactName,
ForumInvitationResponse fir) {
if (fir.isLocal()) {
@@ -137,6 +153,38 @@ public abstract class ConversationItem {
}
}
+ private static ConversationItem from(Context ctx, String contactName,
+ BlogInvitationResponse fir) {
+
+ if (fir.isLocal()) {
+ String text;
+ if (fir.wasAccepted()) {
+ text = ctx.getString(
+ R.string.blogs_sharing_response_accepted_sent,
+ contactName);
+ } else {
+ text = ctx.getString(
+ R.string.blogs_sharing_response_declined_sent,
+ contactName);
+ }
+ return new ConversationNoticeOutItem(fir.getId(), text,
+ fir.getTimestamp(), fir.isSent(), fir.isSeen());
+ } else {
+ String text;
+ if (fir.wasAccepted()) {
+ text = ctx.getString(
+ R.string.blogs_sharing_response_accepted_received,
+ contactName);
+ } else {
+ text = ctx.getString(
+ R.string.blogs_sharing_response_declined_received,
+ contactName);
+ }
+ return new ConversationNoticeInItem(fir.getId(), text,
+ fir.getTimestamp(), fir.isRead());
+ }
+ }
+
/**
* This method should not be used to get user-facing objects,
* Its purpose is only to provide data for the contact list.
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationShareableInvitationInItem.java b/briar-android/src/org/briarproject/android/contact/ConversationShareableInvitationInItem.java
new file mode 100644
index 000000000..6e46b7b41
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/contact/ConversationShareableInvitationInItem.java
@@ -0,0 +1,43 @@
+package org.briarproject.android.contact;
+
+import org.briarproject.api.blogs.BlogInvitationRequest;
+import org.briarproject.api.forum.ForumInvitationRequest;
+import org.briarproject.api.sharing.InvitationRequest;
+
+// This class is not thread-safe
+class ConversationShareableInvitationInItem
+ extends ConversationShareableInvitationItem
+ implements ConversationItem.IncomingItem {
+
+ private final int type;
+ private boolean read;
+
+ ConversationShareableInvitationInItem(InvitationRequest ir) {
+ super(ir);
+
+ if (ir instanceof ForumInvitationRequest) {
+ this.type = FORUM_INVITATION_IN;
+ } else if (ir instanceof BlogInvitationRequest) {
+ this.type = BLOG_INVITATION_IN;
+ } else {
+ throw new IllegalArgumentException("Unknown Invitation Type.");
+ }
+
+ this.read = ir.isRead();
+ }
+
+ @Override
+ int getType() {
+ return type;
+ }
+
+ @Override
+ public boolean isRead() {
+ return read;
+ }
+
+ @Override
+ public void setRead(boolean read) {
+ this.read = read;
+ }
+}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationShareableInvitationItem.java b/briar-android/src/org/briarproject/android/contact/ConversationShareableInvitationItem.java
new file mode 100644
index 000000000..a2e9b91cf
--- /dev/null
+++ b/briar-android/src/org/briarproject/android/contact/ConversationShareableInvitationItem.java
@@ -0,0 +1,18 @@
+package org.briarproject.android.contact;
+
+import org.briarproject.api.sharing.InvitationRequest;
+
+abstract class ConversationShareableInvitationItem extends ConversationItem {
+
+ private final InvitationRequest fim;
+
+ ConversationShareableInvitationItem(InvitationRequest fim) {
+ super(fim.getId(), fim.getTimestamp());
+
+ this.fim = fim;
+ }
+
+ InvitationRequest getInvitationRequest() {
+ return fim;
+ }
+}
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationForumInvitationOutItem.java b/briar-android/src/org/briarproject/android/contact/ConversationShareableInvitationOutItem.java
similarity index 52%
rename from briar-android/src/org/briarproject/android/contact/ConversationForumInvitationOutItem.java
rename to briar-android/src/org/briarproject/android/contact/ConversationShareableInvitationOutItem.java
index 5551fa60c..426403ab3 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationForumInvitationOutItem.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationShareableInvitationOutItem.java
@@ -1,6 +1,8 @@
package org.briarproject.android.contact;
+import org.briarproject.api.blogs.BlogInvitationRequest;
import org.briarproject.api.forum.ForumInvitationRequest;
+import org.briarproject.api.sharing.InvitationRequest;
/**
* This class is needed and can not be replaced by an ConversationNoticeOutItem,
@@ -9,21 +11,31 @@ import org.briarproject.api.forum.ForumInvitationRequest;
*
* This class is not thread-safe
*/
-public class ConversationForumInvitationOutItem
- extends ConversationForumInvitationItem
+class ConversationShareableInvitationOutItem
+ extends ConversationShareableInvitationItem
implements ConversationItem.OutgoingItem {
+ private final int type;
private boolean sent, seen;
- public ConversationForumInvitationOutItem(ForumInvitationRequest fim) {
- super(fim);
- this.sent = fim.isSent();
- this.seen = fim.isSeen();
+ ConversationShareableInvitationOutItem(InvitationRequest ir) {
+ super(ir);
+
+ if (ir instanceof ForumInvitationRequest) {
+ this.type = FORUM_INVITATION_OUT;
+ } else if (ir instanceof BlogInvitationRequest) {
+ this.type = BLOG_INVITATION_OUT;
+ } else {
+ throw new IllegalArgumentException("Unknown Invitation Type.");
+ }
+
+ this.sent = ir.isSent();
+ this.seen = ir.isSeen();
}
@Override
int getType() {
- return FORUM_INVITATION_OUT;
+ return type;
}
@Override
diff --git a/briar-api/src/org/briarproject/api/blogs/BlogInvitationRequest.java b/briar-api/src/org/briarproject/api/blogs/BlogInvitationRequest.java
index 473955960..0f2970b25 100644
--- a/briar-api/src/org/briarproject/api/blogs/BlogInvitationRequest.java
+++ b/briar-api/src/org/briarproject/api/blogs/BlogInvitationRequest.java
@@ -8,20 +8,20 @@ import org.briarproject.api.sync.MessageId;
public class BlogInvitationRequest extends InvitationRequest {
- private final String blogTitle;
+ private final String blogAuthorName;
public BlogInvitationRequest(MessageId id, SessionId sessionId,
- ContactId contactId, String blogTitle, String message,
+ ContactId contactId, String blogAuthorName, String message,
boolean available, long time, boolean local, boolean sent,
boolean seen, boolean read) {
super(id, sessionId, contactId, message, available, time, local, sent,
seen, read);
- this.blogTitle = blogTitle;
+ this.blogAuthorName = blogAuthorName;
}
- public String getBlogTitle() {
- return blogTitle;
+ public String getBlogAuthorName() {
+ return blogAuthorName;
}
}
diff --git a/briar-api/src/org/briarproject/api/blogs/BlogInvitationResponse.java b/briar-api/src/org/briarproject/api/blogs/BlogInvitationResponse.java
new file mode 100644
index 000000000..e3e7cdf69
--- /dev/null
+++ b/briar-api/src/org/briarproject/api/blogs/BlogInvitationResponse.java
@@ -0,0 +1,17 @@
+package org.briarproject.api.blogs;
+
+import org.briarproject.api.clients.SessionId;
+import org.briarproject.api.contact.ContactId;
+import org.briarproject.api.sharing.InvitationResponse;
+import org.briarproject.api.sync.MessageId;
+
+public class BlogInvitationResponse extends InvitationResponse {
+
+ public BlogInvitationResponse(MessageId id, SessionId sessionId,
+ ContactId contactId, boolean accept, long time, boolean local,
+ boolean sent, boolean seen, boolean read) {
+
+ super(id, sessionId, contactId, accept, time, local, sent, seen, read);
+ }
+
+}
diff --git a/briar-api/src/org/briarproject/api/blogs/BlogSharingManager.java b/briar-api/src/org/briarproject/api/blogs/BlogSharingManager.java
index 59e06c712..4e21557f8 100644
--- a/briar-api/src/org/briarproject/api/blogs/BlogSharingManager.java
+++ b/briar-api/src/org/briarproject/api/blogs/BlogSharingManager.java
@@ -3,14 +3,14 @@ package org.briarproject.api.blogs;
import org.briarproject.api.contact.Contact;
import org.briarproject.api.contact.ContactId;
import org.briarproject.api.db.DbException;
+import org.briarproject.api.sharing.InvitationMessage;
import org.briarproject.api.sharing.SharingManager;
import org.briarproject.api.sync.ClientId;
import org.briarproject.api.sync.GroupId;
import java.util.Collection;
-public interface BlogSharingManager
- extends SharingManager {
+public interface BlogSharingManager extends SharingManager {
/**
* Returns the unique ID of the blog sharing client.
@@ -34,7 +34,7 @@ public interface BlogSharingManager
* Returns all blogs sharing messages sent by the Contact
* identified by contactId.
*/
- Collection getInvitationMessages(
+ Collection getInvitationMessages(
ContactId contactId) throws DbException;
/**
diff --git a/briar-api/src/org/briarproject/api/forum/ForumSharingManager.java b/briar-api/src/org/briarproject/api/forum/ForumSharingManager.java
index 2ad3228dd..5f1f623c2 100644
--- a/briar-api/src/org/briarproject/api/forum/ForumSharingManager.java
+++ b/briar-api/src/org/briarproject/api/forum/ForumSharingManager.java
@@ -10,7 +10,7 @@ import org.briarproject.api.sync.GroupId;
import java.util.Collection;
-public interface ForumSharingManager extends SharingManager {
+public interface ForumSharingManager extends SharingManager {
/** Returns the unique ID of the forum sharing client. */
ClientId getClientId();
diff --git a/briar-api/src/org/briarproject/api/sharing/SharingManager.java b/briar-api/src/org/briarproject/api/sharing/SharingManager.java
index 100ab5dc4..861edfc4c 100644
--- a/briar-api/src/org/briarproject/api/sharing/SharingManager.java
+++ b/briar-api/src/org/briarproject/api/sharing/SharingManager.java
@@ -8,7 +8,7 @@ import org.briarproject.api.sync.GroupId;
import java.util.Collection;
-public interface SharingManager {
+public interface SharingManager {
/** Returns the unique ID of the group sharing client. */
ClientId getClientId();
@@ -30,7 +30,7 @@ public interface SharingManager getInvitationMessages(
+ Collection getInvitationMessages(
ContactId contactId) throws DbException;
/** Returns all shareables to which the user has been invited. */
diff --git a/briar-core/src/org/briarproject/sharing/BlogSharingManagerImpl.java b/briar-core/src/org/briarproject/sharing/BlogSharingManagerImpl.java
index 550667641..19f9eef34 100644
--- a/briar-core/src/org/briarproject/sharing/BlogSharingManagerImpl.java
+++ b/briar-core/src/org/briarproject/sharing/BlogSharingManagerImpl.java
@@ -4,6 +4,7 @@ import org.briarproject.api.FormatException;
import org.briarproject.api.blogs.Blog;
import org.briarproject.api.blogs.BlogFactory;
import org.briarproject.api.blogs.BlogInvitationRequest;
+import org.briarproject.api.blogs.BlogInvitationResponse;
import org.briarproject.api.blogs.BlogManager;
import org.briarproject.api.blogs.BlogManager.RemoveBlogHook;
import org.briarproject.api.blogs.BlogSharingManager;
@@ -25,6 +26,7 @@ import org.briarproject.api.event.BlogInvitationReceivedEvent;
import org.briarproject.api.event.BlogInvitationResponseReceivedEvent;
import org.briarproject.api.identity.Author;
import org.briarproject.api.identity.AuthorFactory;
+import org.briarproject.api.sharing.InvitationMessage;
import org.briarproject.api.sync.ClientId;
import org.briarproject.api.sync.GroupId;
import org.briarproject.api.sync.MessageId;
@@ -41,7 +43,7 @@ import static org.briarproject.api.blogs.BlogConstants.BLOG_PUBLIC_KEY;
import static org.briarproject.api.blogs.BlogConstants.BLOG_TITLE;
class BlogSharingManagerImpl extends
- SharingManagerImpl
+ SharingManagerImpl
implements BlogSharingManager, RemoveBlogHook {
static final ClientId CLIENT_ID = new ClientId(StringUtils.fromHexString(
@@ -89,21 +91,21 @@ class BlogSharingManagerImpl extends
}
@Override
- protected BlogInvitationRequest createInvitationRequest(MessageId id,
+ protected InvitationMessage createInvitationRequest(MessageId id,
BlogInvitation msg, ContactId contactId, boolean available,
long time, boolean local, boolean sent, boolean seen,
boolean read) {
return new BlogInvitationRequest(id, msg.getSessionId(), contactId,
- msg.getBlogTitle(), msg.getMessage(), available, time, local,
- sent, seen, read);
+ msg.getBlogAuthorName(), msg.getMessage(), available, time,
+ local, sent, seen, read);
}
@Override
- protected BlogInvitationRequest createInvitationResponse(MessageId id,
+ protected InvitationMessage createInvitationResponse(MessageId id,
SessionId sessionId, ContactId contactId, boolean accept, long time,
boolean local, boolean sent, boolean seen, boolean read) {
- // TODO implement when doing blog sharing
- return null;
+ return new BlogInvitationResponse(id, sessionId, contactId, accept,
+ time, local, sent, seen, read);
}
@Override
diff --git a/briar-core/src/org/briarproject/sharing/ForumSharingManagerImpl.java b/briar-core/src/org/briarproject/sharing/ForumSharingManagerImpl.java
index 95f9f0ef5..eb0724001 100644
--- a/briar-core/src/org/briarproject/sharing/ForumSharingManagerImpl.java
+++ b/briar-core/src/org/briarproject/sharing/ForumSharingManagerImpl.java
@@ -37,7 +37,7 @@ import static org.briarproject.api.forum.ForumConstants.FORUM_NAME;
import static org.briarproject.api.forum.ForumConstants.FORUM_SALT;
class ForumSharingManagerImpl extends
- SharingManagerImpl
+ SharingManagerImpl
implements ForumSharingManager, ForumManager.RemoveForumHook {
static final ClientId CLIENT_ID = new ClientId(StringUtils.fromHexString(
diff --git a/briar-core/src/org/briarproject/sharing/SharingManagerImpl.java b/briar-core/src/org/briarproject/sharing/SharingManagerImpl.java
index ce34826ec..5f6fd4d41 100644
--- a/briar-core/src/org/briarproject/sharing/SharingManagerImpl.java
+++ b/briar-core/src/org/briarproject/sharing/SharingManagerImpl.java
@@ -83,9 +83,9 @@ import static org.briarproject.api.sharing.SharingMessage.BaseMessage;
import static org.briarproject.api.sharing.SharingMessage.Invitation;
import static org.briarproject.sharing.InviteeSessionState.State.AWAIT_LOCAL_RESPONSE;
-abstract class SharingManagerImpl
+abstract class SharingManagerImpl
extends BdfIncomingMessageHook
- implements SharingManager, Client, AddContactHook,
+ implements SharingManager, Client, AddContactHook,
RemoveContactHook {
private static final Logger LOG =
@@ -117,11 +117,11 @@ abstract class SharingManagerImpl getInvitationMessages(ContactId contactId)
+ public Collection getInvitationMessages(ContactId contactId)
throws DbException {
Transaction txn = db.startTransaction(true);
@@ -334,7 +334,8 @@ abstract class SharingManagerImpl list = new ArrayList();
+ Collection list =
+ new ArrayList();
Map map = clientHelper
.getMessageMetadataAsDictionary(txn, group.getId());
for (Map.Entry m : map.entrySet()) {
@@ -362,7 +363,7 @@ abstract class SharingManagerImpl