Merge branch '672-implement-ux-for-dissolving-a-group' into 'master'

Implement UX for when a group has been dissolved

This MR is based on !367.

Closes #672

See merge request !369
This commit is contained in:
akwizgran
2016-11-01 11:02:27 +00:00
6 changed files with 72 additions and 27 deletions

View File

@@ -80,6 +80,7 @@
android:layout_below="@+id/messageCountView" android:layout_below="@+id/messageCountView"
android:layout_toEndOf="@+id/avatarView" android:layout_toEndOf="@+id/avatarView"
android:layout_toRightOf="@+id/avatarView" android:layout_toRightOf="@+id/avatarView"
android:layout_toLeftOf="@+id/removeButton"
android:paddingTop="@dimen/margin_small" android:paddingTop="@dimen/margin_small"
android:textColor="@color/briar_text_tertiary" android:textColor="@color/briar_text_tertiary"
tools:text="@string/groups_group_is_empty"/> tools:text="@string/groups_group_is_empty"/>
@@ -91,7 +92,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignBottom="@+id/divider" android:layout_alignBottom="@+id/divider"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/statusView"
android:text="@string/groups_remove" android:text="@string/groups_remove"
tools:visibility="gone"/> tools:visibility="gone"/>

View File

@@ -33,9 +33,8 @@ public class GroupActivity extends
@Inject @Inject
GroupController controller; GroupController controller;
private boolean isCreator; private boolean isCreator, isDissolved = false;
private MenuItem leaveMenuItem; private MenuItem writeMenuItem, leaveMenuItem, dissolveMenuItem;
private MenuItem dissolveMenuItem;
@Override @Override
public void injectActivity(ActivityComponent component) { public void injectActivity(ActivityComponent component) {
@@ -56,7 +55,37 @@ public class GroupActivity extends
if (groupName != null) setTitle(groupName); if (groupName != null) setTitle(groupName);
loadNamedGroup(); loadNamedGroup();
list.setEmptyText(R.string.groups_no_messages); setGroupEnabled(false);
}
@Override
@LayoutRes
protected int getLayout() {
return R.layout.activity_forum;
}
@Override
protected GroupMessageAdapter createAdapter(
LinearLayoutManager layoutManager) {
return new GroupMessageAdapter(this, layoutManager);
}
@Override
protected void loadItems() {
controller.isDissolved(
new UiResultExceptionHandler<Boolean, DbException>(this) {
@Override
public void onResultUi(Boolean isDissolved) {
setGroupEnabled(!isDissolved);
GroupActivity.super.loadItems();
}
@Override
public void onExceptionUi(DbException exception) {
// TODO proper error handling
finish();
}
});
} }
@Override @Override
@@ -84,24 +113,13 @@ public class GroupActivity extends
}); });
} }
@Override
@LayoutRes
protected int getLayout() {
return R.layout.activity_forum;
}
@Override
protected GroupMessageAdapter createAdapter(
LinearLayoutManager layoutManager) {
return new GroupMessageAdapter(this, layoutManager);
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar // Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater(); MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.group_actions, menu); inflater.inflate(R.menu.group_actions, menu);
writeMenuItem = menu.findItem(R.id.action_group_compose_message);
leaveMenuItem = menu.findItem(R.id.action_group_leave); leaveMenuItem = menu.findItem(R.id.action_group_leave);
dissolveMenuItem = menu.findItem(R.id.action_group_dissolve); dissolveMenuItem = menu.findItem(R.id.action_group_dissolve);
showMenuItems(); showMenuItems();
@@ -143,6 +161,18 @@ public class GroupActivity extends
return R.string.groups_message_received; return R.string.groups_message_received;
} }
@Override
public void onReplyClick(GroupMessageItem item) {
if (!isDissolved) super.onReplyClick(item);
}
private void setGroupEnabled(boolean enabled) {
isDissolved = !enabled;
if (writeMenuItem != null) writeMenuItem.setVisible(enabled);
textInput.setSendButtonEnabled(enabled);
list.getRecyclerView().setAlpha(enabled ? 1f : 0.5f);
}
private void showMenuItems() { private void showMenuItems() {
if (leaveMenuItem == null || dissolveMenuItem == null) return; if (leaveMenuItem == null || dissolveMenuItem == null) return;
if (isCreator) { if (isCreator) {
@@ -152,6 +182,7 @@ public class GroupActivity extends
leaveMenuItem.setVisible(true); leaveMenuItem.setVisible(true);
dissolveMenuItem.setVisible(false); dissolveMenuItem.setVisible(false);
} }
writeMenuItem.setVisible(!isDissolved);
} }
private void showLeaveGroupDialog() { private void showLeaveGroupDialog() {

View File

@@ -13,4 +13,7 @@ public interface GroupController
void isCreator(PrivateGroup group, void isCreator(PrivateGroup group,
ResultExceptionHandler<Boolean, DbException> handler); 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 android.support.annotation.CallSuper;
import org.briarproject.android.api.AndroidNotificationManager;
import org.briarproject.android.controller.DbControllerImpl; import org.briarproject.android.controller.DbControllerImpl;
import org.briarproject.android.controller.handler.ResultExceptionHandler; import org.briarproject.android.controller.handler.ResultExceptionHandler;
import org.briarproject.api.clients.MessageTracker.GroupCount; 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.GroupAddedEvent;
import org.briarproject.api.event.GroupMessageAddedEvent; import org.briarproject.api.event.GroupMessageAddedEvent;
import org.briarproject.api.event.GroupRemovedEvent; import org.briarproject.api.event.GroupRemovedEvent;
import org.briarproject.api.identity.IdentityManager;
import org.briarproject.api.lifecycle.LifecycleManager; import org.briarproject.api.lifecycle.LifecycleManager;
import org.briarproject.api.privategroup.GroupMessageHeader; import org.briarproject.api.privategroup.GroupMessageHeader;
import org.briarproject.api.privategroup.PrivateGroup; import org.briarproject.api.privategroup.PrivateGroup;
@@ -44,23 +42,17 @@ public class GroupListControllerImpl extends DbControllerImpl
private final PrivateGroupManager groupManager; private final PrivateGroupManager groupManager;
private final GroupInvitationManager groupInvitationManager; private final GroupInvitationManager groupInvitationManager;
private final EventBus eventBus; private final EventBus eventBus;
private final AndroidNotificationManager notificationManager;
private final IdentityManager identityManager;
protected volatile GroupListListener listener; protected volatile GroupListListener listener;
@Inject @Inject
GroupListControllerImpl(@DatabaseExecutor Executor dbExecutor, GroupListControllerImpl(@DatabaseExecutor Executor dbExecutor,
LifecycleManager lifecycleManager, PrivateGroupManager groupManager, LifecycleManager lifecycleManager, PrivateGroupManager groupManager,
GroupInvitationManager groupInvitationManager, EventBus eventBus, GroupInvitationManager groupInvitationManager, EventBus eventBus) {
AndroidNotificationManager notificationManager,
IdentityManager identityManager) {
super(dbExecutor, lifecycleManager); super(dbExecutor, lifecycleManager);
this.groupManager = groupManager; this.groupManager = groupManager;
this.groupInvitationManager = groupInvitationManager; this.groupInvitationManager = groupInvitationManager;
this.eventBus = eventBus; this.eventBus = eventBus;
this.notificationManager = notificationManager;
this.identityManager = identityManager;
} }
@Override @Override

View File

@@ -110,7 +110,7 @@ public abstract class ThreadListActivity<G extends NamedGroup, I extends ThreadI
@UiThread @UiThread
protected abstract void onNamedGroupLoaded(G groupItem); protected abstract void onNamedGroupLoaded(G groupItem);
private void loadItems() { protected void loadItems() {
final int revision = adapter.getRevision(); final int revision = adapter.getRevision();
getController().loadItems( getController().loadItems(
new UiResultExceptionHandler<Collection<I>, DbException>(this) { new UiResultExceptionHandler<Collection<I>, DbException>(this) {