diff --git a/briar-android/res/layout/list_item_group.xml b/briar-android/res/layout/list_item_group.xml index afb0b642c1d63557b3eb94111b25cf1921bfcfaa..20ed6fc9f660e9ba4e820d7323fe6320328bc526 100644 --- a/briar-android/res/layout/list_item_group.xml +++ b/briar-android/res/layout/list_item_group.xml @@ -80,6 +80,7 @@ android:layout_below="@+id/messageCountView" android:layout_toEndOf="@+id/avatarView" android:layout_toRightOf="@+id/avatarView" + android:layout_toLeftOf="@+id/removeButton" android:paddingTop="@dimen/margin_small" android:textColor="@color/briar_text_tertiary" tools:text="@string/groups_group_is_empty"/> @@ -91,7 +92,6 @@ android:layout_height="wrap_content" android:layout_alignBottom="@+id/divider" android:layout_alignParentRight="true" - android:layout_toRightOf="@+id/statusView" android:text="@string/groups_remove" tools:visibility="gone"/> diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupActivity.java b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupActivity.java index 14000ec25acbdd296bc9272b1e408bf770f7b910..da9ceed369df8058a59b0a1c0fdd424d7719e000 100644 --- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupActivity.java +++ b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupActivity.java @@ -33,9 +33,8 @@ public class GroupActivity extends @Inject GroupController controller; - private boolean isCreator; - private MenuItem leaveMenuItem; - private MenuItem dissolveMenuItem; + private boolean isCreator, isDissolved = false; + private MenuItem writeMenuItem, leaveMenuItem, dissolveMenuItem; @Override public void injectActivity(ActivityComponent component) { @@ -59,6 +58,24 @@ public class GroupActivity extends list.setEmptyText(R.string.groups_no_messages); } + @Override + public void onStart() { + super.onStart(); + controller.isDissolved( + new UiResultExceptionHandler<Boolean, DbException>(this) { + @Override + public void onResultUi(Boolean isDissolved) { + if (isDissolved) disableGroup(); + } + + @Override + public void onExceptionUi(DbException exception) { + // TODO proper error handling + finish(); + } + }); + } + @Override protected void onNamedGroupLoaded(PrivateGroup group) { setTitle(group.getName()); @@ -102,6 +119,7 @@ public class GroupActivity extends MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.group_actions, menu); + writeMenuItem = menu.findItem(R.id.action_group_compose_message); leaveMenuItem = menu.findItem(R.id.action_group_leave); dissolveMenuItem = menu.findItem(R.id.action_group_dissolve); showMenuItems(); @@ -143,6 +161,18 @@ public class GroupActivity extends return R.string.groups_message_received; } + @Override + public void onReplyClick(GroupMessageItem item) { + if (!isDissolved) super.onReplyClick(item); + } + + private void disableGroup() { + isDissolved = true; + if (writeMenuItem != null) writeMenuItem.setVisible(false); + textInput.setSendButtonEnabled(false); + list.setAlpha(0.5f); + } + private void showMenuItems() { if (leaveMenuItem == null || dissolveMenuItem == null) return; if (isCreator) { @@ -152,6 +182,7 @@ public class GroupActivity extends leaveMenuItem.setVisible(true); dissolveMenuItem.setVisible(false); } + if (isDissolved) writeMenuItem.setVisible(false); } private void showLeaveGroupDialog() { diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupController.java b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupController.java index 1a2fa951e87481a613e1a02ebc2ced45a0bb3f86..ffdc971fce6bcc7b221b748533d5f4f1a9a6fea5 100644 --- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupController.java +++ b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupController.java @@ -13,4 +13,7 @@ public interface GroupController void isCreator(PrivateGroup group, ResultExceptionHandler<Boolean, DbException> handler); + void isDissolved( + ResultExceptionHandler<Boolean, DbException> handler); + } diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java index df366c675c61193732c8fb901cd5be98c21cd3f9..34ce9768f93d5f87067fb030e6b3f0a8bb830475 100644 --- a/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java +++ b/briar-android/src/org/briarproject/android/privategroup/conversation/GroupControllerImpl.java @@ -195,4 +195,23 @@ public class GroupControllerImpl extends }); } + @Override + public void isDissolved(final + ResultExceptionHandler<Boolean, DbException> handler) { + runOnDbThread(new Runnable() { + @Override + public void run() { + try { + boolean isDissolved = + privateGroupManager.isDissolved(getGroupId()); + handler.onResult(isDissolved); + } catch (DbException e) { + if (LOG.isLoggable(WARNING)) + LOG.log(WARNING, e.toString(), e); + handler.onException(e); + } + } + }); + } + } diff --git a/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java b/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java index 76856f244d627722d468826586a55b92dbc56bb6..8be76289fe1ad638388d4526f2286a2a8f40165c 100644 --- a/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java +++ b/briar-android/src/org/briarproject/android/privategroup/list/GroupListControllerImpl.java @@ -2,7 +2,6 @@ package org.briarproject.android.privategroup.list; import android.support.annotation.CallSuper; -import org.briarproject.android.api.AndroidNotificationManager; import org.briarproject.android.controller.DbControllerImpl; import org.briarproject.android.controller.handler.ResultExceptionHandler; import org.briarproject.api.clients.MessageTracker.GroupCount; @@ -15,7 +14,6 @@ import org.briarproject.api.event.EventListener; import org.briarproject.api.event.GroupAddedEvent; import org.briarproject.api.event.GroupMessageAddedEvent; import org.briarproject.api.event.GroupRemovedEvent; -import org.briarproject.api.identity.IdentityManager; import org.briarproject.api.lifecycle.LifecycleManager; import org.briarproject.api.privategroup.GroupMessageHeader; import org.briarproject.api.privategroup.PrivateGroup; @@ -44,23 +42,17 @@ public class GroupListControllerImpl extends DbControllerImpl private final PrivateGroupManager groupManager; private final GroupInvitationManager groupInvitationManager; private final EventBus eventBus; - private final AndroidNotificationManager notificationManager; - private final IdentityManager identityManager; protected volatile GroupListListener listener; @Inject GroupListControllerImpl(@DatabaseExecutor Executor dbExecutor, LifecycleManager lifecycleManager, PrivateGroupManager groupManager, - GroupInvitationManager groupInvitationManager, EventBus eventBus, - AndroidNotificationManager notificationManager, - IdentityManager identityManager) { + GroupInvitationManager groupInvitationManager, EventBus eventBus) { super(dbExecutor, lifecycleManager); this.groupManager = groupManager; this.groupInvitationManager = groupInvitationManager; this.eventBus = eventBus; - this.notificationManager = notificationManager; - this.identityManager = identityManager; } @Override