Add visibility information to group member list

This commit is contained in:
Torsten Grote
2016-11-17 12:10:58 -02:00
parent 9b09b64ad3
commit d5f8808597
11 changed files with 115 additions and 75 deletions

View File

@@ -0,0 +1,40 @@
package org.briarproject.android.privategroup;
import android.content.Context;
import android.support.annotation.DrawableRes;
import org.briarproject.R;
import org.briarproject.api.privategroup.Visibility;
import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
public class VisibilityHelper {
public static String getVisibilityString(Context ctx, Visibility v,
String contact) {
switch (v) {
case VISIBLE:
return ctx.getString(R.string.groups_reveal_visible);
case REVEALED_BY_US:
return ctx.getString(
R.string.groups_reveal_visible_revealed_by_us);
case REVEALED_BY_CONTACT:
return ctx.getString(
R.string.groups_reveal_visible_revealed_by_contact,
contact);
case INVISIBLE:
return ctx.getString(R.string.groups_reveal_invisible);
default:
throw new IllegalArgumentException("Unknown visibility");
}
}
@DrawableRes
public static int getVisibilityIcon(Visibility v) {
if (v == INVISIBLE) {
return R.drawable.ic_visibility_off;
}
return R.drawable.ic_visibility;
}
}

View File

@@ -1,26 +0,0 @@
package org.briarproject.android.privategroup;
import android.support.annotation.StringRes;
import org.briarproject.R;
import org.briarproject.api.privategroup.Visibility;
public class VisibilityStringProvider {
@StringRes
public static int getVisibilityStringId(Visibility v) {
switch (v) {
case VISIBLE:
return R.string.groups_reveal_visible;
case REVEALED_BY_US:
return R.string.groups_reveal_visible_revealed_by_us;
case REVEALED_BY_CONTACT:
return R.string.groups_reveal_visible_revealed_by_contact;
case INVISIBLE:
return R.string.groups_reveal_invisible;
default:
throw new IllegalArgumentException("Unknown visibility");
}
}
}

View File

@@ -16,7 +16,8 @@ import org.briarproject.android.threaded.ThreadItemAdapter.ThreadItemListener;
import org.briarproject.api.nullsafety.NotNullByDefault;
import static org.briarproject.android.BriarActivity.GROUP_ID;
import static org.briarproject.android.privategroup.VisibilityStringProvider.getVisibilityStringId;
import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityIcon;
import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityString;
import static org.briarproject.api.identity.Author.Status.OURSELVES;
import static org.briarproject.api.identity.Author.Status.UNKNOWN;
import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
@@ -83,11 +84,11 @@ class JoinMessageItemViewHolder
options.setVisibility(View.GONE);
} else {
icon.setVisibility(View.VISIBLE);
icon.setImageResource(getVisibilityIcon(item.getVisibility()));
info.setVisibility(View.VISIBLE);
info.setText(getVisibilityStringId(item.getVisibility()));
info.setText(getVisibilityString(getContext(), item.getVisibility(),
item.getAuthor().getName()));
if (item.getVisibility() == INVISIBLE) {
icon.setImageResource(R.drawable.ic_visibility_off);
options.setVisibility(View.VISIBLE);
options.setOnClickListener(new View.OnClickListener() {
@Override
@@ -99,7 +100,6 @@ class JoinMessageItemViewHolder
}
});
} else {
icon.setImageResource(R.drawable.ic_visibility);
options.setVisibility(View.GONE);
}
}

View File

@@ -35,7 +35,7 @@ class MemberListAdapter extends
@Override
public boolean areContentsTheSame(MemberListItem m1, MemberListItem m2) {
if (m1.isSharing() != m2.isSharing()) return false;
if (m1.getVisibility() != m2.getVisibility()) return false;
if (m1.getStatus() != m2.getStatus()) return false;
return true;
}

View File

@@ -4,6 +4,7 @@ import org.briarproject.api.identity.Author;
import org.briarproject.api.identity.Author.Status;
import org.briarproject.api.nullsafety.NotNullByDefault;
import org.briarproject.api.privategroup.GroupMember;
import org.briarproject.api.privategroup.Visibility;
import javax.annotation.concurrent.Immutable;
@@ -15,11 +16,11 @@ class MemberListItem {
private final Author member;
private final Status status;
private final boolean sharing;
private final Visibility visibility;
public MemberListItem(GroupMember groupMember) {
this.member = groupMember.getAuthor();
this.sharing = groupMember.getVisibility() != INVISIBLE;
this.visibility = groupMember.getVisibility();
this.status = groupMember.getStatus();
}
@@ -27,8 +28,8 @@ class MemberListItem {
return member;
}
public boolean isSharing() {
return sharing;
public Visibility getVisibility() {
return visibility;
}
public Status getStatus() {

View File

@@ -4,35 +4,45 @@ import android.support.annotation.UiThread;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import org.briarproject.R;
import org.briarproject.android.view.AuthorView;
import org.briarproject.api.nullsafety.NotNullByDefault;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityIcon;
import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityString;
import static org.briarproject.api.identity.Author.Status.OURSELVES;
import static org.briarproject.api.identity.Author.Status.UNKNOWN;
@UiThread
@NotNullByDefault
class MemberListItemHolder extends RecyclerView.ViewHolder {
private final AuthorView author;
private final ImageView sharing;
private final ImageView icon;
private final TextView info;
MemberListItemHolder(View v) {
super(v);
author = (AuthorView) v.findViewById(R.id.authorView);
sharing = (ImageView) v.findViewById(R.id.sharingView);
icon = (ImageView) v.findViewById(R.id.icon);
info = (TextView) v.findViewById(R.id.info);
}
protected void bind(MemberListItem item) {
author.setAuthor(item.getMember());
author.setAuthorStatus(item.getStatus());
if (item.isSharing() && item.getStatus() != OURSELVES) {
sharing.setVisibility(VISIBLE);
if (item.getStatus() == OURSELVES || item.getStatus() == UNKNOWN) {
icon.setVisibility(View.GONE);
info.setVisibility(View.GONE);
} else {
sharing.setVisibility(INVISIBLE);
icon.setVisibility(View.VISIBLE);
icon.setImageResource(getVisibilityIcon(item.getVisibility()));
info.setVisibility(View.VISIBLE);
info.setText(
getVisibilityString(info.getContext(), item.getVisibility(),
item.getMember().getName()));
}
}

View File

@@ -10,7 +10,8 @@ import org.briarproject.android.contactselection.BaseSelectableContactHolder;
import org.briarproject.api.nullsafety.NotNullByDefault;
import org.jetbrains.annotations.Nullable;
import static org.briarproject.android.privategroup.VisibilityStringProvider.getVisibilityStringId;
import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityIcon;
import static org.briarproject.android.privategroup.VisibilityHelper.getVisibilityString;
import static org.briarproject.android.util.AndroidUtils.GREY_OUT;
import static org.briarproject.api.privategroup.Visibility.INVISIBLE;
@@ -32,13 +33,10 @@ public class RevealableContactViewHolder
OnContactClickListener<RevealableContactItem> listener) {
super.bind(item, listener);
info.setText(getVisibilityStringId(item.getVisibility()));
if (item.getVisibility() == INVISIBLE) {
icon.setImageResource(R.drawable.ic_visibility_off);
} else {
icon.setImageResource(R.drawable.ic_visibility);
}
icon.setImageResource(getVisibilityIcon(item.getVisibility()));
info.setText(
getVisibilityString(info.getContext(), item.getVisibility(),
item.getContact().getAuthor().getName()));
}
@Override