Implement UX for when a group has been dissolved

This commit is contained in:
Torsten Grote
2016-10-27 09:47:47 -02:00
parent 8dac2d1ca6
commit 67866dbe66
5 changed files with 58 additions and 13 deletions

View File

@@ -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"/>

View File

@@ -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() {

View File

@@ -13,4 +13,7 @@ public interface GroupController
void isCreator(PrivateGroup group,
ResultExceptionHandler<Boolean, DbException> handler);
void isDissolved(
ResultExceptionHandler<Boolean, DbException> handler);
}

View File

@@ -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);
}
}
});
}
}

View File

@@ -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