diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java index 54f17282bc2b02d73f98e88f4d32447e5842f5c0..48a133462a55be0b081eb43b5091dc3622bf2e3f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationActivity.java @@ -49,8 +49,11 @@ import org.briarproject.bramble.util.StringUtils; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; +import org.briarproject.briar.android.blog.BlogActivity; import org.briarproject.briar.android.contact.ConversationAdapter.ConversationListener; +import org.briarproject.briar.android.forum.ForumActivity; import org.briarproject.briar.android.introduction.IntroductionActivity; +import org.briarproject.briar.android.privategroup.conversation.GroupActivity; import org.briarproject.briar.android.view.BriarRecyclerView; import org.briarproject.briar.android.view.TextInputView; import org.briarproject.briar.android.view.TextInputView.TextInputListener; @@ -850,6 +853,28 @@ public class ConversationActivity extends BriarActivity }); } + @UiThread + @Override + public void open(ConversationRequestItem item) { + if (item.getRequestedGroupId() == null) return; + Intent i; + switch (item.getRequestType()) { + case FORUM: + i = new Intent(this, ForumActivity.class); + break; + case BLOG: + i = new Intent(this, BlogActivity.class); + break; + case GROUP: + i = new Intent(this, GroupActivity.class); + break; + default: + throw new IllegalArgumentException("Unknown Request Type"); + } + i.putExtra(GROUP_ID, item.getRequestedGroupId().getBytes()); + startActivity(i); + } + @DatabaseExecutor private void respondToIntroductionRequest(SessionId sessionId, boolean accept, long time) throws DbException, FormatException { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java index b8f1bb78a7485f23046919959c4f983751ca27ca..b748a358c5078f551074bda21d898b30076b41d0 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationAdapter.java @@ -139,6 +139,9 @@ class ConversationAdapter void onItemVisible(ConversationItem item); void respondToRequest(ConversationRequestItem item, boolean accept); + + void open(ConversationRequestItem item); + } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java index faf43cf5e322b971a5e563f6bb978808b99cc305..56fdfa0588e0965a2ad08d6e318511ac4bbd7938 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationItem.java @@ -101,9 +101,6 @@ abstract class ConversationItem { text = ctx.getString( R.string.introduction_request_answered_received, contactName, ir.getName()); - return new ConversationNoticeInItem(ir.getMessageId(), - ir.getGroupId(), text, ir.getMessage(), ir.getTimestamp(), - ir.isRead()); } else if (ir.contactExists()){ text = ctx.getString( R.string.introduction_request_exists_received, @@ -114,7 +111,7 @@ abstract class ConversationItem { } return new ConversationRequestItem(ir.getMessageId(), ir.getGroupId(), INTRODUCTION, ir.getSessionId(), text, - ir.getMessage(), ir.getTimestamp(), ir.isRead(), + ir.getMessage(), ir.getTimestamp(), ir.isRead(), null, ir.wasAnswered()); } } @@ -203,14 +200,10 @@ abstract class ConversationItem { } else { throw new IllegalArgumentException("Unknown InvitationRequest"); } - if (!ir.isAvailable()) { - return new ConversationNoticeInItem(ir.getId(), ir.getGroupId(), - text, ir.getMessage(), ir.getTimestamp(), ir.isRead()); - } return new ConversationRequestItem(ir.getId(), ir.getGroupId(), type, ir.getSessionId(), text, ir.getMessage(), ir.getTimestamp(), ir.isRead(), - !ir.isAvailable()); + ir.getInvitedGroupId(), !ir.isAvailable()); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java index 3dd8dd721baf0cb58ac5909a02a477d9b22dcacc..54203056f0d1c1ca1c74ead2d304115db23d69f1 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestItem.java @@ -17,6 +17,8 @@ class ConversationRequestItem extends ConversationNoticeInItem { enum RequestType { INTRODUCTION, FORUM, BLOG, GROUP } + @Nullable + private final GroupId requestedGroupId; private final RequestType requestType; private final SessionId sessionId; private boolean answered; @@ -24,10 +26,11 @@ class ConversationRequestItem extends ConversationNoticeInItem { ConversationRequestItem(MessageId id, GroupId groupId, RequestType requestType, SessionId sessionId, String text, @Nullable String msgText, long time, boolean read, - boolean answered) { + @Nullable GroupId requestedGroupId, boolean answered) { super(id, groupId, text, msgText, time, read); this.requestType = requestType; this.sessionId = sessionId; + this.requestedGroupId = requestedGroupId; this.answered = answered; } @@ -39,6 +42,11 @@ class ConversationRequestItem extends ConversationNoticeInItem { return sessionId; } + @Nullable + public GroupId getRequestedGroupId() { + return requestedGroupId; + } + boolean wasAnswered() { return answered; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java index 663e0394d27faf6edc05603380b367a0cb78535a..e60ad04e920553915091a78669604bddb578dab3 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ConversationRequestViewHolder.java @@ -11,6 +11,7 @@ import org.briarproject.briar.android.contact.ConversationAdapter.ConversationLi import static android.view.View.GONE; import static android.view.View.VISIBLE; +import static org.briarproject.briar.android.contact.ConversationRequestItem.RequestType.INTRODUCTION; @UiThread @NotNullByDefault @@ -32,11 +33,23 @@ class ConversationRequestViewHolder extends ConversationNoticeInViewHolder { final ConversationRequestItem item = (ConversationRequestItem) conversationItem; - if (item.wasAnswered()) { + if (item.getRequestType() == INTRODUCTION && item.wasAnswered()) { acceptButton.setVisibility(GONE); declineButton.setVisibility(GONE); + } else if (item.wasAnswered()) { + acceptButton.setVisibility(VISIBLE); + acceptButton.setText(R.string.open); + acceptButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + item.setAnswered(true); + listener.open(item); + } + }); + declineButton.setVisibility(GONE); } else { acceptButton.setVisibility(VISIBLE); + acceptButton.setText(R.string.accept); acceptButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { diff --git a/briar-android/src/main/res/layout/list_item_conversation_request.xml b/briar-android/src/main/res/layout/list_item_conversation_request.xml index 3932e82e535394583f6956d405f60281d95df874..3d6388a1cea8d982ec0b7785a9651bc8dd70dc56 100644 --- a/briar-android/src/main/res/layout/list_item_conversation_request.xml +++ b/briar-android/src/main/res/layout/list_item_conversation_request.xml @@ -43,7 +43,7 @@ android:layout_height="wrap_content" android:layout_alignEnd="@+id/text" android:layout_alignRight="@+id/text" - android:layout_below="@+id/declineButton" + android:layout_below="@+id/acceptButton" android:layout_marginTop="@dimen/message_bubble_timestamp_margin" android:textColor="@color/private_message_date" android:textSize="@dimen/text_size_tiny" @@ -57,6 +57,7 @@ android:layout_alignEnd="@+id/text" android:layout_alignRight="@+id/text" android:layout_below="@+id/text" + android:layout_marginBottom="-10dp" android:text="@string/accept"/> <Button @@ -64,8 +65,8 @@ style="@style/BriarButtonFlat.Negative" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_below="@+id/text" - android:layout_marginBottom="-15dp" + android:layout_alignBottom="@+id/acceptButton" + android:layout_alignTop="@+id/acceptButton" android:layout_toLeftOf="@+id/acceptButton" android:layout_toStartOf="@+id/acceptButton" android:text="@string/decline"/> diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index f9fad4a278ff9781cd4b1398f6f299299a81f23f..a23ec94b1c7a309d1f6c6d0fbd754ab773eb08d9 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -77,6 +77,7 @@ <string name="offline">Offline</string> <string name="send">Send</string> <string name="allow">Allow</string> + <string name="open">Open</string> <string name="no_data">No data</string> <string name="ellipsis">…</string> <string name="text_too_long">The entered text is too long</string> @@ -182,8 +183,8 @@ <!-- Private Group Invitations --> <string name="groups_invitations_title">Group Invitations</string> - <string name="groups_invitations_invitation_sent">You have invited %1$s to join the group "%2$s".</string> - <string name="groups_invitations_invitation_received">%1$s has invited you to join the group "%2$s".</string> + <string name="groups_invitations_invitation_sent">You have invited %1$s to join the group \"%2$s\".</string> + <string name="groups_invitations_invitation_received">%1$s has invited you to join the group \"%2$s\".</string> <string name="groups_invitations_joined">Joined group</string> <string name="groups_invitations_declined">Group invitation declined</string> <plurals name="groups_invitations_open"> diff --git a/briar-android/src/main/res/values/styles.xml b/briar-android/src/main/res/values/styles.xml index 6dfcf55af98cba83dcba6993421491a50f069811..99105713df16ed8960ba4da844601f6756b1af32 100644 --- a/briar-android/src/main/res/values/styles.xml +++ b/briar-android/src/main/res/values/styles.xml @@ -37,13 +37,11 @@ <style name="BriarButtonFlat.Negative" parent="Widget.AppCompat.Button.Borderless"> <item name="android:textColor">@color/briar_button_negative</item> <item name="android:textSize">@dimen/text_size_medium</item> - <item name="android:padding">@dimen/margin_large</item> </style> <style name="BriarButtonFlat.Positive" parent="Widget.AppCompat.Button.Borderless"> <item name="android:textColor">@color/briar_button_positive</item> <item name="android:textSize">@dimen/text_size_medium</item> - <item name="android:padding">@dimen/margin_large</item> </style> <style name="BriarButtonFlat.Positive.Tiny" parent="BriarButtonFlat.Positive"> diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java index 505a5a064b90d087e99d21c804da48e510ecc6d8..12b389134fd9613cc74d18f5426a95e9c60580a7 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationRequest.java @@ -16,11 +16,12 @@ public class BlogInvitationRequest extends InvitationRequest { public BlogInvitationRequest(MessageId id, SessionId sessionId, GroupId groupId, ContactId contactId, String blogAuthorName, - @Nullable String message, boolean available, long time, - boolean local, boolean sent, boolean seen, boolean read) { + @Nullable String message, @Nullable GroupId blogId, + boolean available, long time, boolean local, boolean sent, + boolean seen, boolean read) { - super(id, sessionId, groupId, contactId, message, available, time, - local, sent, seen, read); + super(id, sessionId, groupId, contactId, message, blogId, available, + time, local, sent, seen, read); this.blogAuthorName = blogAuthorName; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java index 664126aba9eb75a60dc35ae34394fefd974616e8..38a2e1680929bb1a532a111144161870868f1afb 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/BlogInvitationResponse.java @@ -11,11 +11,12 @@ import org.briarproject.briar.api.sharing.InvitationResponse; public class BlogInvitationResponse extends InvitationResponse { public BlogInvitationResponse(MessageId id, SessionId sessionId, - GroupId groupId, ContactId contactId, boolean accept, long time, - boolean local, boolean sent, boolean seen, boolean read) { + GroupId groupId, ContactId contactId, GroupId blogId, + boolean accept, long time, boolean local, boolean sent, + boolean seen, boolean read) { - super(id, sessionId, groupId, contactId, accept, time, local, sent, - seen, read); + super(id, sessionId, groupId, contactId, blogId, accept, time, local, + sent, seen, read); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java index 25a544510d36f37d1f1bbd3f6f84e17ca4320d4a..ae45c67da4f94af8369a084d4bb5d2666ba21421 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationRequest.java @@ -17,12 +17,13 @@ public class ForumInvitationRequest extends InvitationRequest { private final String forumName; public ForumInvitationRequest(MessageId id, SessionId sessionId, - GroupId groupId, ContactId contactId, String forumName, - @Nullable String message, boolean available, long time, - boolean local, boolean sent, boolean seen, boolean read) { + GroupId groupId, ContactId contactId, GroupId forumId, + String forumName, @Nullable String message, boolean available, + long time, boolean local, boolean sent, boolean seen, + boolean read) { - super(id, sessionId, groupId, contactId, message, available, time, - local, sent, seen, read); + super(id, sessionId, groupId, contactId, message, forumId, available, + time, local, sent, seen, read); this.forumName = forumName; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java index 4d65cf1c4ed245da69c1a301afaaa704a135a09e..31eb8698ab8fff6fcd288b59b1f0e802b84915b0 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/forum/ForumInvitationResponse.java @@ -14,11 +14,12 @@ import javax.annotation.concurrent.Immutable; public class ForumInvitationResponse extends InvitationResponse { public ForumInvitationResponse(MessageId id, SessionId sessionId, - GroupId groupId, ContactId contactId, boolean accept, long time, - boolean local, boolean sent, boolean seen, boolean read) { + GroupId groupId, ContactId contactId, GroupId forumId, + boolean accept, long time, boolean local, boolean sent, + boolean seen, boolean read) { - super(id, sessionId, groupId, contactId, accept, time, local, sent, - seen, read); + super(id, sessionId, groupId, contactId, forumId, accept, time, local, + sent, seen, read); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java index bf8110c6b383521ece7f5d87242ac58f10ba6b95..7c379b04a0771606b116f89357e007026f2d8475 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationRequest.java @@ -20,10 +20,11 @@ public class GroupInvitationRequest extends InvitationRequest { public GroupInvitationRequest(MessageId id, SessionId sessionId, GroupId groupId, ContactId contactId, @Nullable String message, - String groupName, Author creator, boolean available, long time, - boolean local, boolean sent, boolean seen, boolean read) { - super(id, sessionId, groupId, contactId, message, available, time, - local, sent, seen, read); + GroupId privateGroupId, String groupName, Author creator, + boolean available, long time, boolean local, boolean sent, + boolean seen, boolean read) { + super(id, sessionId, groupId, contactId, message, privateGroupId, + available, time, local, sent, seen, read); this.groupName = groupName; this.creator = creator; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java index 3a72271560354b27f707459ca6f7a4fd75f28690..2f89e1e85b7e6f8ba45811e65bb93c79393f26cb 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/invitation/GroupInvitationResponse.java @@ -14,9 +14,10 @@ import javax.annotation.concurrent.Immutable; public class GroupInvitationResponse extends InvitationResponse { public GroupInvitationResponse(MessageId id, SessionId sessionId, - GroupId groupId, ContactId contactId, boolean accept, long time, - boolean local, boolean sent, boolean seen, boolean read) { - super(id, sessionId, groupId, contactId, accept, time, local, sent, - seen, read); + GroupId groupId, ContactId contactId, GroupId privateGroupId, + boolean accept, long time, boolean local, boolean sent, + boolean seen, boolean read) { + super(id, sessionId, groupId, contactId, privateGroupId, accept, time, + local, sent, seen, read); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java index 495e9d489c3bf507c874cc074331266e9082cfe4..5a7e39d4959e4b5b4d034f9ba4960272b10a3d6e 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationMessage.java @@ -7,6 +7,7 @@ import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.BaseMessageHeader; import org.briarproject.briar.api.client.SessionId; +import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @Immutable @@ -15,14 +16,17 @@ public abstract class InvitationMessage extends BaseMessageHeader { private final SessionId sessionId; private final ContactId contactId; + @Nullable + private final GroupId invitedGroupId; public InvitationMessage(MessageId id, SessionId sessionId, GroupId groupId, - ContactId contactId, long time, boolean local, boolean sent, - boolean seen, boolean read) { + ContactId contactId, @Nullable GroupId invitedGroupId, long time, + boolean local, boolean sent, boolean seen, boolean read) { super(id, groupId, time, local, read, sent, seen); this.sessionId = sessionId; this.contactId = contactId; + this.invitedGroupId = invitedGroupId; } public SessionId getSessionId() { @@ -33,4 +37,9 @@ public abstract class InvitationMessage extends BaseMessageHeader { return contactId; } + @Nullable + public GroupId getInvitedGroupId() { + return invitedGroupId; + } + } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java index 9d961f9058754f2e9f39eb81a9247b9bdccd6717..b0a99e184b2e85362af758cb6e47d974658b59aa 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationRequest.java @@ -18,11 +18,12 @@ public abstract class InvitationRequest extends InvitationMessage { private final boolean available; public InvitationRequest(MessageId id, SessionId sessionId, GroupId groupId, - ContactId contactId, @Nullable String message, boolean available, - long time, boolean local, boolean sent, boolean seen, - boolean read) { + ContactId contactId, @Nullable String message, + @Nullable GroupId invitedGroupId, boolean available, long time, + boolean local, boolean sent, boolean seen, boolean read) { - super(id, sessionId, groupId, contactId, time, local, sent, seen, read); + super(id, sessionId, groupId, contactId, invitedGroupId, time, local, + sent, seen, read); this.message = message; this.available = available; } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java index ce94524c5686f9bcfc1f3a8d411a747b5560c275..15051e3b80103f5b6ab82287c2ef58932c54469b 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/sharing/InvitationResponse.java @@ -6,6 +6,7 @@ import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.client.SessionId; +import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @Immutable @@ -15,10 +16,12 @@ public abstract class InvitationResponse extends InvitationMessage { private final boolean accept; public InvitationResponse(MessageId id, SessionId sessionId, - GroupId groupId, ContactId contactId, boolean accept, long time, + GroupId groupId, ContactId contactId, + @Nullable GroupId invitedGroupId, boolean accept, long time, boolean local, boolean sent, boolean seen, boolean read) { - super(id, sessionId, groupId, contactId, time, local, sent, seen, read); + super(id, sessionId, groupId, contactId, invitedGroupId, time, local, + sent, seen, read); this.accept = accept; } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java index df59dbece6bf21f9e9855023f45dc242e9b745c6..312957b43193ff63bed4daffbcdab91c8a472ddf 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/CreatorProtocolEngine.java @@ -255,7 +255,7 @@ class CreatorProtocolEngine extends AbstractProtocolEngine<CreatorSession> { GroupInvitationMessage m, ContactId c, boolean accept) { SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes()); return new GroupInvitationResponse(m.getId(), sessionId, - m.getPrivateGroupId(), c, accept, m.getTimestamp(), false, - false, true, false); + m.getContactGroupId(), c, m.getPrivateGroupId(), accept, + m.getTimestamp(), false, false, true, false); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java index 87079ac5c28bfc5033dba87ddb23ca6411162d49..645243f5c89ed01c24d5bbcc7ec91b32e2dbedcd 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java @@ -381,10 +381,12 @@ class GroupInvitationManagerImpl extends ConversationClientImpl m, meta, status)); } else if (type == JOIN) { messages.add( - parseInvitationResponse(c, m, meta, status, true)); + parseInvitationResponse(c, contactGroupId, m, meta, + status, true)); } else if (type == LEAVE) { messages.add( - parseInvitationResponse(c, m, meta, status, false)); + parseInvitationResponse(c, contactGroupId, m, meta, + status, false)); } } db.commitTransaction(txn); @@ -404,7 +406,8 @@ class GroupInvitationManagerImpl extends ConversationClientImpl // Look up the invite message to get the details of the private group InviteMessage invite = getInviteMessage(txn, m); return new GroupInvitationRequest(m, sessionId, contactGroupId, c, - invite.getMessage(), invite.getGroupName(), invite.getCreator(), + invite.getMessage(), invite.getPrivateGroupId(), + invite.getGroupName(), invite.getCreator(), meta.isAvailableToAnswer(), meta.getTimestamp(), meta.isLocal(), status.isSent(), status.isSeen(), meta.isRead()); } @@ -418,11 +421,12 @@ class GroupInvitationManagerImpl extends ConversationClientImpl } private GroupInvitationResponse parseInvitationResponse(ContactId c, - MessageId m, MessageMetadata meta, MessageStatus status, - boolean accept) throws DbException, FormatException { + GroupId contactGroupId, MessageId m, MessageMetadata meta, + MessageStatus status, boolean accept) + throws DbException, FormatException { SessionId sessionId = getSessionId(meta.getPrivateGroupId()); - return new GroupInvitationResponse(m, sessionId, - meta.getPrivateGroupId(), c, accept, meta.getTimestamp(), + return new GroupInvitationResponse(m, sessionId, contactGroupId, c, + meta.getPrivateGroupId(), accept, meta.getTimestamp(), meta.isLocal(), status.isSent(), status.isSeen(), meta.isRead()); } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java index d1bf5bd6088076c8b87f4907fa4ce44907c369df..ba1a7623ad989b5829f1865b6893b89a9b9dec94 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngine.java @@ -318,8 +318,8 @@ class InviteeProtocolEngine extends AbstractProtocolEngine<InviteeSession> { ContactId c) { SessionId sessionId = new SessionId(m.getPrivateGroupId().getBytes()); return new GroupInvitationRequest(m.getId(), sessionId, - m.getContactGroupId(), c, m.getMessage(), m.getGroupName(), - m.getCreator(), true, m.getTimestamp(), false, false, true, - false); + m.getContactGroupId(), c, m.getMessage(), m.getPrivateGroupId(), + m.getGroupName(), m.getCreator(), true, m.getTimestamp(), false, + false, true, false); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogSharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogSharingManagerImpl.java index 68db4520d1254a3ef4633835cffebadb9d022990..721b633236a585cb144c049f8890db9f5cc061d2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/BlogSharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/BlogSharingManagerImpl.java @@ -40,6 +40,7 @@ import org.briarproject.briar.api.sharing.InvitationMessage; import java.security.SecureRandom; import java.util.Collection; +import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; import javax.inject.Inject; @@ -133,21 +134,23 @@ class BlogSharingManagerImpl extends @Override protected InvitationMessage createInvitationRequest(MessageId id, - BlogInvitation msg, ContactId contactId, boolean available, - long time, boolean local, boolean sent, boolean seen, - boolean read) { + BlogInvitation msg, ContactId contactId, GroupId blogId, + boolean available, long time, boolean local, boolean sent, + boolean seen, boolean read) { + return new BlogInvitationRequest(id, msg.getSessionId(), msg.getGroupId(), contactId, msg.getBlogAuthorName(), - msg.getMessage(), available, time, local, sent, seen, read); + msg.getMessage(), blogId, available, time, local, sent, seen, + read); } @Override protected InvitationMessage createInvitationResponse(MessageId id, SessionId sessionId, GroupId groupId, ContactId contactId, - boolean accept, long time, - boolean local, boolean sent, boolean seen, boolean read) { + GroupId blogId, boolean accept, long time, boolean local, + boolean sent, boolean seen, boolean read) { return new BlogInvitationResponse(id, sessionId, groupId, contactId, - accept, time, local, sent, seen, read); + blogId, accept, time, local, sent, seen, read); } @Override @@ -333,14 +336,17 @@ class BlogSharingManagerImpl extends @Override public BlogInvitationRequestReceivedEvent build( - BlogInviteeSessionState localState, long time, String msg) { + BlogInviteeSessionState localState, long time, + @Nullable String msg) { Blog blog = sFactory.parse(localState); ContactId contactId = localState.getContactId(); BlogInvitationRequest request = new BlogInvitationRequest(localState.getInvitationId(), - localState.getSessionId(), localState.getContactGroupId(), - contactId, blog.getAuthor().getName(), msg, true, - time, false, false, false, false); + localState.getSessionId(), + localState.getContactGroupId(), contactId, + blog.getAuthor().getName(), msg, + localState.getShareableId(), true, time, false, + false, false, false); return new BlogInvitationRequestReceivedEvent(blog, contactId, request); } @@ -358,8 +364,9 @@ class BlogSharingManagerImpl extends BlogInvitationResponse response = new BlogInvitationResponse(responseId, localState.getSessionId(), - localState.getShareableId(), - localState.getContactId(), accept, time, false, + localState.getContactGroupId(), + localState.getContactId(), + localState.getShareableId(), accept, time, false, false, false, false); return new BlogInvitationResponseReceivedEvent(c, response); } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumSharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumSharingManagerImpl.java index 8d92552557fe96e2003be37a89ee89a32592ac7b..75148d8a7455b1172dc505bf9fcf547ceabb25ef 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ForumSharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ForumSharingManagerImpl.java @@ -33,6 +33,7 @@ import org.briarproject.briar.api.sharing.InvitationMessage; import java.security.SecureRandom; +import javax.annotation.Nullable; import javax.inject.Inject; import static org.briarproject.briar.api.forum.ForumConstants.FORUM_NAME; @@ -81,21 +82,21 @@ class ForumSharingManagerImpl extends @Override protected InvitationMessage createInvitationRequest(MessageId id, - ForumInvitation msg, ContactId contactId, boolean available, - long time, boolean local, boolean sent, boolean seen, - boolean read) { + ForumInvitation msg, ContactId contactId, GroupId forumId, + boolean available, long time, boolean local, boolean sent, + boolean seen, boolean read) { return new ForumInvitationRequest(id, msg.getSessionId(), - msg.getGroupId(), contactId, msg.getForumName(), + msg.getGroupId(), contactId, forumId, msg.getForumName(), msg.getMessage(), available, time, local, sent, seen, read); } @Override protected InvitationMessage createInvitationResponse(MessageId id, SessionId sessionId, GroupId groupId, ContactId contactId, - boolean accept, long time, boolean local, boolean sent, - boolean seen, boolean read) { + GroupId forumId, boolean accept, long time, boolean local, + boolean sent, boolean seen, boolean read) { return new ForumInvitationResponse(id, sessionId, groupId, contactId, - accept, time, local, sent, seen, read); + forumId, accept, time, local, sent, seen, read); } @Override @@ -263,13 +264,15 @@ class ForumSharingManagerImpl extends @Override public ForumInvitationRequestReceivedEvent build( - ForumInviteeSessionState localState, long time, String msg) { + ForumInviteeSessionState localState, long time, + @Nullable String msg) { Forum forum = sFactory.parse(localState); ContactId contactId = localState.getContactId(); ForumInvitationRequest request = new ForumInvitationRequest( localState.getInvitationId(), localState.getSessionId(), - localState.getContactGroupId(), contactId, forum.getName(), msg, - true, time, false, false, false, false); + localState.getContactGroupId(), contactId, + localState.getShareableId(), forum.getName(), msg, true, + time, false, false, false, false); return new ForumInvitationRequestReceivedEvent(forum, contactId, request); } @@ -287,8 +290,9 @@ class ForumSharingManagerImpl extends throw new IllegalStateException("No responseId"); ForumInvitationResponse response = new ForumInvitationResponse( responseId, localState.getSessionId(), - localState.getShareableId(), localState.getContactId(), - accept, time, false, false, false, false); + localState.getContactGroupId(), localState.getContactId(), + localState.getShareableId(), accept, time, false, false, + false, false); return new ForumInvitationResponseReceivedEvent(name, c, response); } } diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java index c96d0df9fd422498632deaf06831dc4c48fef839..b383a36e82841c9ff253865be663ef4ff202a163 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/SharingManagerImpl.java @@ -125,13 +125,13 @@ abstract class SharingManagerImpl<S extends Shareable, I extends Invitation, IS protected abstract ClientId getClientId(); protected abstract InvitationMessage createInvitationRequest(MessageId id, - I msg, ContactId contactId, boolean available, long time, - boolean local, boolean sent, boolean seen, boolean read); + I msg, ContactId contactId, GroupId shareableId, boolean available, + long time, boolean local, boolean sent, boolean seen, boolean read); protected abstract InvitationMessage createInvitationResponse(MessageId id, SessionId sessionId, GroupId groupId, ContactId contactId, - boolean accept, long time, boolean local, boolean sent, - boolean seen, boolean read); + GroupId shareableId, boolean accept, long time, boolean local, + boolean sent, boolean seen, boolean read); protected abstract ShareableFactory<S, I, IS, SS> getSFactory(); @@ -391,6 +391,7 @@ abstract class SharingManagerImpl<S extends Shareable, I extends Invitation, IS try { MessageStatus status = db.getMessageStatus(txn, contactId, m.getKey()); + SharingSessionState s; long time = d.getLong(TIME); boolean local = d.getBoolean(LOCAL); boolean read = d.getBoolean(MSG_KEY_READ, false); @@ -398,11 +399,10 @@ abstract class SharingManagerImpl<S extends Shareable, I extends Invitation, IS if (type == SHARE_MSG_TYPE_INVITATION) { I msg = getIFactory().build(group.getId(), d); + SessionId sessionId = msg.getSessionId(); + s = getSessionState(txn, sessionId, true); if (!local) { // figure out whether the shareable is still available - SharingSessionState s = - getSessionState(txn, msg.getSessionId(), - true); if (!(s instanceof InviteeSessionState)) continue; available = ((InviteeSessionState) s).getState() == @@ -410,8 +410,9 @@ abstract class SharingManagerImpl<S extends Shareable, I extends Invitation, IS } InvitationMessage im = createInvitationRequest(m.getKey(), msg, - contactId, available, time, local, - status.isSent(), status.isSeen(), read); + contactId, s.getShareableId(), + available, time, local, status.isSent(), + status.isSeen(), read); list.add(im); } else if (type == SHARE_MSG_TYPE_ACCEPT || type == SHARE_MSG_TYPE_DECLINE) { @@ -419,10 +420,12 @@ abstract class SharingManagerImpl<S extends Shareable, I extends Invitation, IS BaseMessage msg = BaseMessage .from(getIFactory(), group.getId(), d); SessionId sessionId = msg.getSessionId(); - InvitationMessage im = createInvitationResponse( - m.getKey(), sessionId, group.getId(), contactId, - accept, time, local, status.isSent(), - status.isSeen(), read); + s = getSessionState(txn, sessionId, true); + InvitationMessage im = + createInvitationResponse(m.getKey(), sessionId, + group.getId(), contactId, + s.getShareableId(), accept, time, local, + status.isSent(), status.isSeen(), read); list.add(im); } else { throw new RuntimeException("Unexpected Message Type");