From 67866dbe66395b519aed5d1ecc62fdd6f9894676 Mon Sep 17 00:00:00 2001 From: Torsten Grote <t@grobox.de> Date: Thu, 27 Oct 2016 09:47:47 -0200 Subject: [PATCH] Implement UX for when a group has been dissolved --- briar-android/res/layout/list_item_group.xml | 2 +- .../conversation/GroupActivity.java | 37 +++++++++++++++++-- .../conversation/GroupController.java | 3 ++ .../conversation/GroupControllerImpl.java | 19 ++++++++++ .../list/GroupListControllerImpl.java | 10 +---- 5 files changed, 58 insertions(+), 13 deletions(-) diff --git a/briar-android/res/layout/list_item_group.xml b/briar-android/res/layout/list_item_group.xml index afb0b642c1..20ed6fc9f6 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 14000ec25a..da9ceed369 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 1a2fa951e8..ffdc971fce 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 df366c675c..34ce9768f9 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 76856f244d..8be76289fe 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 -- GitLab