From 033bf77cbbffe287560e647a54a4035c992fbdad Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Fri, 6 Mar 2020 17:54:14 -0400 Subject: [PATCH] Allow future display of pending member count. --- .../conversation/ConversationFragment.java | 18 +++++++--- .../messagerequests/GroupMemberCount.java | 21 ++++++++++++ .../MessageRequestRepository.java | 8 +++-- .../MessageRequestViewModel.java | 34 ++++++++++--------- app/src/main/res/values/strings.xml | 4 +++ 5 files changed, 61 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/messagerequests/GroupMemberCount.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index 245943f48d..ae61857880 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -336,10 +336,11 @@ public class ConversationFragment extends Fragment return; } - Recipient recipient = recipientInfo.getRecipient(); - boolean isSelf = Recipient.self().equals(recipient); - int memberCount = recipientInfo.getGroupMemberCount(); - List groups = recipientInfo.getSharedGroups(); + Recipient recipient = recipientInfo.getRecipient(); + boolean isSelf = Recipient.self().equals(recipient); + int memberCount = recipientInfo.getGroupMemberCount(); + int pendingMemberCount = recipientInfo.getGroupPendingMemberCount(); + List groups = recipientInfo.getSharedGroups(); if (recipient != null) { conversationBanner.setAvatar(GlideApp.with(context), recipient); @@ -348,7 +349,14 @@ public class ConversationFragment extends Fragment conversationBanner.setTitle(title); if (recipient.isGroup()) { - conversationBanner.setSubtitle(context.getResources().getQuantityString(R.plurals.MessageRequestProfileView_members, memberCount, memberCount)); + if (pendingMemberCount > 0) { + conversationBanner.setSubtitle(context.getResources() + .getQuantityString(R.plurals.MessageRequestProfileView_members_and_invited, memberCount, + memberCount, pendingMemberCount)); + } else { + conversationBanner.setSubtitle(context.getResources().getQuantityString(R.plurals.MessageRequestProfileView_members, memberCount, + memberCount)); + } } else if (isSelf) { conversationBanner.setSubtitle(context.getString(R.string.ConversationFragment__you_can_add_notes_for_yourself_in_this_conversation)); } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/GroupMemberCount.java b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/GroupMemberCount.java new file mode 100644 index 0000000000..028638ec16 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/GroupMemberCount.java @@ -0,0 +1,21 @@ +package org.thoughtcrime.securesms.messagerequests; + +final class GroupMemberCount { + static final GroupMemberCount ZERO = new GroupMemberCount(0, 0); + + private final int fullMemberCount; + private final int pendingMemberCount; + + GroupMemberCount(int fullMemberCount, int pendingMemberCount) { + this.fullMemberCount = fullMemberCount; + this.pendingMemberCount = pendingMemberCount; + } + + int getFullMemberCount() { + return fullMemberCount; + } + + int getPendingMemberCount() { + return pendingMemberCount; + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java index 558b8f4bb8..6a73c691f8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java @@ -25,7 +25,7 @@ import org.whispersystems.libsignal.util.guava.Optional; import java.util.List; import java.util.concurrent.Executor; -public class MessageRequestRepository { +final class MessageRequestRepository { private final Context context; private final Executor executor; @@ -42,11 +42,13 @@ public class MessageRequestRepository { }); } - void getMemberCount(@NonNull RecipientId recipientId, @NonNull Consumer onMemberCountLoaded) { + void getMemberCount(@NonNull RecipientId recipientId, @NonNull Consumer onMemberCountLoaded) { executor.execute(() -> { GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context); Optional groupRecord = groupDatabase.getGroup(recipientId); - onMemberCountLoaded.accept(groupRecord.transform(record -> record.getMembers().size()).or(0)); + onMemberCountLoaded.accept(groupRecord.transform(record -> { + return new GroupMemberCount(record.getMembers().size(), 0); + }).or(GroupMemberCount.ZERO)); }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestViewModel.java index 3d501bc71e..d416da07c3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestViewModel.java @@ -25,13 +25,13 @@ import java.util.List; public class MessageRequestViewModel extends ViewModel { - private final SingleLiveEvent status = new SingleLiveEvent<>(); - private final MutableLiveData recipient = new MutableLiveData<>(); - private final MutableLiveData> groups = new MutableLiveData<>(Collections.emptyList()); - private final MutableLiveData memberCount = new MutableLiveData<>(0); - private final MutableLiveData displayState = new MutableLiveData<>(); - private final LiveData recipientInfo = Transformations.map(new LiveDataTriple<>(recipient, memberCount, groups), - triple -> new RecipientInfo(triple.first(), triple.second(), triple.third())); + private final SingleLiveEvent status = new SingleLiveEvent<>(); + private final MutableLiveData recipient = new MutableLiveData<>(); + private final MutableLiveData> groups = new MutableLiveData<>(Collections.emptyList()); + private final MutableLiveData memberCount = new MutableLiveData<>(GroupMemberCount.ZERO); + private final MutableLiveData displayState = new MutableLiveData<>(); + private final LiveData recipientInfo = Transformations.map(new LiveDataTriple<>(recipient, memberCount, groups), + triple -> new RecipientInfo(triple.first(), triple.second(), triple.third())); private final MessageRequestRepository repository; @@ -133,9 +133,7 @@ public class MessageRequestViewModel extends ViewModel { } private void loadMemberCount() { - repository.getMemberCount(liveRecipient.getId(), memberCount -> { - this.memberCount.postValue(memberCount == null ? 0 : memberCount); - }); + repository.getMemberCount(liveRecipient.getId(), memberCount::postValue); } @SuppressWarnings("ConstantConditions") @@ -161,13 +159,13 @@ public class MessageRequestViewModel extends ViewModel { } public static class RecipientInfo { - private final @Nullable Recipient recipient; - private final int groupMemberCount; - private final @NonNull List sharedGroups; + @Nullable private final Recipient recipient; + @NonNull private final GroupMemberCount groupMemberCount; + @NonNull private final List sharedGroups; - private RecipientInfo(@Nullable Recipient recipient, @Nullable Integer groupMemberCount, @Nullable List sharedGroups) { + private RecipientInfo(@Nullable Recipient recipient, @Nullable GroupMemberCount groupMemberCount, @Nullable List sharedGroups) { this.recipient = recipient; - this.groupMemberCount = groupMemberCount == null ? 0 : groupMemberCount; + this.groupMemberCount = groupMemberCount == null ? GroupMemberCount.ZERO : groupMemberCount; this.sharedGroups = sharedGroups == null ? Collections.emptyList() : sharedGroups; } @@ -177,7 +175,11 @@ public class MessageRequestViewModel extends ViewModel { } public int getGroupMemberCount() { - return groupMemberCount; + return groupMemberCount.getFullMemberCount(); + } + + public int getGroupPendingMemberCount() { + return groupMemberCount.getPendingMemberCount(); } @NonNull diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 71920464cb..a914a7f957 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -656,6 +656,10 @@ %1$d member %1$d members + + %1$d member (+%2$d invited) + %1$d members (+%2$d invited) + %d other %d others