From d5f880859721fd053d0ea2d9e424a1799d7d55bb Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 17 Nov 2016 12:10:58 -0200 Subject: [PATCH] Add visibility information to group member list --- briar-android/res/drawable/ic_sharing.xml | 10 ---- .../res/layout/list_item_group_member.xml | 46 +++++++++++++++---- briar-android/res/values/dimens.xml | 1 + briar-android/res/values/strings.xml | 8 ++-- .../privategroup/VisibilityHelper.java | 40 ++++++++++++++++ .../VisibilityStringProvider.java | 26 ----------- .../JoinMessageItemViewHolder.java | 10 ++-- .../memberlist/MemberListAdapter.java | 2 +- .../memberlist/MemberListItem.java | 9 ++-- .../memberlist/MemberListItemHolder.java | 24 +++++++--- .../reveal/RevealableContactViewHolder.java | 14 +++--- 11 files changed, 115 insertions(+), 75 deletions(-) delete mode 100644 briar-android/res/drawable/ic_sharing.xml create mode 100644 briar-android/src/org/briarproject/android/privategroup/VisibilityHelper.java delete mode 100644 briar-android/src/org/briarproject/android/privategroup/VisibilityStringProvider.java diff --git a/briar-android/res/drawable/ic_sharing.xml b/briar-android/res/drawable/ic_sharing.xml deleted file mode 100644 index 8327fd8e5..000000000 --- a/briar-android/res/drawable/ic_sharing.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/briar-android/res/layout/list_item_group_member.xml b/briar-android/res/layout/list_item_group_member.xml index f4bcebed3..14640f338 100644 --- a/briar-android/res/layout/list_item_group_member.xml +++ b/briar-android/res/layout/list_item_group_member.xml @@ -1,29 +1,55 @@ - + android:layout_below="@+id/authorView" + android:layout_marginLeft="@dimen/listitem_group_member_indentation" + android:layout_marginRight="@dimen/margin_small" + android:contentDescription="@string/forum_invitation_already_sharing" + android:src="@drawable/ic_visibility"/> - + + + + + diff --git a/briar-android/res/values/dimens.xml b/briar-android/res/values/dimens.xml index 6662acfe4..0fd1c3aff 100644 --- a/briar-android/res/values/dimens.xml +++ b/briar-android/res/values/dimens.xml @@ -28,6 +28,7 @@ 1dp 2dp 40dp + 32dp 48dp 2dp 30sp diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml index 3dbbb17a0..ae9b51147 100644 --- a/briar-android/res/values/strings.xml +++ b/briar-android/res/values/strings.xml @@ -202,10 +202,10 @@ Reveal Contacts You can choose whether to reveal contacts to all current and future members of this group.\n\nRevealing contacts makes your connection to the group faster and more reliable, because you can communicate with revealed contacts even when the creator of the group is offline. - Your relationship is visible to the group - Your relationship is visible to the group (revealed by you) - Your relationship is visible to the group (revealed by contact) - Your relationship is not visible to the group + Contact relationship is visible to the group + Contact relationship is visible to the group (revealed by you) + Contact relationship is visible to the group (revealed by %s) + Contact relationship is not visible to the group You don\'t have any forums yet.\n\nWhy don\'t you create a new one yourself by tapping the + icon at the top?\n\nYou can also ask your contacts to share forums with you. diff --git a/briar-android/src/org/briarproject/android/privategroup/VisibilityHelper.java b/briar-android/src/org/briarproject/android/privategroup/VisibilityHelper.java new file mode 100644 index 000000000..678fde325 --- /dev/null +++ b/briar-android/src/org/briarproject/android/privategroup/VisibilityHelper.java @@ -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; + } + +} diff --git a/briar-android/src/org/briarproject/android/privategroup/VisibilityStringProvider.java b/briar-android/src/org/briarproject/android/privategroup/VisibilityStringProvider.java deleted file mode 100644 index 0cd7e0dc7..000000000 --- a/briar-android/src/org/briarproject/android/privategroup/VisibilityStringProvider.java +++ /dev/null @@ -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"); - } - } - -} diff --git a/briar-android/src/org/briarproject/android/privategroup/conversation/JoinMessageItemViewHolder.java b/briar-android/src/org/briarproject/android/privategroup/conversation/JoinMessageItemViewHolder.java index d8705c8b9..bf8b22984 100644 --- a/briar-android/src/org/briarproject/android/privategroup/conversation/JoinMessageItemViewHolder.java +++ b/briar-android/src/org/briarproject/android/privategroup/conversation/JoinMessageItemViewHolder.java @@ -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); } } diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListAdapter.java b/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListAdapter.java index 409e76db1..be28f8e8b 100644 --- a/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListAdapter.java +++ b/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListAdapter.java @@ -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; } diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItem.java b/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItem.java index 469bdf6bd..42b001db7 100644 --- a/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItem.java +++ b/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItem.java @@ -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() { diff --git a/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItemHolder.java b/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItemHolder.java index a7e15ba31..2bf488a41 100644 --- a/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItemHolder.java +++ b/briar-android/src/org/briarproject/android/privategroup/memberlist/MemberListItemHolder.java @@ -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())); } } diff --git a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealableContactViewHolder.java b/briar-android/src/org/briarproject/android/privategroup/reveal/RevealableContactViewHolder.java index 5261a58e2..3fa6a3484 100644 --- a/briar-android/src/org/briarproject/android/privategroup/reveal/RevealableContactViewHolder.java +++ b/briar-android/src/org/briarproject/android/privategroup/reveal/RevealableContactViewHolder.java @@ -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 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