diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java index 5538a26a4..ecd17fe76 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/GroupMemberListActivity.java @@ -7,14 +7,20 @@ import android.view.MenuItem; import android.widget.TextView; import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.event.Event; +import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.event.EventListener; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; +import org.briarproject.bramble.api.sync.event.GroupRemovedEvent; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler; import org.briarproject.briar.android.view.BriarRecyclerView; +import org.briarproject.briar.api.privategroup.JoinMessageHeader; +import org.briarproject.briar.api.privategroup.event.GroupMessageAddedEvent; import java.util.Collection; @@ -23,10 +29,13 @@ import javax.inject.Inject; @MethodsNotNullByDefault @ParametersNotNullByDefault -public class GroupMemberListActivity extends BriarActivity { +public class GroupMemberListActivity extends BriarActivity + implements EventListener { @Inject GroupMemberListController controller; + @Inject + EventBus eventBus; private MemberListAdapter adapter; private BriarRecyclerView list; @@ -61,28 +70,38 @@ public class GroupMemberListActivity extends BriarActivity { @Override public void onStart() { super.onStart(); - controller.loadMembers(groupId, - new UiResultExceptionHandler, DbException>( - this) { - @Override - public void onResultUi(Collection members) { - adapter.addAll(members); - } - - @Override - public void onExceptionUi(DbException exception) { - handleDbException(exception); - } - }); + loadMembers(); + eventBus.addListener(this); list.startPeriodicUpdate(); } @Override public void onStop() { super.onStop(); + eventBus.removeListener(this); list.stopPeriodicUpdate(); } + @Override + public void eventOccurred(Event e) { + if (e instanceof GroupMessageAddedEvent) { + // we can't use GroupInvitationResponseReceivedEvent, because + // a peer only becomes a member after joining the group by message + GroupMessageAddedEvent ge = (GroupMessageAddedEvent) e; + if (ge.getGroupId().equals(groupId) && + ge.getHeader() instanceof JoinMessageHeader) { + loadMembers(); + } + } else if (e instanceof GroupRemovedEvent) { + GroupRemovedEvent g = (GroupRemovedEvent) e; + if (g.getGroup().getId().equals(groupId)) { + runOnUiThreadUnlessDestroyed( + this::supportFinishAfterTransition); + } + } + // TODO ContactConnectedEvent and ContactDisconnectedEvent + } + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { @@ -94,4 +113,20 @@ public class GroupMemberListActivity extends BriarActivity { } } + private void loadMembers() { + controller.loadMembers(groupId, + new UiResultExceptionHandler, DbException>( + this) { + @Override + public void onResultUi(Collection members) { + adapter.addAll(members); + } + + @Override + public void onExceptionUi(DbException exception) { + handleDbException(exception); + } + }); + } + } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogSharingStatusActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogSharingStatusActivity.java index 011ed26b4..35d606f96 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogSharingStatusActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BlogSharingStatusActivity.java @@ -3,11 +3,14 @@ package org.briarproject.briar.android.sharing; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; +import org.briarproject.briar.api.blog.BlogInvitationResponse; import org.briarproject.briar.api.blog.BlogSharingManager; +import org.briarproject.briar.api.blog.event.BlogInvitationResponseReceivedEvent; import java.util.Collection; @@ -26,6 +29,19 @@ public class BlogSharingStatusActivity extends SharingStatusActivity { component.inject(this); } + @Override + public void eventOccurred(Event e) { + super.eventOccurred(e); + if (e instanceof BlogInvitationResponseReceivedEvent) { + BlogInvitationResponseReceivedEvent r = + (BlogInvitationResponseReceivedEvent) e; + BlogInvitationResponse h = r.getMessageHeader(); + if (h.getShareableId().equals(getGroupId()) && h.wasAccepted()) { + loadSharedWith(); + } + } + } + @Override int getInfoText() { return R.string.sharing_status_blog; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumSharingStatusActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumSharingStatusActivity.java index 692191d4e..3c8203128 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumSharingStatusActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/ForumSharingStatusActivity.java @@ -3,11 +3,14 @@ package org.briarproject.briar.android.sharing; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; +import org.briarproject.briar.api.forum.ForumInvitationResponse; import org.briarproject.briar.api.forum.ForumSharingManager; +import org.briarproject.briar.api.forum.event.ForumInvitationResponseReceivedEvent; import java.util.Collection; @@ -26,6 +29,19 @@ public class ForumSharingStatusActivity extends SharingStatusActivity { component.inject(this); } + @Override + public void eventOccurred(Event e) { + super.eventOccurred(e); + if (e instanceof ForumInvitationResponseReceivedEvent) { + ForumInvitationResponseReceivedEvent r = + (ForumInvitationResponseReceivedEvent) e; + ForumInvitationResponse h = r.getMessageHeader(); + if (h.getShareableId().equals(getGroupId()) && h.wasAccepted()) { + loadSharedWith(); + } + } + } + @Override int getInfoText() { return R.string.sharing_status_forum; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java index c303d4371..e027b6dca 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusActivity.java @@ -2,6 +2,7 @@ package org.briarproject.briar.android.sharing; import android.content.Intent; import android.os.Bundle; +import android.support.annotation.CallSuper; import android.support.annotation.StringRes; import android.support.v7.widget.LinearLayoutManager; import android.view.MenuItem; @@ -10,14 +11,19 @@ import android.widget.TextView; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.event.Event; +import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.event.EventListener; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.plugin.ConnectionRegistry; import org.briarproject.bramble.api.sync.GroupId; +import org.briarproject.bramble.api.sync.event.GroupRemovedEvent; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.BriarActivity; import org.briarproject.briar.android.contact.ContactItem; import org.briarproject.briar.android.view.BriarRecyclerView; +import org.briarproject.briar.api.sharing.event.ContactLeftShareableEvent; import java.util.ArrayList; import java.util.Collection; @@ -32,10 +38,13 @@ import static org.briarproject.bramble.util.LogUtils.logException; @MethodsNotNullByDefault @ParametersNotNullByDefault -abstract class SharingStatusActivity extends BriarActivity { +abstract class SharingStatusActivity extends BriarActivity + implements EventListener { @Inject ConnectionRegistry connectionRegistry; + @Inject + EventBus eventBus; private static final Logger LOG = Logger.getLogger(SharingStatusActivity.class.getName()); @@ -68,6 +77,7 @@ abstract class SharingStatusActivity extends BriarActivity { @Override public void onStart() { super.onStart(); + eventBus.addListener(this); loadSharedWith(); } @@ -75,9 +85,28 @@ abstract class SharingStatusActivity extends BriarActivity { public void onStop() { super.onStop(); adapter.clear(); + eventBus.removeListener(this); list.showProgressBar(); } + @Override + @CallSuper + public void eventOccurred(Event e) { + if (e instanceof ContactLeftShareableEvent) { + ContactLeftShareableEvent c = (ContactLeftShareableEvent) e; + if (c.getGroupId().equals(getGroupId())) { + loadSharedWith(); + } + } else if (e instanceof GroupRemovedEvent) { + GroupRemovedEvent g = (GroupRemovedEvent) e; + if (g.getGroup().getId().equals(getGroupId())) { + runOnUiThreadUnlessDestroyed( + this::supportFinishAfterTransition); + } + } + // TODO ContactConnectedEvent and ContactDisconnectedEvent + } + @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items @@ -100,7 +129,7 @@ abstract class SharingStatusActivity extends BriarActivity { return groupId; } - private void loadSharedWith() { + protected void loadSharedWith() { runOnDbThread(() -> { try { List contactItems = new ArrayList<>(); @@ -118,6 +147,7 @@ abstract class SharingStatusActivity extends BriarActivity { private void displaySharedWith(List contacts) { runOnUiThreadUnlessDestroyed(() -> { + adapter.clear(); if (contacts.isEmpty()) list.showData(); else adapter.addAll(contacts); });