From ef16d096f1feed37728476e6a7892cb0530336bb Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 26 Feb 2019 13:32:57 -0300 Subject: [PATCH 1/3] [android] add group members to memberlist when they join --- .../memberlist/GroupMemberListActivity.java | 56 ++++++++++++++----- 1 file changed, 42 insertions(+), 14 deletions(-) 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..c4d50d34a 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,6 +7,9 @@ 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; @@ -15,6 +18,8 @@ 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 +28,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 +69,32 @@ 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(this.groupId) && + ge.getHeader() instanceof JoinMessageHeader) { + loadMembers(); + } + } + // TODO ContactConnectedEvent and ContactDisconnectedEvent + } + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { @@ -94,4 +106,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); + } + }); + } + } From 2a389c74dc0280260a9fa95d6d56259bfc8d8f6c Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 26 Feb 2019 14:42:30 -0300 Subject: [PATCH 2/3] [android] when sharing a forum or blog, add peers to list while it is open --- .../sharing/BlogSharingStatusActivity.java | 16 ++++++++++++ .../sharing/ForumSharingStatusActivity.java | 16 ++++++++++++ .../sharing/SharingStatusActivity.java | 25 +++++++++++++++++-- 3 files changed, 55 insertions(+), 2 deletions(-) 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..0660bc6f9 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 @@ -10,6 +10,9 @@ 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; @@ -18,6 +21,7 @@ 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 +36,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 +75,7 @@ abstract class SharingStatusActivity extends BriarActivity { @Override public void onStart() { super.onStart(); + eventBus.addListener(this); loadSharedWith(); } @@ -75,9 +83,21 @@ abstract class SharingStatusActivity extends BriarActivity { public void onStop() { super.onStop(); adapter.clear(); + eventBus.removeListener(this); list.showProgressBar(); } + @Override + public void eventOccurred(Event e) { + if (e instanceof ContactLeftShareableEvent) { + ContactLeftShareableEvent c = (ContactLeftShareableEvent) e; + if (c.getGroupId().equals(getGroupId())) { + loadSharedWith(); + } + } + // TODO ContactConnectedEvent and ContactDisconnectedEvent + } + @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items @@ -100,7 +120,7 @@ abstract class SharingStatusActivity extends BriarActivity { return groupId; } - private void loadSharedWith() { + protected void loadSharedWith() { runOnDbThread(() -> { try { List contactItems = new ArrayList<>(); @@ -118,6 +138,7 @@ abstract class SharingStatusActivity extends BriarActivity { private void displaySharedWith(List contacts) { runOnUiThreadUnlessDestroyed(() -> { + adapter.clear(); if (contacts.isEmpty()) list.showData(); else adapter.addAll(contacts); }); From a917ebdc76a07960bbf842ddcb5448117b3dec7b Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 27 Feb 2019 14:01:31 -0300 Subject: [PATCH 3/3] [android] Close memberlist or sharing status screen when group was left --- .../privategroup/memberlist/GroupMemberListActivity.java | 9 ++++++++- .../briar/android/sharing/SharingStatusActivity.java | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) 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 c4d50d34a..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 @@ -13,6 +13,7 @@ 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; @@ -87,10 +88,16 @@ public class GroupMemberListActivity extends BriarActivity // 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(this.groupId) && + 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 } 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 0660bc6f9..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; @@ -17,6 +18,7 @@ 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; @@ -88,12 +90,19 @@ abstract class SharingStatusActivity extends BriarActivity } @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 }