Merge branch '472-forum-no-message-for-the-inviter-if-an-invitee-accepts-or-declines' into 'master'

Show Responses to Forum Invitations in Private Conversation

Closes #472

See merge request !257
This commit is contained in:
akwizgran
2016-08-01 13:46:30 +00:00
23 changed files with 318 additions and 132 deletions

View File

@@ -227,6 +227,10 @@
<string name="forum_new_message_hint">New Entry</string>
<string name="forum_message_reply_hint">New Reply</string>
<string name="forum_invitation_already_sharing">Already sharing</string>
<string name="forum_invitation_response_accepted_sent">You accepted the forum invitation from %s.</string>
<string name="forum_invitation_response_declined_sent">You declined the forum invitation from %s.</string>
<string name="forum_invitation_response_accepted_received">%s accepted the forum invitation.</string>
<string name="forum_invitation_response_declined_received">%s declined the forum invitation.</string>
<!-- Dialogs -->
<string name="dialog_title_lost_password">Lost Password</string>

View File

@@ -34,10 +34,12 @@ 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.PrivateMessageReceivedEvent;
import org.briarproject.api.forum.ForumInvitationMessage;
import org.briarproject.api.forum.ForumInvitationRequest;
import org.briarproject.api.forum.ForumInvitationResponse;
import org.briarproject.api.forum.ForumSharingManager;
import org.briarproject.api.identity.IdentityManager;
import org.briarproject.api.identity.LocalAuthor;
@@ -48,6 +50,7 @@ import org.briarproject.api.introduction.IntroductionResponse;
import org.briarproject.api.messaging.MessagingManager;
import org.briarproject.api.messaging.PrivateMessageHeader;
import org.briarproject.api.plugins.ConnectionRegistry;
import org.briarproject.api.sharing.InvitationMessage;
import org.briarproject.api.sync.GroupId;
import java.util.ArrayList;
@@ -278,6 +281,11 @@ public class ContactListFragment extends BaseFragment implements EventListener {
LOG.info("Forum Invitation received, reloading conversation...");
ForumInvitationReceivedEvent m = (ForumInvitationReceivedEvent) e;
reloadConversation(m.getContactId());
} else if (e instanceof ForumInvitationResponseReceivedEvent) {
LOG.info("Forum Invitation Response received, reloading ...");
ForumInvitationResponseReceivedEvent m =
(ForumInvitationResponseReceivedEvent) e;
reloadConversation(m.getContactId());
}
}
@@ -395,10 +403,16 @@ public class ContactListFragment extends BaseFragment implements EventListener {
LOG.info("Loading introduction messages took " + duration + " ms");
now = System.currentTimeMillis();
Collection<ForumInvitationMessage> invitations =
Collection<InvitationMessage> invitations =
forumSharingManager.getInvitationMessages(id);
for (ForumInvitationMessage i : invitations) {
messages.add(ConversationItem.from(i));
for (InvitationMessage i : invitations) {
if (i instanceof ForumInvitationRequest) {
ForumInvitationRequest r = (ForumInvitationRequest) i;
messages.add(ConversationItem.from(r));
} else if (i instanceof ForumInvitationResponse) {
ForumInvitationResponse r = (ForumInvitationResponse) i;
messages.add(ConversationItem.from(getActivity(), "", r));
}
}
duration = System.currentTimeMillis() - now;
if (LOG.isLoggable(INFO))

View File

@@ -45,12 +45,14 @@ 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.MessagesAckedEvent;
import org.briarproject.api.event.MessagesSentEvent;
import org.briarproject.api.event.PrivateMessageReceivedEvent;
import org.briarproject.api.forum.ForumInvitationMessage;
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;
@@ -61,6 +63,7 @@ import org.briarproject.api.messaging.PrivateMessage;
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.sync.GroupId;
import org.briarproject.api.sync.MessageId;
import org.briarproject.util.StringUtils;
@@ -331,7 +334,7 @@ public class ConversationActivity extends BriarActivity
Collection<IntroductionMessage> introductions =
introductionManager
.getIntroductionMessages(contactId);
Collection<ForumInvitationMessage> invitations =
Collection<InvitationMessage> invitations =
forumSharingManager
.getInvitationMessages(contactId);
long duration = System.currentTimeMillis() - now;
@@ -350,7 +353,7 @@ public class ConversationActivity extends BriarActivity
private void displayMessages(final Collection<PrivateMessageHeader> headers,
final Collection<IntroductionMessage> introductions,
final Collection<ForumInvitationMessage> invitations) {
final Collection<InvitationMessage> invitations) {
runOnUiThread(new Runnable() {
@Override
public void run() {
@@ -384,9 +387,18 @@ public class ConversationActivity extends BriarActivity
}
items.add(item);
}
for (ForumInvitationMessage i : invitations) {
ConversationItem item = ConversationItem.from(i);
items.add(item);
for (InvitationMessage i : invitations) {
if (i instanceof ForumInvitationRequest) {
ForumInvitationRequest r =
(ForumInvitationRequest) i;
items.add(ConversationItem.from(r));
} else if (i instanceof ForumInvitationResponse) {
ForumInvitationResponse r =
(ForumInvitationResponse) i;
items.add(ConversationItem
.from(ConversationActivity.this,
contactName, r));
}
}
adapter.addAll(items);
// Scroll to the bottom
@@ -548,6 +560,12 @@ public class ConversationActivity extends BriarActivity
if (event.getContactId().equals(contactId)) {
loadMessages();
}
} else if (e instanceof ForumInvitationResponseReceivedEvent) {
ForumInvitationResponseReceivedEvent event =
(ForumInvitationResponseReceivedEvent) e;
if (event.getContactId().equals(contactId)) {
loadMessages();
}
}
}

View File

@@ -16,7 +16,7 @@ import org.briarproject.R;
import org.briarproject.android.forum.ForumInvitationsActivity;
import org.briarproject.android.util.AndroidUtils;
import org.briarproject.api.clients.SessionId;
import org.briarproject.api.forum.ForumInvitationMessage;
import org.briarproject.api.forum.ForumInvitationRequest;
import org.briarproject.api.introduction.IntroductionRequest;
import org.briarproject.api.messaging.PrivateMessageHeader;
import org.briarproject.util.StringUtils;
@@ -278,7 +278,7 @@ class ConversationAdapter extends RecyclerView.Adapter {
private void bindInvitation(InvitationHolder ui,
final ConversationForumInvitationItem item) {
ForumInvitationMessage fim = item.getForumInvitationMessage();
ForumInvitationRequest fim = item.getForumInvitationMessage();
String message = fim.getMessage();
if (StringUtils.isNullOrEmpty(message)) {

View File

@@ -1,6 +1,6 @@
package org.briarproject.android.contact;
import org.briarproject.api.forum.ForumInvitationMessage;
import org.briarproject.api.forum.ForumInvitationRequest;
// This class is not thread-safe
public class ConversationForumInvitationInItem
@@ -9,7 +9,7 @@ public class ConversationForumInvitationInItem
private boolean read;
public ConversationForumInvitationInItem(ForumInvitationMessage fim) {
public ConversationForumInvitationInItem(ForumInvitationRequest fim) {
super(fim);
this.read = fim.isRead();

View File

@@ -1,18 +1,18 @@
package org.briarproject.android.contact;
import org.briarproject.api.forum.ForumInvitationMessage;
import org.briarproject.api.forum.ForumInvitationRequest;
abstract class ConversationForumInvitationItem extends ConversationItem {
private final ForumInvitationMessage fim;
private final ForumInvitationRequest fim;
public ConversationForumInvitationItem(ForumInvitationMessage fim) {
public ConversationForumInvitationItem(ForumInvitationRequest fim) {
super(fim.getId(), fim.getTimestamp());
this.fim = fim;
}
public ForumInvitationMessage getForumInvitationMessage() {
public ForumInvitationRequest getForumInvitationMessage() {
return fim;
}
}

View File

@@ -1,6 +1,6 @@
package org.briarproject.android.contact;
import org.briarproject.api.forum.ForumInvitationMessage;
import org.briarproject.api.forum.ForumInvitationRequest;
/**
* This class is needed and can not be replaced by an ConversationNoticeOutItem,
@@ -15,7 +15,7 @@ public class ConversationForumInvitationOutItem
private boolean sent, seen;
public ConversationForumInvitationOutItem(ForumInvitationMessage fim) {
public ConversationForumInvitationOutItem(ForumInvitationRequest fim) {
super(fim);
this.sent = fim.isSent();
this.seen = fim.isSeen();

View File

@@ -3,7 +3,8 @@ package org.briarproject.android.contact;
import android.content.Context;
import org.briarproject.R;
import org.briarproject.api.forum.ForumInvitationMessage;
import org.briarproject.api.forum.ForumInvitationRequest;
import org.briarproject.api.forum.ForumInvitationResponse;
import org.briarproject.api.introduction.IntroductionMessage;
import org.briarproject.api.introduction.IntroductionRequest;
import org.briarproject.api.introduction.IntroductionResponse;
@@ -95,7 +96,7 @@ public abstract class ConversationItem {
}
}
public static ConversationItem from(ForumInvitationMessage fim) {
public static ConversationItem from(ForumInvitationRequest fim) {
if (fim.isLocal()) {
return new ConversationForumInvitationOutItem(fim);
} else {
@@ -103,6 +104,38 @@ public abstract class ConversationItem {
}
}
public static ConversationItem from(Context ctx, String contactName,
ForumInvitationResponse fir) {
if (fir.isLocal()) {
String text;
if (fir.wasAccepted()) {
text = ctx.getString(
R.string.forum_invitation_response_accepted_sent,
contactName);
} else {
text = ctx.getString(
R.string.forum_invitation_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.forum_invitation_response_accepted_received,
contactName);
} else {
text = ctx.getString(
R.string.forum_invitation_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 to provider data for the contact list.
@@ -115,7 +148,7 @@ public abstract class ConversationItem {
im.getTimestamp(), im.isRead());
}
protected interface OutgoingItem {
interface OutgoingItem {
MessageId getId();
@@ -128,7 +161,7 @@ public abstract class ConversationItem {
void setSeen(boolean seen);
}
protected interface IncomingItem {
interface IncomingItem {
MessageId getId();