diff --git a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java index 08e2d2650e113ca409cddc3e4186f6a6b9a191b3..e113a9a08577a2ab832c730755652840f3e8d1a0 100644 --- a/briar-android/src/org/briarproject/android/contact/ContactListFragment.java +++ b/briar-android/src/org/briarproject/android/contact/ContactListFragment.java @@ -33,7 +33,9 @@ import org.briarproject.api.event.ContactStatusChangedEvent; import org.briarproject.api.event.Event; import org.briarproject.api.event.EventBus; import org.briarproject.api.event.EventListener; -import org.briarproject.api.event.MessageStateChangedEvent; +import org.briarproject.api.event.ForumInvitationReceivedEvent; +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.ForumSharingManager; @@ -41,10 +43,11 @@ import org.briarproject.api.identity.IdentityManager; import org.briarproject.api.identity.LocalAuthor; import org.briarproject.api.introduction.IntroductionManager; import org.briarproject.api.introduction.IntroductionMessage; +import org.briarproject.api.introduction.IntroductionRequest; +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.sync.ClientId; import org.briarproject.api.sync.GroupId; import java.util.ArrayList; @@ -58,7 +61,6 @@ import static android.support.v4.app.ActivityOptionsCompat.makeSceneTransitionAn import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static org.briarproject.android.BriarActivity.GROUP_ID; -import static org.briarproject.api.sync.ValidationManager.State.DELIVERED; public class ContactListFragment extends BaseFragment implements EventListener { @@ -68,7 +70,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { Logger.getLogger(ContactListFragment.class.getName()); @Inject - protected ConnectionRegistry connectionRegistry; + ConnectionRegistry connectionRegistry; @Inject protected EventBus eventBus; @@ -245,6 +247,7 @@ public class ContactListFragment extends BaseFragment implements EventListener { } } else if (e instanceof ContactStatusChangedEvent) { LOG.info("Contact Status changed, reloading"); + // TODO We can update the contact state without needing to reload loadContacts(); } else if (e instanceof ContactConnectedEvent) { setConnected(((ContactConnectedEvent) e).getContactId(), true); @@ -258,26 +261,31 @@ public class ContactListFragment extends BaseFragment implements EventListener { PrivateMessageReceivedEvent p = (PrivateMessageReceivedEvent) e; PrivateMessageHeader h = p.getMessageHeader(); updateItem(p.getGroupId(), ConversationItem.from(h)); - } else if (e instanceof MessageStateChangedEvent) { - MessageStateChangedEvent m = (MessageStateChangedEvent) e; - ClientId c = m.getClientId(); - if (m.getState() == DELIVERED && - (c.equals(introductionManager.getClientId()) || - c.equals(forumSharingManager.getClientId()))) { - LOG.info("Message added, reloading"); - reloadConversation(m.getMessage().getGroupId()); - } + } else if (e instanceof IntroductionRequestReceivedEvent) { + LOG.info("Introduction Request received, update contact"); + IntroductionRequestReceivedEvent m = + (IntroductionRequestReceivedEvent) e; + IntroductionRequest ir = m.getIntroductionRequest(); + updateItem(m.getContactId(), ConversationItem.from(ir)); + } else if (e instanceof IntroductionResponseReceivedEvent) { + LOG.info("Introduction Response received, update contact"); + IntroductionResponseReceivedEvent m = + (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; + reloadConversation(m.getContactId()); } } - private void reloadConversation(final GroupId g) { + private void reloadConversation(final ContactId c) { listener.runOnDbThread(new Runnable() { @Override public void run() { try { - ContactId c = messagingManager.getContactId(g); - Collection<ConversationItem> messages = - getMessages(c); + Collection<ConversationItem> messages = getMessages(c); updateItem(c, messages); } catch (NoSuchContactException e) { LOG.info("Contact removed"); @@ -304,6 +312,20 @@ public class ContactListFragment extends BaseFragment implements EventListener { }); } + private void updateItem(final ContactId c, final ConversationItem m) { + listener.runOnUiThread(new Runnable() { + @Override + public void run() { + int position = adapter.findItemPosition(c); + ContactListItem item = adapter.getItem(position); + if (item != null) { + item.addMessage(m); + adapter.updateItem(position, item); + } + } + }); + } + private void updateItem(final GroupId g, final ConversationItem m) { listener.runOnUiThread(new Runnable() { @Override diff --git a/briar-api/src/org/briarproject/api/event/ForumInvitationReceivedEvent.java b/briar-api/src/org/briarproject/api/event/ForumInvitationReceivedEvent.java index 63aa3bce19810f3ba450e7eeeed6799c070a881f..d823a2a6ba42f23fe765faee6b4fa0e5a7d0feca 100644 --- a/briar-api/src/org/briarproject/api/event/ForumInvitationReceivedEvent.java +++ b/briar-api/src/org/briarproject/api/event/ForumInvitationReceivedEvent.java @@ -2,7 +2,6 @@ package org.briarproject.api.event; import org.briarproject.api.contact.ContactId; import org.briarproject.api.forum.Forum; -import org.briarproject.api.introduction.IntroductionRequest; public class ForumInvitationReceivedEvent extends InvitationReceivedEvent { diff --git a/briar-api/src/org/briarproject/api/event/InvitationReceivedEvent.java b/briar-api/src/org/briarproject/api/event/InvitationReceivedEvent.java index 4b1b6df2d36fb18f0e41124919571cc04a5d415a..834b71eddfc8df351bf34bdcc82d39036ad615b3 100644 --- a/briar-api/src/org/briarproject/api/event/InvitationReceivedEvent.java +++ b/briar-api/src/org/briarproject/api/event/InvitationReceivedEvent.java @@ -1,13 +1,12 @@ package org.briarproject.api.event; import org.briarproject.api.contact.ContactId; -import org.briarproject.api.forum.Forum; public abstract class InvitationReceivedEvent extends Event { private final ContactId contactId; - public InvitationReceivedEvent(ContactId contactId) { + InvitationReceivedEvent(ContactId contactId) { this.contactId = contactId; } diff --git a/briar-api/src/org/briarproject/api/sharing/SharingMessage.java b/briar-api/src/org/briarproject/api/sharing/SharingMessage.java index 78433ff6fa5ba601ff71a0a9c6c83cbb5bbefdae..2b14cefde4a0af5a0c6abb8f665b19552c067b5f 100644 --- a/briar-api/src/org/briarproject/api/sharing/SharingMessage.java +++ b/briar-api/src/org/briarproject/api/sharing/SharingMessage.java @@ -22,7 +22,7 @@ public interface SharingMessage { private final GroupId groupId; private final SessionId sessionId; - public BaseMessage(GroupId groupId, SessionId sessionId) { + BaseMessage(GroupId groupId, SessionId sessionId) { this.groupId = groupId; this.sessionId = sessionId; diff --git a/briar-core/src/org/briarproject/sharing/InviteeEngine.java b/briar-core/src/org/briarproject/sharing/InviteeEngine.java index e786d9a74b59891c20c4a79cb9dce856542698d5..766a37e4142f57a5033e9fe091c675bb43fd7f22 100644 --- a/briar-core/src/org/briarproject/sharing/InviteeEngine.java +++ b/briar-core/src/org/briarproject/sharing/InviteeEngine.java @@ -23,7 +23,7 @@ import static org.briarproject.api.sharing.SharingConstants.TASK_UNSHARE_SHAREAB import static org.briarproject.api.sharing.SharingMessage.BaseMessage; import static org.briarproject.api.sharing.SharingMessage.SimpleMessage; -public class InviteeEngine<IS extends InviteeSessionState, IR extends InvitationReceivedEvent> +class InviteeEngine<IS extends InviteeSessionState, IR extends InvitationReceivedEvent> implements ProtocolEngine<InviteeSessionState.Action, IS, BaseMessage> { private static final Logger LOG =