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_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) {
@@ -56,7 +55,37 @@ public class GroupActivity extends
if (groupName != null) setTitle(groupName);
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
@@ -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
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
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 setGroupEnabled(boolean enabled) {
isDissolved = !enabled;
if (writeMenuItem != null) writeMenuItem.setVisible(enabled);
textInput.setSendButtonEnabled(enabled);
list.getRecyclerView().setAlpha(enabled ? 1f : 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);
}
writeMenuItem.setVisible(!isDissolved);
}
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

View File

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